{"version":3,"sources":["kendo.ui.core.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","forceWidth","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","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","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","back","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","_started","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","now","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","skip","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","_destroyed","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","methodName","matchingTouch","dict","defaultThreshold","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","hold","tap","gesturestart","gesturechange","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","lastTap","_dragstart","_swipestart","_swipemove","direction","toOdataFilter","useOdataFour","operator","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","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","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","groups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ASCENDING","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupBy","groupValue","currentValue","_sortForGrouping","_sortGroups","sum","average","process","customGroupSort","query","groupDescriptorsWithoutCompare","normalizedSort","groupDescriptorsWithoutSort","filterCallback","groupDescriptor","setup","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","fromName","_wrapDataAccessBase","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_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","Deferred","resolve","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","deferred","_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","done","next","totalPages","_pageableQueryOptions","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_currentRequestTimeStamp","pageSkip","_processRangeData","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","paging","sorting","filtering","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_removeModelFromRange","_updateRangesLength","rangesLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","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","reset","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","removeClass","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","old","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","arr","addLength","oldLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","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","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","transformValue","step","elem","cur","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","setReverse","addRestoreProperties","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","face","_face","temporary","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","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","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","isJQueryPromise","fail","isNativePromise","hub","signalr","callbacks","_crud","server","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","wasValid","messageLabel","lblId","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","_inputWrapper","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","nonDefaultMessage","customMessage","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","gesture","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","_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","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","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","HORIZONTAL","VERTICAL","RESIZEEND","Resizable","orientation","_positionMouse","_position","_sizingDom","draggableElement","drag","dragcancel","dragstart","dragend","_stop","_max","hintSize","_initialElementPosition","_min","_initialMousePosition","_maxPosition","_minPosition","maxPosition","minPosition","currentPosition","invalidClass","resizing","targetPosition","containsOrEqualTo","defaultHint","defaultPlaceholder","BEFORE_MOVE","ACTION_SORT","ACTION_REMOVE","ACTION_RECEIVE","DEFAULT_FILTER","MISSING_INDEX","Sortable","_createDraggable","connectWith","cursor","moveOnDragEnter","_dragcancel","_dragend","draggedElement","_placeholder","draggableEvent","before","_setCursor","_resetCursor","targetCenter","offsetDelta","sibling","getSibling","_findTarget","axisDelta","eventData","_movementByAxis","_getElementCenter","appendToBottom","_movePlaceholder","appendAfterHidden","_isFloating","connectedList","connectedListEventData","draggedIndex","placeholderIndex","oldIndex","newIndex","getKendoSortable","_findElementUnderCursor","has","sortable","_isEmpty","_isLastHidden","_searchConnectedTargets","sortableInstance","connected","_isCursorAfterLast","lastItemOffset","lastItem","cursorPosition","_originalCursorType","_cursorStylesheet","_items","not","collision","elementPosition","Selectable","ARIASELECTED","SELECTED","ACTIVE","SELECTABLE","UNSELECT","UNSELECTING","supportEventDelegation","_marquee","_lastActive","aria","inputSelectors","_isElement","ctrlKey","metaKey","whichCode","buttonCode","button","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","selectable","asLowerString","CLICK","MOUSEDOWN","MOUSEUP","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","Button","iconElement","_focus","_blur","_keydown","_removeActive","_addActive","icon","iconClass","spriteCssClass","imageUrl","_isNativeButton","span","img","isEmpty","err","numeric","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","SIZE","KEYDOWN","DOCUMENT_ELEMENT","MAX_VALUE","Pager","pageSizes","pageItems","sizeClassName","_createDataSource","linkTemplate","selectTemplate","currentPageTemplate","_refreshHandler","downEvent","previousNext","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","_resizeHandler","_getWidthSizeClass","buttonCount","morePages","setDataSource","reminder","hasAll","selectAll","collapsedTotal","_collapsedTotal","_hideList","sizes","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","WINDOW","Popup","parentPopup","collisions","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_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","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","KNOTIFICATION","KICLOSE","KHIDING","INFO","SUCCESS","WARNING","WRAPPER","TEMPLATE","SAFE_TEMPLATE","Notification","_compileTemplates","templates","_guid","_isRtl","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","kendoTemplate","_compiled","templateId","_defaultCompiled","_safeCompiled","_getCompiled","defaultCompiled","paddings","paddingTop","paddingRight","paddingBottom","paddingLeft","horizontalAlignment","_popupOrigin","_popupPosition","_popupPaddings","_attachPopupEvents","attachClick","_hidePopup","closeIcon","attachDelay","_showPopup","openPopup","_triggerHide","deactivate","_togglePin","pin","win","_attachStaticEvents","_hideStatic","_showStatic","initializedNotifications","insertionMethod","getNotifications","defaultArgs","typeIcon","showText","warning","openedNotifications","guidElements","newOptions","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_isShownOnMouseEnter","_isShownOnClick","_mouseenter","autoHide","_mouseleave","_isShownOnFocus","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","candidate","OVERFLOW_ANCHOR","components","Item","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","TemplateItem","OverflowTemplateItem","Group","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","PRIMARY","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","overflowHidden","isEnabled","twin","splitContainerId","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","toggleHandler","propagate","getParentGroup","isChild","_addGraphics","align","hasIcon","showIcon","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","main","splitButton","kendoPopup","li","altKey","menuButtons","rootUid","adjustPopupWidth","computedWidth","fontFamily","min-width","separator","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_shrink","_buttonClick","release","_toggleOverflowAnchor","tool","overflowTool","component","itemClasses","overflowTemplate","_getItem","toolbarItem","overflowItem","isResizable","buttonGroupInstance","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isOnlyOverflowAnchor","lastItemNotOverflowAnchor","isFirstTool","prevFocusable","isOverflowAnchor","_getPrevFocusable","_preventNextFocus","_getNextElement","parentElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","ID","FOCUSED","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","HIDDENCLASS","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_angularElement","colGroup","row","currentColumn","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","columnsHeader","noData","footer","_listOptions","currentOptions","changeEventOption","_listChange","listBoundHandler","_listBound","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","$angular","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","_cascading","setDSFilter","filtersToRemove","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_old","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearTitle","clearButton","_inputValue","_typingTimeout","minLength","_state","_emptySearch","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_value","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_oldText","_valueBeforeCascade","_userTriggered","_oldIndex","isFiltered","_typing","typing","_enable","_dataValue","_offsetHeight","_height","offsetTop","popups","footerHeight","_openHandler","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","whiteSpace","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","padding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_current","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","optionLabel","dataText","dataValue","htmlElement","formId","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","startY","endY","tapPosition","_touchTriggered","_triggerClick","_render","scroll","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","added","_deselectFiltered","_deselect","_valueComparer","removeAt","setValue","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_template","templateText","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","isLastGroupedItem","_renderColumns","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","otherMonth","weekNumberTemplate","cellTemplate","emptyCellTemplate","otherMonthTemplate","otherMonthCellTemplate","createDate","disableDates","OTHERMONTH","isInRange","date1","date2","year1","getToday","DATE","restrictValue","shiftArray","multiplier","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","MOUSEENTER","FOCUS","prevent","dateObject","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","link","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_selectable","_viewWrapper","_focusView","focusOnNav","_cellID","_class","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","eventArgs","_toggleSelection","_cellsBySelector","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","toDate","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","active","viewWrapper","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","currentDate","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","weekday","hour","minute","second","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","_oldValue","stringAndFromat","toPair","_format","_paste","_input","_mouseUp","_scroll","navigationOnly","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","keycode","modifyPart","begin","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","getValue","newMonth","setMinutes","setSeconds","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","MAX","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","popupHovered","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","autocomplete","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","eventType","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","_ariaTemplate","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","lineHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","itemTemplate","placeholderTemplate","renderColumns","GROUPITEM","isActivePromise","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","valueGetter","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getIndecies","deferredRange","itemCount","defs","low","high","pages","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","initialIndices","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","minHeight","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","fixedGroupText","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","currentIndex","_currentGroup","_range","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","Infinity","list2","range2","_bufferSizes","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","ARIA_READONLY","AutoComplete","_loader","_keypress","_search","_prev","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_toggleCloseVisibility","_progressHandler","_separator","_unifySeparators","_last","wordIndex","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","nsFocusEvent","CLICKEVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","hasOptionLabel","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_filterPaste","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","dataLength","isInLoop","fromCharCode","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","optionLabelText","STATE_REBIND","newLineRegEx","_attachFocusEvents","_setText","syncValueAndText","_pasteTimeout","hasText","isCustom","_inputFocus","_inputFocusout","_arrowClick","_inputPaste","reinitialized","_openPopup","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","_setDomInputValue","caretStart","currentCaret","preventShow","maxLength","accessKey","A","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","SELECTEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_initialOpen","_tagTemplate","tagMode","autoClose","maxSelectedItems","tagTemplate","persistTagList","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","tagTextTemplate","notInput","closeButton","_removeTag","tag","customIndex","_close","_tagListClick","_clearClick","_retrieveData","_activeItem","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_getActiveItem","_getSelectedIndices","activeItemIdx","activeIndex","_multipleSelection","_selectRange","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","updatePersistTagList","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","isSelected","indicesToSelect","selectIndices","_innerWrapper","defaultTemplate","hasDataSource","isMultiple","computedStyles","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","createWrapper","isHorizontal","orientationCssClass","cssClasses","tickPlacementCssClass","tickPlacement","showButtons","createButton","buttonCssClass","createSliderItems","smallStep","createTrack","dragHandleCount","firstDragHandleTitle","leftDragHandleTitle","dragHandleTitle","rightDragHandleTitle","stepValue","formatValue","calculatePrecision","power","parseAttr","defined","removeFraction","RangeSlider","MOUSE_DOWN","TRACK_MOUSE_DOWN","MOUSE_UP","TRACK_MOUSE_UP","MOVE_SELECTION","KEY_DOWN","MOUSE_OVER","DRAG_HANDLE","TRACK_SELECTOR","TICK_SELECTOR","STATE_SELECTED","STATE_FOCUSED","STATE_DEFAULT","SliderBase","rtlDirectionSign","_isHorizontal","_sizeFn","_outerSize","tooltip","_createHtml","_trackDiv","_setTrackDivWidth","_maxSelection","_sliderItemsInit","_keyMap","37","40","39","38","35","36","33","largeStep","34","_distance","_refresh","sizeBetweenTicks","pixelWidths","_calculateItemsWidth","_setItemsWidth","_setItemsTitle","_calculateSteps","_setItemsLargeTick","trackDivPosition","bordersWidth","titleNumber","limit","increment","valueWithoutFraction","itemsCount","itemWidth","trackDivSize","pixelStep","_roundWidths","pixelWidthsArray","balance","_addAdditionalSize","additionalSize","_pixelSteps","_getValueFromPosition","mousePosition","dragableArea","halfStep","startPoint","_getFormattedValue","tooltipTemplate","_getDraggableArea","endPoint","_firstHandleDrag","_activeHandle","_lastHandleDrag","_activeHandleDrag","_updateTooltip","_focusWithMouse","_setTooltipTimeout","_removeTooltip","_tooltipTimeout","_clearTooltipTimeout","tooltipDiv","_formResetHandler","Slider","dragHandle","_selection","Selection","Drag","increaseButtonTitle","decreaseButtonTitle","mouseDownHandler","newVal","_nextValueByIndex","_valueIndex","_setValueInRange","timer","_clearTimer","_refreshAriaAttr","_tooltipDiv","moveSelection","selectionValue","selectionDiv","halfDragHanndle","rtlCorrection","owner","_activeDragHandle","_setZIndex","oldVal","_createTooltip","colloutCssClass","wnd","tooltipInnerDiv","_scrollOffset","moveTooltip","slideParams","constrainValue","noAnimation","fadeOut","dragHandles","sdhOffset","viewPortEnd","maxOverflow","firstInput","secondInput","warn","dragSelectionStart","dragSelectionEnd","activeHandleDrag","selectionStartValue","selectionEndValue","selectionStartIndex","selectionEndIndex","halfHandle","makeSelection","selectionPosition","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","WHITE","MESSAGES","noColor","clearColor","previewInput","CLICK_NS","ColorSelector","_tabIndex","_ariaId","_standalone","_triggerSelect","_updateUI","_onEnable","nohooks","_selectOnHide","ColorPalette","colors","tileSize","palette","_selectedID","ex","FlatColorPicker","_hueElements","_selectedColor","_colorAsText","_sliders","_hsvArea","autoupdate","_clearedColor","_getHSV","_applyIEFilter","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","hueSlider","opacitySlider","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","_hsvEvents","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","selOptions","_noColorIcon","_isInputTypeColor","selectorType","kendoButton","selectorColor","buttonHtml","CLASS_ICON","truncate","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keyup","_arrowsWrap","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_key","_step","isNumPadDecimal","_numericRegex","_addInvalidState","fractionRule","_floatRegExp","originalValue","rounder","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","editors","kendoNumericTextBox","kendoDatePicker","Editable","_validateProxy","_validate","clearContainer","skipFocus","editor","isObject","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","DATABOUND","DATABINDING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","ListView","_itemId","_pageable","_crudHandlers","navigatable","altTemplate","editTemplate","_item","_progress","_error","_destroyEditable","pagerId","pageable","pager","multi","_scrollTo","scrollDirectionFunc","UseJQueryoffset","elementDimension","containerScrollAmount","containerDimension","clickCallback","focusAgain","canHandle","isTextBox","editItem","edit","clearSelection","_modelFromElement","_closeEditable","kendoEditable","clickNS","getSortedDomIndices","isUndefined","DRAGGEDCLASS","FOCUSED_CLASS","SELECTED_STATE_CLASS","RESET","DRAG_CLUE_CLASS","DROP_HINT_CLASS","isInputElement","CommandFactory","ListBoxCommand","RemoveItemsCommand","MoveItemsCommand","MoveUpItemsCommand","MoveDownItemsCommand","TransferItemsCommand","TransferItemsToCommand","TransferItemsFromCommand","TransferAllItemsToCommand","TransferAllItemsFromCommand","kendoAttr","DASH","DOT","SPACE","HASH","KENDO_LISTBOX","DISABLED_STATE_CLASS","ENABLED_ITEM_SELECTOR","ENABLED_ITEMS_SELECTOR","TOOLBAR_CLASS","TOOL_SELECTOR","LIST_CLASS","LIST_SELECTOR","ADD","REORDER","MOVE_UP","MOVE_DOWN","TRANSFER_TO","TRANSFER_FROM","TRANSFER_ALL_TO","TRANSFER_ALL_FROM","UNIQUE_ID","COMMAND","MOVE_UP_OFFSET","MOVE_DOWN_OFFSET","TOOLBAR_POSITION_CLASS_NAMES","ListBox","_list","_createToolbar","_createNavigatable","_listTabIndex","_getList","_destroyToolbar","_target","_draggable","dropSources","tools","moveUp","moveDown","transferTo","transferFrom","transferAllTo","transferAllFrom","_addItem","_bindDataSource","_syncElement","itemContent","_addItemAt","_insertElementAt","_keyDown","_getTabIndex","oldTarget","isInput","_getNavigatableItem","nextAll","_scrollIntoView","shouldPreventDefault","_shiftSelecting","_executeCommand","elementNode","listBox","_searchConnectedListBox","connectedListBox","closestContainer","originalElement","getKendoListBox","draggableOptions","draggedItem","_updateToolbar","_updateAllToolbars","dataItemAtIndex","itemAtIndex","listItem","_removeElement","listItems","_getItems","_removeItem","uniqueIdAttr","enabledItems","_enableItem","_dataChangeHandler","_setItemIds","viewLength","toolbarElement","toolbarOptions","toolbarInsertion","commandName","execute","_updateToolStates","listBoxElements","elementsLength","_commands","commandType","getItems","canExecute","moveItems","movedItem","indecesInDom","movedItems","itemComparer","moveAction","item1","item2","indexItem1","indexItem2","domIndices","sourceListBox","getSourceListBox","destinationListBox","getDestinationListBox","updatedSelection","getUpdatedSelection","updateSelection","itemFilter","lastEnabledItem","containsLastItem","itemToSelect","_initTemplates","_createTools","_attachEventHandlers","_detachEventHandlers","toolsLength","toolsMessages","toolList","_createToolList","defaultTools","_onToolClick","_executeToolCommand","_updateToolState","toolName","toolElement","stringDiffStart","str1","str2","PASTE","MaskedTextBox","_rules","_tokenize","_togglePrompt","_emptyMask","_timeoutId","_maskLength","clearPromptChar","unmaskOnPost","promptChar","0","9","#","L","?","&","C","_submitHandler","unmasked","_unmask","emptyMask","_mask","_unmaskedValue","_trackChange","_inputHandler","_legacyIEInputHandler","__changing","inputChange","backward","contentStart","endContent","lengthDiff","__dropping","_trimStartPromptChars","_findCaretPosBackwards","__backward","__pasting","chr","chrIdx","tokenIdx","tokensLength","_blinkInvalidState","_invalidStateTimeout","maskChars","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","LINK_SELECTOR","excludedNodesRegExp","updateArrow","updateFirstLast","arrowCssClass","getArrowCssClass","MENU","updateHasAriaPopup","parentLi","getParentLiItems","storeItemSelectEventHandler","selectHandler","getItemSelectEventHandler","setItemData","popupOpenerSelector","popupGroupSelector","getChildPopups","currentPopup","overflowWrapper","childPopupOpener","opener","popupId","POPUP_OPENER_ATTR","popupParentItem","POPUP_ID_ATTR","itemPopup","animationContainerSelector","overflowMenuParents","getParents","mousewheelDelta","parentsScroll","scrollDirection","isPointerTouch","allPointers","pointerType","touchPointerTypes","isTouch","removeSpacesBetweenItems","ContextMenu","DELAY","SCROLLSPEED","TIMER","ZINDEX","POINTERDOWN","TOUCHSTART","MOUSEWHEEL","SCROLLWIDTH","SCROLLHEIGHT","OFFSETWIDTH","OFFSETHEIGHT","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","availableItemsSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","scrollButtonSelector","itemWrapper","scrollButton","image","sprite","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imageAttr","contentCssAttributes","contentAttr","defaultClasses","textClass","textAttributes","arrowClass","encoded","groupAttributes","expanded","groupCssClass","Menu","_initData","_updateClasses","_animations","nextItemZIndex","_initOverflow","_attachMenuEventsHandlers","openOnClick","clicked","closeOnClick","hoverDelay","scrollable","popupCollision","_overflowWrapper","_preventClose","_removeHoverItem","_checkActiveElement","_mouseleavePopup","_mouseenterPopup","_documentClickHandler","_documentClick","_detachMenuEventsHandlers","backwardBtn","forwardBtn","initialWidth","initialCssWidth","_openedPopups","_scrollWrapper","_initScrolling","_setOverflowWrapperWidth","_toggleScrollButtons","_popupsWrapper","menuWidth","borders","wrapperCssWidth","_reinitOverflow","overflowChanged","_destroyOverflow","popupWrapper","popupParentLi","isNumeric","mouseWheelDistance","backwardDouble","forwardDouble","scrolling","touchEvents","scrollValue","finish","mouseenterHandler","mousedownHandler","scrollSpeed","_closeChildPopups","currentScroll","_toggleDisabled","referenceItem","inserted","_insert","plain","groupData","renderGroup","renderItem","parentItems","visiblePopups","closePopup","overflowPopup","windowHeight","setScrolling","nextZindex","parentHorizontal","_triggerEvent","maxHeight","_configurePopupOverflow","_initPopupScrolling","popupOpener","groupId","_wrapPopupElement","skipMouseEvents","_initPopupScrollButtons","scrollButtons","_closeParentPopups","_keyTriggered","_setPopupHeight","popupOuterHeight","popupOffsetTop","bottomScrollbar","canFit","_initialHeight","dontClearClose","hasChildPopupsHovered","isPopupMouseLeaved","_isRootItem","_forceClose","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","_itemHasChildren","pointerTouch","delegateTarget","rootMenuItems","subMenuItems","toElement","_closePopups","rootPopup","groupParent","innerPopup","_innerPopup","openHandle","childGroup","childGroupVisible","shouldCloseTheRootItem","childPopupId","formNode","itemElement","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","_parentsUntil","enterKey","itemSelectEventData","isSelectItemDefaultPrevented","isSelectDefaultPrevented","_getEventData","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemDown","_itemUp","_itemEsc","_childPopupElement","menuIsVertical","nextItem","_scrollToItem","_itemRight","parentItem","_itemLeft","scrollDir","currentScrollOffset","itemSize","itemOffset","ulSize","scrollButtonSize","itemPosition","menu","renderContent","subGroup","renderItems","_marker","_wire","_initialWidth","alignToAnchor","_showProxy","_closeProxy","_configurePopupScrolling","_setPopupWidth","windowWidth","popupOuterWidth","popupOffsetLeft","maxWidth","_closeTimeoutProxy","_showHandler","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_triggerProxy","updateItemHtml","toggleButton","HREF","LINKSELECTOR","GROUP","VISIBLEGROUP","EXPAND","COLLAPSE","ACTIVECLASS","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","clickableItems","disabledItems","selectableItems","defaultState","SINGLE","contentUrl","ariaHidden","contentAttributes","itemIcon","PanelBar","_retryRequest","_first","expand","_angularCompile","requestFailed","retry","loadOnDemand","expandMode","_angularCompileElements","_angularCleanup","fieldAccessor","_fieldAccessor","useAnimation","animBackup","_animating","_addGroupElement","_collapseAllExpanded","_toggleItem","showProgress","loadingText","_refreshRoot","rootItemsHtml","_refreshChildren","_toggleGroup","findByUid","uidAttr","tempItem","_updateItems","_appendItems","_hasChildItems","retryHtml","_expanded","fieldBindings","itemsHtml","nodeWrapper","currentNode","panelBar","skipChange","_updateSelected","reload","focused","isReferenceItem","_updateItemsClasses","panels","panelsParent","_updateItemClasses","wrapElement","contentUrls","isAnchor","isVisible","notVisible","animationSettings","hasCollapseAnimation","_animationCallback","stopExpand","contentElement","statusIcon","loadingIconTimeout","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","KSTATEDISABLED","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","PRECISION","progressStatus","ProgressBar","_progressProperty","_fields","_validateType","_progressAnimation","_updateProgress","chunkCount","showStatus","_isStarted","progressWrapper","currentType","initialStatusValue","_addChunkProgressWrapper","_calculatePercentage","validated","_roundValue","_updateChunks","_onProgressUpdateAlways","_updateProgressWrapper","completedChunks","percentagesPerChunk","percentageParsed","completedChunksCount","animationDuration","_animation","animationCssOptions","_addRegularProgressWrapper","_onProgressAnimateStart","_onProgressAnimate","_onProgressAnimateComplete","always","progressStatusWrapSize","progressInPercent","progressValue","progressWrapperSize","chunkSize","_normalizeChunkSize","lastChunk","_calculateChunkSize","chunkContainer","_onePercent","ACTIVATE_EVENTS","ResponsivePanel","_toggleHandler","_toggleButtonClick","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","head","styleSheet","createTextNode","prevented","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","CONTENTURL","NAVIGATABLEITEMS","KEYBOARDNAVIGATABLEITEMS","HOVERABLEITEMS","DEFAULTDISTANCE","TabStrip","_contentUrls","_tabPosition","_scrollable","_keyDownProxy","wr","contentHolder","activateTab","_endItem","endItem","rtl","tabPosition","tab","dataEncodedField","dataContentField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","collapsible","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","_appendUrlItem","_moveUrlItem","_removeUrlItem","referenceTab","referenceContent","fromIndex","newTabsCreated","activeItem","activeTab","contentElements","_elementId","tabStripID","elementId","wrapperId","isInitialUpdate","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","_sizeScrollWrap","neighbours","oldFocusedTab","_scrollTabsToItem","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","mouseDown","mouseUp","_scrollableAllowed","_nowScrollingTabs","marginRight","_scrollTabsByDelta","tabGroupWidth","tabGroupPadding","scrLeft","hasCloseAnimation","oldTab","isAnimationEnabled","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","abort","scrollContainer","halfWidth","fakeProgress","endState","oldProgressAnimation","ajaxOptions","ajaxSettings","request","progressUpload","upload","evt","noProgress","XMLHttpRequest","lengthComputable","stopProgress","statusText","tabStrip","offsetDiff","dst","midnight","noon","lastTimeOption","interval","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","lastIdx","msLastTime","msInterval","innerText","_distinctSelection","selectionIndex","timeView","timeFormat","ARIA_OWNS","dateViewParams","timeViewParams","DateTimePicker","_views","_icons","_midnight","_calculateMidnight","dateButtonText","timeButtonText","dateIcon","timeIcon","_timeIcon","secondView","minDateEqual","maxDateEqual","timeViewOptions","rebind","isDateViewVisible","adjustedDate","_timeSelected","icons","isPercentageSize","isPixelSize","pxUnitsRegex","isFluid","calculateSize","panePropertyAccessor","triggersResize","splitter","paneConfig","PANE","PaneResizing","horizontalDefaults","verticalDefaults","_resizable","_createHint","resizeend","LAYOUTCHANGE","KPANE","PANECLASS","Splitter","_dimension","_keys","decrease","increase","_resizeStep","_initPanes","triggerHandler","_addOverlays","_panes","_removeOverlays","_togglePane","_detachEvents","panes","navigationKeys","isResizing","_triggerAction","panesConfig","_initPane","config","arrowType","_updateSplitBar","splitbar","previousPane","nextPane","catIconIf","iconType","condition","prevCollapsible","prevCollapsed","collapsed","nextCollapsible","nextCollapsed","_updateSplitBars","_removeSplitBars","sizedPanesWidth","sizedPanesCount","freeSizedPanes","freeSizePanesCount","freeSizePaneWidth","alternateSizingProperty","positioningProperty","sizingDomProperty","lastNonCollapsedPane","splitBars","splitBarsCount","sizingProperty","totalSize","collapsedSize","_addPane","paneElement","referencePane","mousePositioningProperty","previousPaneConfig","nextPaneConfig","prevBoundary","nextBoundary","toPx","prevMinSize","prevMaxSize","nextMinSize","nextMaxSize","ghostPosition","previousPaneNewSize","nextPaneNewSize","fluidPanesCount","constrain","buttonKeyTrigger","PopupBox","Alert","kendoAlert","Confirm","kendoConfirm","Prompt","kendoPrompt","KDIALOG","KWINDOW","KICONCLOSE","KCONTENTCLASS","KCONTENTSELECTOR","KCONTENT","KSCROLL","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","TOUCHMOVE","small","medium","large","DATADOCOVERFLOWRULE","DATAHTMLTAPYRULE","CSSFLEXBOX","okText","promptInput","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","_triggerOpen","sizeClass","actions","_createActionbar","_closable","_enableDocumentScrolling","_overlay","_setElementMaxHeight","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","_applyScrollClassName","hasScroll","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","preventScroll","_stopDocumentScrolling","_overlayedNodes","jthis","hiddenValue","_closeClick","_closeKeyHandler","closable","titleId","titlebarActions","closeAction","isStretchedLayout","buttonLayout","_addButtons","_normalizeButtonSize","btn","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","buttonSize","_mergeTextWithOptions","lastButton","closeBtn","actionButtons","_runActionBtn","preventClose","toFront","_triggerInitOpen","_focusDialog","otherModalsVisible","overlayFx","showOptions","_animationOptions","_modals","Fade","fadeIn","_openAnimationEnd","basicAnimation","_initOpenTriggered","originalZIndex","windowObject","zIndexNew","systemTriggered","_stopCenterOnResize","hideOptions","_removeOverlay","_closeAnimationEnd","_centerOnResize","documentWindow","newLeft","newTop","_trackResize","modals","hideOverlay","_object","$html","$body","_storeOverflowRule","_touchStart","passive","_touchMove","$target","upScroll","preventYScroll","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","lastModal","zStack","encodedHtml","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","confirm","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","toInt","executableScript","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowResizing","_preventDragging","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","WindowDragging","MODAL_NS","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","suppressActions","_createWindow","minTop","minLeft","maxTop","maxLeft","_buttonEnter","_buttonLeave","_windowActionHandler","windowInstance","aria-labelledby","_onDocumentResize","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","toggleMaximization","resizeHandle","dragging","_actions","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","newWidth","newHeight","w","unpin","maximize","minimize","_actionForIcon","k-i-close","k-i-window-maximize","k-i-window-minimize","k-i-window-restore","k-i-refresh","k-i-pin","k-i-unpin","titleBarHeight","titleBar","titleElement","containmentContext","doc","_activate","_containerScrollTop","_containerScrollLeft","suppressAnimation","defaultPrevented","_deactivate","_actionable","_shouldFocus","windowTop","currentWindow","shouldRestrictTop","restoreOptions","_sizingAction","actionId","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","hasMargin","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","_finishDrag","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","_layout","_scroller","_model","layout","getLayout","stretch","modelScope","scroller","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","scrollerContent","idAttrValue","contentSelector","controller","$apply","_callController","$scope","_locate","platform","previousView","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","_xhrComplete","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","changeMessage","transitionDone","EXTERNAL","DUMMY_HREF","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","rel","delayedTouchEnd","openFor","paneContainer","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","popupOptions","containerPopup","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","shim","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","leftPositioned","swipeToOpenViews","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","getOrientationClass","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","hideBar","defaultTitle","_hideBar","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_shimHideProxy","actionData","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","useTap","clickOn","_userEvents","_timeoutDeactivate","badge","badgeElement","iconSpan","BackButton","DetailButton","DISABLE","_button","selectOn","buttongroup","COLLAPSIBLE","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","Collapsible","_buildHeader","inset","collapseIcon","expandIcon","iconPosition","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","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","currentHeader","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","pull","_pulled","itemConstructor","prevItem","endReached","below","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","autoFilter","searchInput","_oldFilter","_filterChange","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_itemBinder","_pullToRefreshHandler","_enhanceItems","emptyDataSource","_scrollerInstance","triggerChange","replaceItem","newItem","_dim","_highlight","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","scrollView","_changeProxy","_refreshProxy","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pageElements","_paged","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","_content","viewInit","bounceVelocityThreshold","prevPage","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","RESOLVEDPREFIX","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","snapPoint","_animateBackground","handleWidth","ACTIVE_STATE_CLASS","_buildButton","switchTo","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","destroyRegister","kNgDisabled","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","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","$log","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","attributeName","cls","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","encode","encOpen","encClose","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","roleattr","Editor","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","isString","_checkBoxSelection","angularDataItem","templateSettings","col","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templateName","outerHTML"],"mappings":"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AU,EACVx+L,QAAS,SAAUqsK,EAAUywB,GACzB,GAA6B,KAAzBA,EAAOoC,GAAX,CAGA7yB,EAASrvJ,WAAWmkE,EACpB,IAAIlnF,GAAWoyK,EAAS,GAAG8yB,SAC3B,OAAO,UAAU7xK,EAAOj+B,EAASglM,EAAOE,GAEpC,IADA,GAAI/c,IACIA,GAAc+c,EAAYrlM,QAC9BsoL,EAAa+c,EAAY/qL,OAExBguK,IAGDA,EAAWv9K,SAASilM,EAAcjlM,GAClC5K,EAAQ0wB,UAHRq3K,EAAK71D,KAAKpgD,EAAW,4EAA8EhmF,EAAQ3M,KAAK,oBAW9IP,OAAOuB,MAAMitB,OAAQxuB,OAAOyuB,SACvBzuB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOyjC,IAAMzjC,OAAS,SAAU0jC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU5jC,EAAGC,QACVA,OAAO,iBACH,aACA,eACA,cACA,aACA,WACA,mBACA,iBACA,aACA,qBACA,eACA,kBACA,mBACA,oBACA,wBACA,kBACA,iBACA,mBACA,eACA,cACA,cACA,qBACA,gBACA,gBACA,aACA,iBACA,kBACA,mBACA,qBACA,qBACA,iBACA,oBACA,oBACA,iBACA,gBACA,uBACA,sBACA,aACA,iBACA,iBACA,oBACA,wBACA,iBACA,mBACA,uBACA,eACA,iBACA,eACA,eACA,oBACA,uBACA,sBACA,wBACA,oBACA,oBACA,yBACA,sBACA,yBACA,oBACA,2BACA,2BACA,sBACA,2BACA,2BACA,wBACA,sBACA,0BACA,sBACA,wBACA,iBACDD,IACL,WACE,YACA,OAAOG,QAAOuB,OACE,kBAAVzB,SAAwBA,OAAOyjC,IAAMzjC,OAAS,SAAU0jC,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.ui.core.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 = '2019.1.220'.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), forceWidth = element.hasClass('k-tooltip') || element.is('.k-menu-horizontal.k-context-menu');\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width || forceWidth)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\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 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.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.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.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\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, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort && !inPlace) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data);\n if (skip !== undefined && take !== undefined) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (options.submit) {\n that.submit = options.submit;\n }\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName, name;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[i];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _changesCanceled: noop,\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, items, replaceSubset;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n });\n that._sortRanges();\n },\n _sortRanges: function () {\n this._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n result = that._queryProcess(data, options);\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that.view(result.data);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().done(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query(that._pageableQueryOptions({\n pageSize: val,\n page: 1\n }));\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _pageableQueryOptions: function (options) {\n return options;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length || that.total() === 0) {\n that._processRangeData(data, skip, take, pageSkip, size);\n callback();\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n 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.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n 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.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.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.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.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.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.resizable', [\n 'kendo.core',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'resizable',\n name: 'Resizable',\n category: 'framework',\n depends: [\n 'core',\n 'draganddrop'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, extend = $.extend, HORIZONTAL = 'horizontal', VERTICAL = 'vertical', START = 'start', RESIZE = 'resize', RESIZEEND = 'resizeend';\n var Resizable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.orientation = that.options.orientation.toLowerCase() != VERTICAL ? HORIZONTAL : VERTICAL;\n that._positionMouse = that.orientation == HORIZONTAL ? 'x' : 'y';\n that._position = that.orientation == HORIZONTAL ? 'left' : 'top';\n that._sizingDom = that.orientation == HORIZONTAL ? 'outerWidth' : 'outerHeight';\n that.draggable = new ui.Draggable(options.draggableElement || element, {\n distance: 1,\n filter: options.handle,\n drag: proxy(that._resize, that),\n dragcancel: proxy(that._cancel, that),\n dragstart: proxy(that._start, that),\n dragend: proxy(that._stop, that)\n });\n that.userEvents = that.draggable.userEvents;\n },\n events: [\n RESIZE,\n RESIZEEND,\n START\n ],\n options: {\n name: 'Resizable',\n orientation: HORIZONTAL\n },\n resize: function () {\n },\n _max: function (e) {\n var that = this, hintSize = that.hint ? that.hint[that._sizingDom]() : 0, size = that.options.max;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size - hintSize : size;\n },\n _min: function (e) {\n var that = this, size = that.options.min;\n return isFunction(size) ? size(e) : size !== undefined ? that._initialElementPosition + size : size;\n },\n _start: function (e) {\n var that = this, hint = that.options.hint, el = $(e.currentTarget);\n that._initialElementPosition = el.position()[that._position];\n that._initialMousePosition = e[that._positionMouse].startLocation;\n if (hint) {\n that.hint = isFunction(hint) ? $(hint(el)) : hint;\n that.hint.css({ position: 'absolute' }).css(that._position, that._initialElementPosition).appendTo(that.element);\n }\n that.trigger(START, e);\n that._maxPosition = that._max(e);\n that._minPosition = that._min(e);\n $(document.body).css('cursor', el.css('cursor'));\n },\n _resize: function (e) {\n var that = this, maxPosition = that._maxPosition, minPosition = that._minPosition, currentPosition = that._initialElementPosition + (e[that._positionMouse].location - that._initialMousePosition), position;\n position = minPosition !== undefined ? Math.max(minPosition, currentPosition) : currentPosition;\n that.position = position = maxPosition !== undefined ? Math.min(maxPosition, position) : position;\n if (that.hint) {\n that.hint.toggleClass(that.options.invalidClass || '', position == maxPosition || position == minPosition).css(that._position, position);\n }\n that.resizing = true;\n that.trigger(RESIZE, extend(e, { position: position }));\n },\n _stop: function (e) {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n that.resizing = false;\n that.trigger(RESIZEEND, extend(e, { position: that.position }));\n $(document.body).css('cursor', '');\n },\n _cancel: function (e) {\n var that = this;\n if (that.hint) {\n that.position = undefined;\n that.hint.css(that._position, that._initialElementPosition);\n that._stop(e);\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (that.draggable) {\n that.draggable.destroy();\n }\n },\n press: function (target) {\n if (!target) {\n return;\n }\n var position = target.position(), that = this;\n that.userEvents.press(position.left, position.top, target[0]);\n that.targetPosition = position;\n that.target = target;\n },\n move: function (delta) {\n var that = this, orientation = that._position, position = that.targetPosition, current = that.position;\n if (current === undefined) {\n current = position[orientation];\n }\n position[orientation] = current + delta;\n that.userEvents.move(position.left, position.top);\n },\n end: function () {\n this.userEvents.end();\n this.target = this.position = undefined;\n }\n });\n kendo.ui.plugin(Resizable);\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.sortable', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'sortable',\n name: 'Sortable',\n category: 'framework',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, START = 'start', BEFORE_MOVE = 'beforeMove', MOVE = 'move', END = 'end', CHANGE = 'change', CANCEL = 'cancel', ACTION_SORT = 'sort', ACTION_REMOVE = 'remove', ACTION_RECEIVE = 'receive', DEFAULT_FILTER = '>*', MISSING_INDEX = -1;\n function containsOrEqualTo(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function defaultHint(element) {\n return element.clone();\n }\n function defaultPlaceholder(element) {\n return element.clone().removeAttr('id').css('visibility', 'hidden');\n }\n var Sortable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n if (!that.options.placeholder) {\n that.options.placeholder = defaultPlaceholder;\n }\n if (!that.options.hint) {\n that.options.hint = defaultHint;\n }\n that.draggable = that._createDraggable();\n },\n events: [\n START,\n BEFORE_MOVE,\n MOVE,\n END,\n CHANGE,\n CANCEL\n ],\n options: {\n name: 'Sortable',\n hint: null,\n placeholder: null,\n filter: DEFAULT_FILTER,\n holdToDrag: false,\n disabled: null,\n container: null,\n connectWith: null,\n handler: null,\n cursorOffset: null,\n axis: null,\n ignore: null,\n autoScroll: false,\n cursor: 'auto',\n moveOnDragEnter: false\n },\n destroy: function () {\n this.draggable.destroy();\n Widget.fn.destroy.call(this);\n },\n _createDraggable: function () {\n var that = this, element = that.element, options = that.options;\n return new kendo.ui.Draggable(element, {\n filter: options.filter,\n hint: kendo.isFunction(options.hint) ? options.hint : $(options.hint),\n holdToDrag: options.holdToDrag,\n container: options.container ? $(options.container) : null,\n cursorOffset: options.cursorOffset,\n axis: options.axis,\n ignore: options.ignore,\n autoScroll: options.autoScroll,\n dragstart: $.proxy(that._dragstart, that),\n dragcancel: $.proxy(that._dragcancel, that),\n drag: $.proxy(that._drag, that),\n dragend: $.proxy(that._dragend, that)\n });\n },\n _dragstart: function (e) {\n var draggedElement = this.draggedElement = e.currentTarget, disabled = this.options.disabled, handler = this.options.handler, _placeholder = this.options.placeholder, placeholder = this.placeholder = kendo.isFunction(_placeholder) ? $(_placeholder.call(this, draggedElement)) : $(_placeholder);\n if (disabled && draggedElement.is(disabled)) {\n e.preventDefault();\n } else if (handler && !$(e.initialTarget).is(handler)) {\n e.preventDefault();\n } else {\n if (this.trigger(START, {\n item: draggedElement,\n draggableEvent: e\n })) {\n e.preventDefault();\n } else {\n draggedElement.css('display', 'none');\n draggedElement.before(placeholder);\n this._setCursor();\n }\n }\n },\n _dragcancel: function () {\n this._cancel();\n this.trigger(CANCEL, { item: this.draggedElement });\n this._resetCursor();\n },\n _drag: function (e) {\n var draggedElement = this.draggedElement, target = this._findTarget(e), targetCenter, cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, offsetDelta, axisDelta = {\n x: e.x.delta,\n y: e.y.delta\n }, direction, sibling, getSibling, axis = this.options.axis, moveOnDragEnter = this.options.moveOnDragEnter, eventData = {\n item: draggedElement,\n list: this,\n draggableEvent: e\n };\n if (axis === 'x' || axis === 'y') {\n this._movementByAxis(axis, cursorOffset, axisDelta[axis], eventData);\n return;\n }\n if (target) {\n targetCenter = this._getElementCenter(target.element);\n offsetDelta = {\n left: Math.round(cursorOffset.left - targetCenter.left),\n top: Math.round(cursorOffset.top - targetCenter.top)\n };\n $.extend(eventData, { target: target.element });\n if (target.appendToBottom) {\n this._movePlaceholder(target, null, eventData);\n return;\n }\n if (target.appendAfterHidden) {\n this._movePlaceholder(target, 'next', eventData);\n }\n if (this._isFloating(target.element)) {\n if (axisDelta.x < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left < 0) {\n direction = 'prev';\n } else if (axisDelta.x > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.left > 0) {\n direction = 'next';\n }\n } else {\n if (axisDelta.y < 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top < 0) {\n direction = 'prev';\n } else if (axisDelta.y > 0 && moveOnDragEnter || !moveOnDragEnter && offsetDelta.top > 0) {\n direction = 'next';\n }\n }\n if (direction) {\n getSibling = direction === 'prev' ? jQuery.fn.prev : jQuery.fn.next;\n sibling = getSibling.call(target.element);\n while (sibling.length && !sibling.is(':visible')) {\n sibling = getSibling.call(sibling);\n }\n if (sibling[0] != this.placeholder[0]) {\n this._movePlaceholder(target, direction, eventData);\n }\n }\n }\n },\n _dragend: function (e) {\n var placeholder = this.placeholder, draggedElement = this.draggedElement, draggedIndex = this.indexOf(draggedElement), placeholderIndex = this.indexOf(placeholder), connectWith = this.options.connectWith, connectedList, isDefaultPrevented, eventData, connectedListEventData;\n this._resetCursor();\n eventData = {\n action: ACTION_SORT,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: placeholderIndex,\n draggableEvent: e\n };\n if (placeholderIndex >= 0) {\n isDefaultPrevented = this.trigger(END, eventData);\n } else {\n connectedList = placeholder.parents(connectWith).getKendoSortable();\n eventData.action = ACTION_REMOVE;\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(placeholder)\n });\n isDefaultPrevented = !(!this.trigger(END, eventData) && !connectedList.trigger(END, connectedListEventData));\n }\n if (isDefaultPrevented || placeholderIndex === draggedIndex) {\n this._cancel();\n return;\n }\n placeholder.replaceWith(draggedElement);\n draggedElement.show();\n this.draggable.dropped = true;\n eventData = {\n action: this.indexOf(draggedElement) != MISSING_INDEX ? ACTION_SORT : ACTION_REMOVE,\n item: draggedElement,\n oldIndex: draggedIndex,\n newIndex: this.indexOf(draggedElement),\n draggableEvent: e\n };\n this.trigger(CHANGE, eventData);\n if (connectedList) {\n connectedListEventData = $.extend({}, eventData, {\n action: ACTION_RECEIVE,\n oldIndex: MISSING_INDEX,\n newIndex: connectedList.indexOf(draggedElement)\n });\n connectedList.trigger(CHANGE, connectedListEventData);\n }\n },\n _findTarget: function (e) {\n var element = this._findElementUnderCursor(e), items, connectWith = this.options.connectWith, node;\n if ($.contains(this.element[0], element)) {\n items = this.items();\n node = items.filter(element)[0] || items.has(element)[0];\n return node ? {\n element: $(node),\n sortable: this\n } : null;\n } else if (this.element[0] == element && this._isEmpty()) {\n return {\n element: this.element,\n sortable: this,\n appendToBottom: true\n };\n } else if (this.element[0] == element && this._isLastHidden()) {\n node = this.items().eq(0);\n return {\n element: node,\n sortable: this,\n appendAfterHidden: true\n };\n } else if (connectWith) {\n return this._searchConnectedTargets(element, e);\n }\n },\n _findElementUnderCursor: function (e) {\n var elementUnderCursor = kendo.elementUnderCursor(e), draggable = e.sender;\n if (containsOrEqualTo(draggable.hint[0], elementUnderCursor)) {\n draggable.hint.hide();\n elementUnderCursor = kendo.elementUnderCursor(e);\n if (!elementUnderCursor) {\n elementUnderCursor = kendo.elementUnderCursor(e);\n }\n draggable.hint.show();\n }\n return elementUnderCursor;\n },\n _searchConnectedTargets: function (element, e) {\n var connected = $(this.options.connectWith), sortableInstance, items, node;\n for (var i = 0; i < connected.length; i++) {\n sortableInstance = connected.eq(i).getKendoSortable();\n if ($.contains(connected[i], element)) {\n if (sortableInstance) {\n items = sortableInstance.items();\n node = items.filter(element)[0] || items.has(element)[0];\n if (node) {\n sortableInstance.placeholder = this.placeholder;\n return {\n element: $(node),\n sortable: sortableInstance\n };\n } else {\n return null;\n }\n }\n } else if (connected[i] == element) {\n if (sortableInstance && sortableInstance._isEmpty()) {\n return {\n element: connected.eq(i),\n sortable: sortableInstance,\n appendToBottom: true\n };\n } else if (this._isCursorAfterLast(sortableInstance, e)) {\n node = sortableInstance.items().last();\n return {\n element: node,\n sortable: sortableInstance\n };\n }\n }\n }\n },\n _isCursorAfterLast: function (sortable, e) {\n var lastItem = sortable.items().last(), cursorOffset = {\n left: e.x.location,\n top: e.y.location\n }, lastItemOffset, delta;\n lastItemOffset = kendo.getOffset(lastItem);\n lastItemOffset.top += outerHeight(lastItem);\n lastItemOffset.left += outerWidth(lastItem);\n if (this._isFloating(lastItem)) {\n delta = lastItemOffset.left - cursorOffset.left;\n } else {\n delta = lastItemOffset.top - cursorOffset.top;\n }\n return delta < 0 ? true : false;\n },\n _movementByAxis: function (axis, cursorOffset, delta, eventData) {\n var cursorPosition = axis === 'x' ? cursorOffset.left : cursorOffset.top, target = delta < 0 ? this.placeholder.prev() : this.placeholder.next(), items = this.items(), targetCenter;\n if (target.length && !target.is(':visible')) {\n target = delta < 0 ? target.prev() : target.next();\n }\n if (!items.filter(target).length) {\n return;\n }\n $.extend(eventData, { target: target });\n targetCenter = this._getElementCenter(target);\n if (targetCenter) {\n targetCenter = axis === 'x' ? targetCenter.left : targetCenter.top;\n }\n if (target.length && delta < 0 && cursorPosition - targetCenter < 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'prev', eventData);\n } else if (target.length && delta > 0 && cursorPosition - targetCenter > 0) {\n this._movePlaceholder({\n element: target,\n sortable: this\n }, 'next', eventData);\n }\n },\n _movePlaceholder: function (target, direction, eventData) {\n var placeholder = this.placeholder;\n if (!target.sortable.trigger(BEFORE_MOVE, eventData)) {\n if (!direction) {\n target.element.append(placeholder);\n } else if (direction === 'prev') {\n target.element.before(placeholder);\n } else if (direction === 'next') {\n target.element.after(placeholder);\n }\n target.sortable.trigger(MOVE, eventData);\n }\n },\n _setCursor: function () {\n var cursor = this.options.cursor, body;\n if (cursor && cursor !== 'auto') {\n body = $(document.body);\n this._originalCursorType = body.css('cursor');\n body.css({ 'cursor': cursor });\n if (!this._cursorStylesheet) {\n this._cursorStylesheet = $('');\n }\n this._cursorStylesheet.appendTo(body);\n }\n },\n _resetCursor: function () {\n if (this._originalCursorType) {\n $(document.body).css('cursor', this._originalCursorType);\n this._originalCursorType = null;\n this._cursorStylesheet.remove();\n }\n },\n _getElementCenter: function (element) {\n var center = element.length ? kendo.getOffset(element) : null;\n if (center) {\n center.top += outerHeight(element) / 2;\n center.left += outerWidth(element) / 2;\n }\n return center;\n },\n _isFloating: function (item) {\n return /left|right/.test(item.css('float')) || /inline|table-cell/.test(item.css('display'));\n },\n _cancel: function () {\n this.draggedElement.show();\n this.placeholder.remove();\n },\n _items: function () {\n var filter = this.options.filter, items;\n if (filter) {\n items = this.element.find(filter);\n } else {\n items = this.element.children();\n }\n return items;\n },\n indexOf: function (element) {\n var items = this._items(), placeholder = this.placeholder, draggedElement = this.draggedElement;\n if (placeholder && element[0] == placeholder[0]) {\n return items.not(draggedElement).index(element);\n } else {\n return items.not(placeholder).index(element);\n }\n },\n items: function () {\n var placeholder = this.placeholder, items = this._items();\n if (placeholder) {\n items = items.not(placeholder);\n }\n return items;\n },\n _isEmpty: function () {\n return !this.items().length;\n },\n _isLastHidden: function () {\n return this.items().length === 1 && this.items().is(':hidden');\n }\n });\n kendo.ui.plugin(Sortable);\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.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECT = 'unselect', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up,label.k-checkbox-label.k-no-text', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
    ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
    ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\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.button', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'button',\n name: 'Button',\n category: 'web',\n description: 'The Button widget displays styled buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, keys = kendo.keys, CLICK = 'click', MOUSEDOWN = kendo.support.mousedown, MOUSEUP = kendo.support.mouseup, KBUTTON = 'k-button', KBUTTONICON = 'k-button-icon', KBUTTONICONTEXT = 'k-button-icontext', NS = '.kendoButton', DISABLED = 'disabled', DISABLEDSTATE = 'k-state-disabled', FOCUSEDSTATE = 'k-state-focused', SELECTEDSTATE = 'k-state-active';\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n element.addClass(KBUTTON).attr('role', 'button');\n options.enable = options.enable && !element.attr(DISABLED);\n that.enable(options.enable);\n if (options.enable) {\n that._tabindex();\n }\n that.iconElement();\n element.on(CLICK + NS, proxy(that._click, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that)).on('keydown' + NS, proxy(that._keydown, that)).on('keyup' + NS, proxy(that._removeActive, that)).on(MOUSEDOWN + NS, proxy(that._addActive, that)).on(MOUSEUP + NS, proxy(that._removeActive, that));\n kendo.notify(that);\n },\n destroy: function () {\n var that = this;\n that.wrapper.off(NS);\n Widget.fn.destroy.call(that);\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n iconClass: '',\n spriteCssClass: '',\n imageUrl: '',\n enable: true\n },\n _isNativeButton: function () {\n return this.element.prop('tagName').toLowerCase() == 'button';\n },\n _click: function (e) {\n if (this.options.enable) {\n if (this.trigger(CLICK, { event: e })) {\n e.preventDefault();\n }\n }\n },\n _focus: function () {\n if (this.options.enable) {\n this.element.addClass(FOCUSEDSTATE);\n }\n },\n _blur: function () {\n var that = this;\n that.element.removeClass(FOCUSEDSTATE);\n setTimeout(function () {\n that.element.removeClass(SELECTEDSTATE);\n });\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n that._addActive();\n if (!that._isNativeButton()) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n }\n that._click(e);\n }\n }\n },\n _removeActive: function () {\n this.element.removeClass(SELECTEDSTATE);\n },\n _addActive: function () {\n if (this.options.enable) {\n this.element.addClass(SELECTEDSTATE);\n }\n },\n iconElement: function () {\n var that = this, element = that.element, options = that.options, icon = options.icon, iconClass = options.iconClass, spriteCssClass = options.spriteCssClass, imageUrl = options.imageUrl, span, img, isEmpty;\n if (spriteCssClass || imageUrl || icon || iconClass) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass('k-icon') && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(KBUTTONICON);\n } else {\n element.addClass(KBUTTONICONTEXT);\n }\n }\n if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n } else if (icon || iconClass) {\n span = element.children('span.k-icon').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.attr('class', icon ? 'k-icon k-i-' + icon : iconClass);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n }\n },\n enable: function (enable) {\n var that = this, element = that.element;\n if (enable === undefined) {\n enable = true;\n }\n enable = !!enable;\n that.options.enable = enable;\n element.toggleClass(DISABLEDSTATE, !enable).attr('aria-disabled', !enable).attr(DISABLED, !enable);\n if (enable) {\n that._tabindex();\n }\n try {\n element.blur();\n } catch (err) {\n }\n }\n });\n kendo.ui.plugin(Button);\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.pager', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'pager',\n name: 'Pager',\n category: 'framework',\n depends: ['data'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, proxy = $.proxy, FIRST = '.k-i-arrow-end-left', LAST = '.k-i-arrow-end-right', PREV = '.k-i-arrow-60-left', NEXT = '.k-i-arrow-60-right', SIZE = 'k-pager-lg k-pager-md k-pager-sm', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), MAX_VALUE = Number.MAX_VALUE, iconTemplate = kendo.template('');\n function button(template, idx, text, numeric, title) {\n return template({\n idx: idx,\n text: text,\n ns: kendo.ns,\n numeric: numeric,\n title: title || ''\n });\n }\n function icon(className, text, wrapClassName) {\n return iconTemplate({\n className: className.substring(1),\n text: text,\n wrapClassName: wrapClassName || ''\n });\n }\n function update(element, selector, page, disabled) {\n element.find(selector).parent().attr(kendo.attr('page'), page).attr('tabindex', -1).toggleClass('k-state-disabled', disabled);\n }\n function first(element, page) {\n update(element, FIRST, 1, page <= 1);\n }\n function prev(element, page) {\n update(element, PREV, Math.max(1, page - 1), page <= 1);\n }\n function next(element, page, totalPages) {\n update(element, NEXT, Math.min(totalPages, page + 1), page >= totalPages);\n }\n function last(element, page, totalPages) {\n update(element, LAST, totalPages, page >= totalPages);\n }\n var Pager = Widget.extend({\n init: function (element, options) {\n var that = this, page, totalPages;\n var sizeClassName = null;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._createDataSource(options);\n that.linkTemplate = kendo.template(that.options.linkTemplate);\n that.selectTemplate = kendo.template(that.options.selectTemplate);\n that.currentPageTemplate = kendo.template(that.options.currentPageTemplate);\n page = that.page();\n totalPages = that.totalPages();\n that._refreshHandler = proxy(that.refresh, that);\n that.dataSource.bind(CHANGE, that._refreshHandler);\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (options.previousNext) {\n if (!that.element.find(FIRST).length) {\n that.element.append(icon(FIRST, options.messages.first, 'k-pager-first'));\n first(that.element, page, totalPages);\n }\n if (!that.element.find(PREV).length) {\n that.element.append(icon(PREV, options.messages.previous));\n prev(that.element, page, totalPages);\n }\n }\n if (options.numeric) {\n that.list = that.element.find('.k-pager-numbers');\n if (!that.list.length) {\n that.list = $('
      ').appendTo(that.element);\n }\n }\n if (options.input) {\n if (!that.element.find('.k-pager-input').length) {\n that.element.append('' + options.messages.page + '' + kendo.format(options.messages.of, totalPages) + '');\n }\n that.element.on(KEYDOWN + NS, '.k-pager-input input', proxy(that._keydown, that));\n }\n if (options.previousNext) {\n if (!that.element.find(NEXT).length) {\n that.element.append(icon(NEXT, options.messages.next));\n next(that.element, page, totalPages);\n }\n if (!that.element.find(LAST).length) {\n that.element.append(icon(LAST, options.messages.last, 'k-pager-last'));\n last(that.element, page, totalPages);\n }\n }\n if (options.pageSizes) {\n if (!that.element.find('.k-pager-sizes').length) {\n var pageSizes = options.pageSizes.length ? options.pageSizes : [\n 'all',\n 5,\n 10,\n 20\n ];\n var pageItems = $.map(pageSizes, function (size) {\n if (size.toLowerCase && size.toLowerCase() === 'all') {\n return '';\n }\n return '';\n });\n $('' + kendo.format(options.messages.of, totalPages)).find('input').val(page).attr(DISABLED, total < 1).toggleClass('k-state-disabled', total < 1);\n }\n if (options.previousNext) {\n first(that.element, page, totalPages);\n prev(that.element, page, totalPages);\n next(that.element, page, totalPages);\n last(that.element, page, totalPages);\n }\n if (options.pageSizes) {\n var hasAll = that.element.find('.k-pager-sizes option[value=\\'all\\']').length > 0;\n var selectAll = hasAll && (pageSize === this.dataSource.total() || pageSize == MAX_VALUE);\n var text = pageSize;\n if (selectAll) {\n pageSize = 'all';\n text = options.messages.allPages;\n }\n that.element.find('.k-pager-sizes select').val(pageSize).attr('aria-label', pageSize).filter('[' + kendo.attr('role') + '=dropdownlist]').kendoDropDownList('value', pageSize).kendoDropDownList('text', text);\n }\n },\n _collapsedTotal: function () {\n return this.dataSource.total();\n },\n _keydown: function (e) {\n if (e.keyCode === kendo.keys.ENTER) {\n var input = this.element.find('.k-pager-input').find('input'), page = parseInt(input.val(), 10);\n if (isNaN(page) || page < 1 || page > this.totalPages()) {\n page = this.page();\n }\n input.val(page);\n this.page(page);\n }\n },\n _refreshClick: function (e) {\n e.preventDefault();\n this.dataSource.read();\n },\n _change: function (e) {\n var value = e.currentTarget.value;\n var pageSize = parseInt(value, 10);\n var dataSource = this.dataSource;\n if (!isNaN(pageSize)) {\n dataSource.pageSize(pageSize);\n } else if ((value + '').toLowerCase() == 'all') {\n dataSource._pageSize = undefined;\n dataSource._take = undefined;\n dataSource.fetch();\n }\n },\n _toggleActive: function () {\n var that = this;\n if (that.list.hasClass('k-state-expanded')) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n } else {\n DOCUMENT_ELEMENT.bind(that.downEvent, $.proxy(that._hideList, that));\n }\n that.list.toggleClass('k-state-expanded');\n },\n _hideList: function (e) {\n var that = this, target = kendo.eventTarget(e);\n if (!$.contains(that.list[0], target)) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, $.proxy(that._hideList, that));\n that.list.removeClass('k-state-expanded');\n }\n },\n _click: function (e) {\n var target = $(e.currentTarget);\n e.preventDefault();\n if (!target.is('.k-state-disabled')) {\n this.page(target.attr(kendo.attr('page')));\n }\n },\n totalPages: function () {\n return Math.ceil((this.dataSource.total() || 0) / (this.pageSize() || 1));\n },\n pageSize: function () {\n return this.dataSource.pageSize() || this.dataSource.total();\n },\n page: function (page) {\n if (page !== undefined) {\n if (this.trigger('pageChange', { index: page })) {\n return;\n }\n this.dataSource.page(page);\n this.trigger(CHANGE, { index: page });\n } else {\n if (this.dataSource.total() > 0) {\n return this.dataSource.page();\n } else {\n return 0;\n }\n }\n },\n _getWidthSizeClass: function (width) {\n var sizes = SIZE.split(' ');\n if (width <= 480) {\n return sizes[2];\n } else if (width <= 640) {\n return sizes[1];\n } else if (width <= 1024) {\n return sizes[0];\n }\n return null;\n }\n });\n ui.plugin(Pager);\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.notification', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'notification',\n name: 'Notification',\n category: 'web',\n description: 'The Notification widget displays user alerts.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'notification-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, extend = $.extend, setTimeout = window.setTimeout, CLICK = 'click', SHOW = 'show', HIDE = 'hide', KNOTIFICATION = 'k-notification', KICLOSE = '.k-notification-wrap .k-i-close', KHIDING = 'k-hiding', INFO = 'info', SUCCESS = 'success', WARNING = 'warning', ERROR = 'error', TOP = 'top', LEFT = 'left', BOTTOM = 'bottom', RIGHT = 'right', UP = 'up', NS = '.kendoNotification', WRAPPER = '
      ', TEMPLATE = '
      ' + '' + '#=content#' + '' + '
      ', SAFE_TEMPLATE = TEMPLATE.replace('#=content#', '#:content#');\n var Notification = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n if (!options.appendTo || !$(options.appendTo).is(element)) {\n that.element.hide();\n }\n that._compileTemplates(options.templates);\n that._guid = '_' + kendo.guid();\n that._isRtl = kendo.support.isRtl(element);\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n kendo.notify(that);\n },\n events: [\n SHOW,\n HIDE\n ],\n options: {\n name: 'Notification',\n position: {\n pinned: true,\n top: null,\n left: null,\n bottom: 20,\n right: 20\n },\n stacking: 'default',\n hideOnClick: true,\n button: false,\n allowHideAfter: 0,\n autoHideAfter: 5000,\n appendTo: null,\n width: null,\n height: null,\n templates: [],\n animation: {\n open: {\n effects: 'fade:in',\n duration: 300\n },\n close: {\n effects: 'fade:out',\n duration: 600,\n hide: true\n }\n }\n },\n _compileTemplates: function (templates) {\n var that = this;\n var kendoTemplate = kendo.template;\n that._compiled = {};\n $.each(templates, function (key, value) {\n that._compiled[value.type] = kendoTemplate(value.template || $('#' + value.templateId).html());\n });\n that._defaultCompiled = kendoTemplate(TEMPLATE);\n that._safeCompiled = kendoTemplate(SAFE_TEMPLATE);\n },\n _getCompiled: function (type, safe) {\n var defaultCompiled = safe ? this._safeCompiled : this._defaultCompiled;\n return type ? this._compiled[type] || defaultCompiled : defaultCompiled;\n },\n _compileStacking: function (stacking, top, left) {\n var that = this, paddings = {\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0\n }, horizontalAlignment = left !== null ? LEFT : RIGHT, origin, position;\n switch (stacking) {\n case 'down':\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n break;\n case RIGHT:\n origin = TOP + ' ' + RIGHT;\n position = TOP + ' ' + LEFT;\n delete paddings.paddingRight;\n break;\n case LEFT:\n origin = TOP + ' ' + LEFT;\n position = TOP + ' ' + RIGHT;\n delete paddings.paddingLeft;\n break;\n case UP:\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n break;\n default:\n if (top !== null) {\n origin = BOTTOM + ' ' + horizontalAlignment;\n position = TOP + ' ' + horizontalAlignment;\n delete paddings.paddingBottom;\n } else {\n origin = TOP + ' ' + horizontalAlignment;\n position = BOTTOM + ' ' + horizontalAlignment;\n delete paddings.paddingTop;\n }\n break;\n }\n that._popupOrigin = origin;\n that._popupPosition = position;\n that._popupPaddings = paddings;\n },\n _attachPopupEvents: function (options, popup) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0, closeIcon;\n function attachClick(target) {\n target.on(CLICK + NS, function () {\n that._hidePopup(popup);\n });\n }\n if (options.hideOnClick) {\n popup.bind('activate', function () {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(popup.element);\n }, allowHideAfter);\n } else {\n attachClick(popup.element);\n }\n });\n } else if (options.button) {\n closeIcon = popup.element.find(KICLOSE);\n if (attachDelay) {\n setTimeout(function () {\n attachClick(closeIcon);\n }, allowHideAfter);\n } else {\n attachClick(closeIcon);\n }\n }\n },\n _showPopup: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, x = options.position.left, y = options.position.top, popup, openPopup;\n openPopup = $('.' + that._guid + ':not(.' + KHIDING + ')').last();\n popup = new kendo.ui.Popup(wrapper, {\n anchor: openPopup[0] ? openPopup : document.body,\n origin: that._popupOrigin,\n position: that._popupPosition,\n animation: options.animation,\n modal: true,\n collision: '',\n isRtl: that._isRtl,\n close: function () {\n that._triggerHide(this.element);\n },\n deactivate: function (e) {\n e.sender.element.off(NS);\n e.sender.element.find(KICLOSE).off(NS);\n e.sender.destroy();\n }\n });\n that._attachPopupEvents(options, popup);\n wrapper.removeClass('k-group k-reset');\n if (openPopup[0]) {\n popup.open();\n } else {\n if (x === null) {\n x = $(window).width() - wrapper.width() - options.position.right;\n }\n if (y === null) {\n y = $(window).height() - wrapper.height() - options.position.bottom;\n }\n popup.open(x, y);\n }\n popup.wrapper.addClass(that._guid).css(extend({\n margin: 0,\n zIndex: 10050\n }, that._popupPaddings));\n if (options.position.pinned) {\n popup.wrapper.css('position', 'fixed');\n if (openPopup[0]) {\n that._togglePin(popup.wrapper, true);\n }\n } else if (!openPopup[0]) {\n that._togglePin(popup.wrapper, false);\n }\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hidePopup(popup);\n }, autoHideAfter);\n }\n },\n _hidePopup: function (popup) {\n popup.wrapper.addClass(KHIDING);\n popup.close();\n },\n _togglePin: function (wrapper, pin) {\n var win = $(window), sign = pin ? -1 : 1;\n wrapper.css({\n top: parseInt(wrapper.css(TOP), 10) + sign * win.scrollTop(),\n left: parseInt(wrapper.css(LEFT), 10) + sign * win.scrollLeft()\n });\n },\n _attachStaticEvents: function (options, wrapper) {\n var that = this, allowHideAfter = options.allowHideAfter, attachDelay = !isNaN(allowHideAfter) && allowHideAfter > 0;\n function attachClick(target) {\n target.on(CLICK + NS, proxy(that._hideStatic, that, wrapper));\n }\n if (options.hideOnClick) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper);\n }, allowHideAfter);\n } else {\n attachClick(wrapper);\n }\n } else if (options.button) {\n if (attachDelay) {\n setTimeout(function () {\n attachClick(wrapper.find(KICLOSE));\n }, allowHideAfter);\n } else {\n attachClick(wrapper.find(KICLOSE));\n }\n }\n },\n _showStatic: function (wrapper, options) {\n var that = this, autoHideAfter = options.autoHideAfter, animation = options.animation, insertionMethod = options.stacking == UP || options.stacking == LEFT ? 'prependTo' : 'appendTo', initializedNotifications;\n wrapper.removeClass('k-popup').addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n initializedNotifications = that.getNotifications();\n initializedNotifications.each(function (idx, element) {\n that._attachStaticEvents(options, $(element));\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic($(element));\n }, autoHideAfter);\n }\n });\n },\n _hideStatic: function (wrapper) {\n wrapper.kendoAnimate(extend(this.options.animation.close || false, {\n complete: function () {\n wrapper.off(NS).find(KICLOSE).off(NS);\n wrapper.remove();\n }\n }));\n this._triggerHide(wrapper);\n },\n _triggerHide: function (element) {\n this.trigger(HIDE, { element: element });\n this.angular('cleanup', function () {\n return { elements: element };\n });\n },\n show: function (content, type, safe) {\n var that = this, options = that.options, wrapper = $(WRAPPER), args, defaultArgs;\n if (!type) {\n type = INFO;\n }\n if (content !== null && content !== undefined && content !== '') {\n if (kendo.isFunction(content)) {\n content = content();\n }\n defaultArgs = {\n typeIcon: type,\n content: ''\n };\n if ($.isPlainObject(content)) {\n args = extend(defaultArgs, content);\n } else {\n args = extend(defaultArgs, { content: content });\n }\n wrapper.addClass(KNOTIFICATION + '-' + type).toggleClass(KNOTIFICATION + '-button', options.button).attr('data-role', 'alert').css({\n width: options.width,\n height: options.height\n }).append(that._getCompiled(type, safe)(args));\n that.angular('compile', function () {\n return {\n elements: wrapper,\n data: [{ dataItem: args }]\n };\n });\n if ($(options.appendTo)[0]) {\n that._showStatic(wrapper, options);\n } else {\n that._showPopup(wrapper, options);\n }\n that.trigger(SHOW, { element: wrapper });\n }\n return that;\n },\n showText: function (content, type) {\n this.show(content, type, true);\n },\n info: function (content) {\n return this.show(content, INFO);\n },\n success: function (content) {\n return this.show(content, SUCCESS);\n },\n warning: function (content) {\n return this.show(content, WARNING);\n },\n error: function (content) {\n return this.show(content, ERROR);\n },\n hide: function () {\n var that = this, openedNotifications = that.getNotifications();\n if (that.options.appendTo) {\n openedNotifications.each(function (idx, element) {\n that._hideStatic($(element));\n });\n } else {\n openedNotifications.each(function (idx, element) {\n var popup = $(element).data('kendoPopup');\n if (popup) {\n that._hidePopup(popup);\n }\n });\n }\n return that;\n },\n getNotifications: function () {\n var that = this, guidElements = $('.' + that._guid + ':not(.' + KHIDING + ')');\n if (that.options.appendTo) {\n return guidElements;\n } else {\n return guidElements.children('.' + KNOTIFICATION);\n }\n },\n setOptions: function (newOptions) {\n var that = this, options;\n Widget.fn.setOptions.call(that, newOptions);\n options = that.options;\n if (newOptions.templates !== undefined) {\n that._compileTemplates(options.templates);\n }\n if (newOptions.stacking !== undefined || newOptions.position !== undefined) {\n that._compileStacking(options.stacking, options.position.top, options.position.left);\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.getNotifications().off(NS).find(KICLOSE).off(NS);\n }\n });\n kendo.ui.plugin(Notification);\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.tooltip', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
      #if (!autoHide) {#
      #}#' + '
      ' + '#if (callout){ #
      #}#' + '
      ', IFRAMETEMPLATE = kendo.template(''), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\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 center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n return true;\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n this._closePopup(e.currentTarget);\n clearTimeout(this.timeout);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n this.popup.element.css('margin-top', '').css('margin-right', '').css('margin-bottom', '').css('margin-left', '');\n if (position == 'top' || position == 'left') {\n this.popup.element.css('margin-' + position, -this.arrow.outerWidth() / 2 + 'px');\n } else {\n this.popup.element.css('margin-' + REVERSE[position], this.arrow.outerWidth() / 2 + 'px');\n }\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n }\n });\n kendo.ui.plugin(Tooltip);\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.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
      ',\n overflowContainer: '
        '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
      • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
          ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
        • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        • '), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({}, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
           
          ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
        •  
        • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('
          ').html(element);\n } else {\n element = element.wrap('
          ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('
        • ').html(element);\n } else {\n element = element.wrap('
        • ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('
          ').parent().wrap('
          ').parent();\n }\n function preventClick(e) {\n if ($(e.target).closest('a.k-button').length) {\n e.preventDefault();\n }\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (!candidate.length && element.is('.' + OVERFLOW_ANCHOR)) {\n return element;\n }\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = 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.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).on('focusin', function (ev) {\n var target = $(ev.target);\n var element = $(this).find(':kendoFocusable:first');\n if (!target.is('.' + TOOLBAR) || element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n if (element.length) {\n element[0].focus();\n }\n }).on('keydown', proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible'), direction = this._isRtl ? -1 : 1;\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false, isOnlyOverflowAnchor = false;\n if (!items.not('.' + OVERFLOW_ANCHOR).length) {\n isOnlyOverflowAnchor = true;\n }\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR) && !isOnlyOverflowAnchor) {\n var lastItemNotOverflowAnchor = items.last();\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (lastItemNotOverflowAnchor.is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden' && !isOnlyOverflowAnchor) {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n this._preventNextFocus = false;\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n if (keyCode === keys.SPACEBAR) {\n e.preventDefault();\n }\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n this.userEvents.trigger('tap', { target: target });\n } else if (keyCode === keys.SPACEBAR) {\n this.userEvents.trigger('tap', { target: target });\n }\n return;\n }\n if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton');\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n splitButton.toggle();\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(\\'.' + STATE_HIDDEN + '\\')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.hide();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\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.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': 'DropDownList',\n 'DropDownList': 'ComboBox'\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
            ').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('
            ').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (!id) {\n id = kendo.guid();\n }\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n if (options.columns && options.columns.length) {\n that.ul.removeClass('k-list').addClass('k-grid-list');\n that._columnsHeader();\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: 'No data found.'\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '
            ';\n var colGroup = '';\n var row = '';\n for (var idx = 0; idx < this.options.columns.length; idx++) {\n var currentColumn = this.options.columns[idx];\n var title = currentColumn.title || currentColumn.field || '';\n var template = currentColumn.headerTemplate || title;\n var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n var currentWidth = currentColumn.width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n colGroup += '';\n row += '';\n }\n colGroup += '';\n row += '';\n header += colGroup;\n header += row;\n header += '
            ';\n row += columnsHeaderTemplate(currentColumn);\n row += '
            ';\n list.columnsHeader = columnsHeader = $(header);\n list.list.prepend(columnsHeader);\n this._angularElement(list.columnsHeader, 'compile');\n },\n _noData: function () {\n var list = this;\n var noData = $(list.noData);\n var template = list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('
            ').appendTo(list.list);\n list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _footer: function () {\n var list = this;\n var footer = $(list.footer);\n var template = list.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n list.footer = null;\n return;\n }\n list.footer = $('
            ').appendTo(list.list);\n list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var changeEventOption = { change: proxy(that._listChange, that) };\n var listBoundHandler = proxy(that._listBound, that);\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n activate: proxy(that._activateItem, that),\n columns: currentOptions.columns,\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template\n }, options, virtual, changeEventOption);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var list = this;\n if (list._clear) {\n list._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n if (this._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isSelect) {\n this._customOption = undefined;\n }\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\n });\n if (this.options.highlightFirst) {\n this.listView.focus(0);\n }\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n this._clearFilterExpressions(expression);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return;\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isMultiColumnFiltering) {\n newExpression.filters.push(filter);\n } else {\n this._pushFilterExpression(newExpression, filter);\n }\n if (isValidFilterExpr(expression)) {\n if (newExpression.logic === expression.logic) {\n newExpression.filters = newExpression.filters.concat(expression.filters);\n } else {\n newExpression.filters.push(expression);\n }\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n return dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _pushFilterExpression: function (newExpression, filter) {\n if (isValidFilterExpr(filter) && filter.value !== '') {\n newExpression.filters.push(filter);\n }\n },\n _clearFilterExpressions: function (expression) {\n if (!expression.filters) {\n return;\n }\n var filtersToRemove;\n for (var i = 0; i < expression.filters.length; i++) {\n if ('fromFilter' in expression.filters[i]) {\n filtersToRemove = i;\n }\n }\n if (!isNaN(filtersToRemove)) {\n expression.filters.splice(filtersToRemove, 1);\n }\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _renderNoData: function () {\n var list = this;\n var noData = list.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(list.noDataTemplate({ instance: list }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _toggleHeader: function (show) {\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n groupHeader.toggle(show);\n },\n _renderFooter: function () {\n var list = this;\n var footer = list.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(list.footerTemplate({ instance: list }));\n this._angularElement(footer, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var word = options.word;\n var filterFields = widgetOptions.filterFields;\n var field = widgetOptions.dataTextField;\n var expression;\n if (filterFields && filterFields.length) {\n expression = {\n logic: 'or',\n filters: [],\n fromFilter: true\n };\n for (var i = 0; i < filterFields.length; i++) {\n this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n }\n } else {\n expression = that._buildExpression(word, field);\n }\n that._open = options.open;\n that._filterSource(expression);\n },\n _buildExpression: function (value, field) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n return {\n value: ignoreCase ? value.toLowerCase() : value,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n },\n _clearButton: function () {\n var list = this;\n var clearTitle = list.options.messages && list.options.messages.clear ? list.options.messages.clear : 'clear';\n if (!list._clear) {\n list._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n }\n if (!list.options.clearButton) {\n list._clear.remove();\n }\n this._hideClear();\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (this.listView) {\n this.listView._emptySearch = !$.trim(word).length;\n }\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n that._ariaLabel();\n },\n _ariaLabel: function () {\n var that = this;\n var focusedElm = that._focused;\n var inputElm = that.element;\n var inputId = inputElm.attr('id');\n var labelElm = $('label[for=\"' + inputId + '\"]');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n if (focusedElm === inputElm) {\n return;\n }\n if (ariaLabel) {\n focusedElm.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n focusedElm.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n focusedElm.attr('aria-labelledby', labelId);\n }\n },\n _generateLabelId: function (label, inputId) {\n var labelId = inputId + LABELIDPART;\n label.attr('id', labelId);\n return labelId;\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (value !== unifyType(that._old, typeof value) && value !== unifyType(that._oldText, typeof value)) {\n trigger = true;\n } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n trigger = true;\n }\n if (trigger) {\n if (that._old === null || that._old === '' || value === '') {\n that._valueBeforeCascade = that._old = value;\n } else {\n if (that.dataItem()) {\n that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n } else {\n that._valueBeforeCascade = that._old = null;\n }\n }\n that._oldIndex = index;\n that._oldText = that.text && that.text();\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n offsetHeight += outerHeight(element, true);\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _adjustListWidth: function () {\n var that = this, list = that.list, width = list[0].style.width, wrapper = that.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: that.options.autoWidth ? 'auto' : width,\n minWidth: width,\n whiteSpace: that.options.autoWidth ? 'nowrap' : 'normal'\n }).data(WIDTH, width);\n return true;\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n var padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(li.css('border-right-width'), 10) + parseFloat(li.children('.k-group').css('padding-right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n this._calculateColumnsHeaderPadding(height);\n },\n _calculateColumnsHeaderPadding: function (height) {\n if (this.options.columns && this.options.columns.length) {\n var list = this;\n var isRtl = support.isRtl(list.wrapper);\n var scrollbar = kendo.support.scrollbar();\n list.columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', height !== 'auto' ? scrollbar : 0);\n }\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var list = this;\n list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n anchor: list.wrapper,\n open: proxy(list._openHandler, list),\n close: proxy(list._closeHandler, list),\n animation: list.options.animation,\n isRtl: support.isRtl(list.wrapper),\n autosize: list.options.autoWidth\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('
            ').parent();\n this.header = this.content.before('
            ').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n _touchHandlers: function () {\n var that = this;\n var startY;\n var endY;\n var tapPosition = function (event) {\n return (event.originalEvent || event).changedTouches[0].pageY;\n };\n that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n startY = tapPosition(e);\n });\n that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n endY = tapPosition(e);\n if (Math.abs(endY - startY) < 10) {\n that._touchTriggered = true;\n that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n }\n });\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: j + removedIndices,\n dataItem: dataItems.splice(j, 1)[0]\n });\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('
          • ${' + kendo.expr(options.dataTextField, 'data') + '}
          • ', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '
          • ' + template(data) + '
          • ';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem && visibleItem.group) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
          • ';\n if (hasColumns) {\n item += this._renderColumns(dataItem);\n } else {\n item += this.templates.template(dataItem);\n }\n if (notFirstItem && context.newGroup) {\n if (hasColumns) {\n item += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\n } else {\n item += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\n }\n } else if (isGrouped && hasColumns) {\n item += '
            ';\n }\n return item + '
          • ';\n },\n _renderColumns: function (dataItem) {\n var item = '';\n for (var i = 0; i < this.options.columns.length; i++) {\n var currentWidth = this.options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += this.templates['column' + i](dataItem);\n item += '';\n }\n return item;\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n isLastGroupedItem: j === group.items.length - 1,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\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.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template('', { useWithBlock: false }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find('a'));\n that._class(FOCUSED, toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || toDateObject(that.selectable.value().first().find('a')), toDate = toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
            ');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.insertBefore(from);\n from.css({\n position: 'absolute',\n width: to.width()\n });\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr(ARIA_LABEL).removeAttr(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('
            ').insertAfter(element.find('.k-header'));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
            ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
            ' + '' + '' + '' + '
            ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):not(.k-out-of-range)').has('.k-link').first();\n currentValue = toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, showHeader = options.showHeader, otherMonth = options.otherMonth, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), html = '';\n if (showHeader) {\n html += '';\n } else {\n html += '';\n }\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.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 compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max, html = '';\n if (options.showHeader) {\n html += '
            ' + this.title(date, min, max, culture) + '
            ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
            ';\n }\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString, html = '';\n if (options.showHeader) {\n html += '
            ';\n html += this.title(options.date);\n html += '
            ';\n }\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '
            ';\n html += this.title(options.date, options.min, options.max);\n html += '
            ';\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, otherMonth = options.otherMonth, lastDayOfMonth = options.lastDayOfMonth, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate, html = options.html || '
            ';\n html += this.title(options.date, options.min, options.max);\n html += '
            ';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += otherMonth || +start <= +lastDayOfMonth ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: ' ' });\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth ? otherMonthTemplate(data) : isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
            ';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n kendo.calendar = calendar;\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.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className);\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n that._inputWrapper = $(that.wrapper[0]);\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n element.removeAttr(DISABLED).removeAttr(READONLY);\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n element.removeAttr(READONLY);\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\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 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;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\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.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, support = kendo.support, template = kendo.template, activeElement = kendo._activeElement, DIV = '
            ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n var popupHovered;\n that._calendar();\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.calendar.trigger('change');\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID,\n 'autocomplete': 'off'\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that._createDateInput(options);\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: false\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n that._createDateInput(options);\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n if (value) {\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(UP, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n open: function () {\n this.dateView.open();\n },\n close: function () {\n this.dateView.close();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option(MAX, value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function (e) {\n var that = this;\n that.dateView.toggle();\n that._focusElement(e.type);\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.focus();\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max\n });\n }\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr('aria-activedescendant');\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\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.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
            '), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index);\n if (this.options.columns && this.options.columns.length && data.item) {\n element.html(renderColumns(this.options, data.item, templates));\n } else {\n element.html(itemTemplate(data.item || {}));\n }\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-last', data.isLastGroupedItem);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('
            ').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function renderColumns(options, dataItem, templates) {\n var item = '';\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += templates['column' + i](dataItem);\n item += '';\n }\n return item;\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('
            ').parent();\n that.wrapper = that.content.wrap('
            ').parent();\n that.header = that.content.before('
            ').prev();\n if (options.columns && options.columns.length) {\n that.element.removeClass(LIST);\n }\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n _highlightSelectedItems: function () {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n that.bound(true);\n that.value(that._values, true).done(function () {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _checkValuesOrder: function (value) {\n if (this._removedAddedIndexes && this._removedAddedIndexes.length === value.length) {\n var newValue = this._removedAddedIndexes.slice();\n this._removedAddedIndexes = null;\n return newValue;\n }\n return value;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n if (!that.value()[0]) {\n that.select([-1]);\n } else {\n that._selectingValue = false;\n that._triggerListBound();\n }\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n this._selectedIndexes.push(this._getIndecies(item)[0]);\n item.addClass(SELECTED);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var that = this;\n var take = that.itemCount;\n var skip = that._getSkip(index, take);\n var view = this._getRange(skip, take);\n if (!that._getRange(skip, take).length) {\n return null;\n }\n if (that.options.type === 'group') {\n kendo.ui.progress($(that.wrapper), true);\n that.mute(function () {\n that.dataSource.range(skip, take, function () {\n kendo.ui.progress($(that.wrapper), false);\n });\n view = that.dataSource.view();\n });\n }\n return that._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex - 1);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, initialIndices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve().promise();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n initialIndices = indices;\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n if (initialIndices.length === indices.length || singleSelection) {\n that.focus(indices);\n }\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n that._calculateColumnsHeaderPadding();\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n var fixedGroupText = firstVisibleGroup || '';\n this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (this.options.mapValueTo === 'dataItem' && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = null;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n that._values = that._checkValuesOrder(that._values);\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculateColumnsHeaderPadding: function () {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find('.k-grid-header');\n var total = this.dataSource.total();\n columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', total ? scrollbar : 0);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\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.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'autocomplete',\n name: 'AutoComplete',\n category: 'web',\n description: 'The AutoComplete widget provides suggestions depending on the typed text.It also allows multiple value entries.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, caret = kendo.caret, activeElement = kendo._activeElement, placeholderSupported = support.placeholder, ui = kendo.ui, List = ui.List, keys = kendo.keys, DataSource = kendo.data.DataSource, ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CHANGE = 'change', DEFAULT = 'k-state-default', DISABLED = 'disabled', READONLY = 'readonly', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', ns = '.kendoAutoComplete', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy;\n function indexOfWordAtCaret(caretIdx, text, separator) {\n return separator ? text.substring(0, caretIdx).split(separator).length - 1 : 0;\n }\n function wordAtCaret(caretIdx, text, separator) {\n return text.split(separator)[indexOfWordAtCaret(caretIdx, text, separator)];\n }\n function replaceWordAtCaret(caretIdx, text, word, separator, defaultSeparator) {\n var words = text.split(separator);\n words.splice(indexOfWordAtCaret(caretIdx, text, separator), 1, word);\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n return words.join(defaultSeparator);\n }\n var AutoComplete = List.extend({\n init: function (element, options) {\n var that = this, wrapper, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n List.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.placeholder = options.placeholder || element.attr('placeholder');\n if (placeholderSupported) {\n element.attr('placeholder', options.placeholder);\n }\n that._wrapper();\n that._loader();\n that._clearButton();\n that._dataSource();\n that._ignoreCase();\n element[0].type = 'text';\n wrapper = that.wrapper;\n that._popup();\n element.addClass('k-input').on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._search, that)).on('focus' + ns, function () {\n that._prev = that._accessor();\n that._oldText = that._prev;\n that._placeholder(false);\n wrapper.addClass(FOCUSED);\n }).on('focusout' + ns, function () {\n that._change();\n that._placeholder();\n that.close();\n wrapper.removeClass(FOCUSED);\n }).attr({\n autocomplete: 'off',\n role: 'textbox',\n 'aria-haspopup': true\n });\n that._clear.on('click' + ns + ' touchend' + ns, proxy(that._clearValue, that));\n that._enable();\n that._old = that._accessor();\n if (element[0].id) {\n element.attr('aria-owns', that.ul[0].id);\n }\n that._aria();\n that._placeholder();\n that._initList();\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n that._resetFocusItemHandler = $.proxy(that._resetFocusItem, that);\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'AutoComplete',\n enabled: true,\n suggest: false,\n template: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n dataTextField: '',\n minLength: 1,\n enforceMinLength: false,\n delay: 200,\n height: 200,\n filter: 'startswith',\n ignoreCase: true,\n highlightFirst: false,\n separator: null,\n placeholder: '',\n animation: {},\n virtual: false,\n value: null,\n clearButton: true,\n autoWidth: false\n },\n _dataSource: function () {\n var that = this;\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = DataSource.create(that.options.dataSource).bind('progress', that._progressHandler).bind('error', that._errorHandler);\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n this.listView.setDataSource(this.dataSource);\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n _listOptions: function (options) {\n var listOptions = List.fn._listOptions.call(this, $.extend(options, { skipUpdateOnBind: true }));\n listOptions.dataValueField = listOptions.dataTextField;\n listOptions.selectedItemChange = null;\n return listOptions;\n },\n _editable: function (options) {\n var that = this, element = that.element, wrapper = that.wrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n }\n },\n close: function () {\n var that = this;\n var current = that.listView.focus();\n if (current) {\n current.removeClass(SELECTED);\n }\n that.popup.close();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n that._clear.off(ns);\n that.wrapper.off(ns);\n List.fn.destroy.call(that);\n },\n refresh: function () {\n this.listView.refresh();\n },\n select: function (li) {\n this._select(li);\n },\n search: function (word) {\n var that = this, options = that.options, ignoreCase = options.ignoreCase, separator = that._separator(), length;\n word = word || that._accessor();\n clearTimeout(that._typingTimeout);\n if (separator) {\n word = wordAtCaret(caret(that.element)[0], word, separator);\n }\n length = word.length;\n if (!options.enforceMinLength && !length || length >= options.minLength) {\n that._open = true;\n that._mute(function () {\n this.listView.value([]);\n });\n that._filterSource({\n value: ignoreCase ? word.toLowerCase() : word,\n operator: options.filter,\n field: options.dataTextField,\n ignoreCase: ignoreCase\n });\n that.one('close', $.proxy(that._unifySeparators, that));\n }\n that._toggleCloseVisibility();\n },\n suggest: function (word) {\n var that = this, key = that._last, value = that._accessor(), element = that.element[0], caretIdx = caret(element)[0], separator = that._separator(), words = value.split(separator), wordIndex = indexOfWordAtCaret(caretIdx, value, separator), selectionEnd = caretIdx, idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n idx = value.substring(0, caretIdx).lastIndexOf(separator);\n idx = idx > -1 ? caretIdx - (idx + separator.length) : caretIdx;\n value = words[wordIndex].substring(0, idx);\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n word = word.substring(idx + value.length);\n selectionEnd = caretIdx + word.length;\n value += word;\n }\n if (separator && words[words.length - 1] !== '') {\n words.push('');\n }\n }\n words[wordIndex] = value;\n that._accessor(words.join(separator || ''));\n if (element === activeElement()) {\n caret(element, caretIdx, selectionEnd);\n }\n },\n value: function (value) {\n if (value !== undefined) {\n this.listView.value(value);\n this._accessor(value);\n this._old = this._accessor();\n this._oldText = this._accessor();\n } else {\n return this._accessor();\n }\n this._toggleCloseVisibility();\n },\n _click: function (e) {\n var item = e.item;\n var that = this;\n var element = that.element;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n e.preventDefault();\n that._active = true;\n if (that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._oldText = element.val();\n that._select(item).done(function () {\n that._blur();\n caret(element, element.val().length);\n });\n },\n _clearText: $.noop,\n _resetFocusItem: function () {\n var index = this.options.highlightFirst ? 0 : -1;\n if (this.options.virtual) {\n this.listView.scrollTo(0);\n }\n this.listView.focus(index);\n },\n _listBound: function () {\n var that = this;\n var popup = that.popup;\n var options = that.options;\n var data = that.dataSource.flatView();\n var length = data.length;\n var groupsLength = that.dataSource._group.length;\n var isActive = that.element[0] === activeElement();\n var action;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n popup.position();\n if (length) {\n if (options.suggest && isActive) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n action = that._allowOpening() ? 'open' : 'close';\n if (that._typingTimeout && !isActive) {\n action = 'close';\n }\n if (length) {\n that._resetFocusItem();\n if (options.virtual) {\n that.popup.unbind('activate', that._resetFocusItemHandler).one('activate', that._resetFocusItemHandler);\n }\n }\n popup[action]();\n that._typingTimeout = undefined;\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _mute: function (callback) {\n this._muted = true;\n callback.call(this);\n this._muted = false;\n },\n _listChange: function () {\n var isActive = this._active || this.element[0] === activeElement();\n if (isActive && !this._muted) {\n this._selectValue(this.listView.selectedDataItems()[0]);\n }\n },\n _selectValue: function (dataItem) {\n var separator = this._separator();\n var text = '';\n if (dataItem) {\n text = this._text(dataItem);\n }\n if (text === null) {\n text = '';\n }\n if (separator) {\n text = replaceWordAtCaret(caret(this.element)[0], this._accessor(), text, separator, this._defaultSeparator());\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _unifySeparators: function () {\n this._accessor(this.value().split(this._separator()).join(this._defaultSeparator()));\n return this;\n },\n _preselect: function (value, text) {\n this._inputValue(text);\n this._accessor(value);\n this._old = this.oldText = this._accessor();\n this.listView.setValue(value);\n this._placeholder();\n },\n _change: function () {\n var that = this;\n var value = that._unifySeparators().value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n that._old = value;\n that._oldText = value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that.trigger(CHANGE);\n }\n that.typing = false;\n that._toggleCloseVisibility();\n },\n _accessor: function (value) {\n var that = this, element = that.element[0];\n if (value !== undefined) {\n element.value = value === null ? '' : value;\n that._placeholder();\n } else {\n value = element.value;\n if (element.className.indexOf('k-readonly') > -1) {\n if (value === that.options.placeholder) {\n return '';\n } else {\n return value;\n }\n }\n return value;\n }\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var listView = that.listView;\n var visible = that.popup.visible();\n var current = listView.focus();\n that._last = key;\n if (key === keys.DOWN) {\n if (visible) {\n this._move(current ? 'focusNext' : 'focusFirst');\n } else if (that.value()) {\n that._filterSource({\n value: that.ignoreCase ? that.value().toLowerCase() : that.value(),\n operator: that.options.filter,\n field: that.options.dataTextField,\n ignoreCase: that.ignoreCase\n }).done(function () {\n if (that._allowOpening()) {\n that._resetFocusItem();\n that.popup.open();\n }\n });\n }\n e.preventDefault();\n } else if (key === keys.UP) {\n if (visible) {\n this._move(current ? 'focusPrev' : 'focusLast');\n }\n e.preventDefault();\n } else if (key === keys.HOME) {\n this._move('focusFirst');\n } else if (key === keys.END) {\n this._move('focusLast');\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (key === keys.ENTER && visible) {\n e.preventDefault();\n }\n if (visible && current) {\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n if (that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n this._select(current);\n }\n this._blur();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that._clearValue();\n }\n that.close();\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n that.popup._hovered = true;\n that._search();\n }\n },\n _keypress: function () {\n this._oldText = this.element.val();\n this._typing = true;\n },\n _move: function (action) {\n this.listView[action]();\n if (this.options.suggest) {\n this.suggest(this.listView.focus());\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._loading.hide();\n that.element.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function () {\n var that = this;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n that.element.attr('aria-busy', true);\n that._loading.show();\n that._hideClear();\n }, 100);\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, element = that.element, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = element.val();\n if (show === undefined) {\n show = !value;\n }\n if (!show) {\n if (value !== placeholder) {\n placeholder = value;\n } else {\n placeholder = '';\n }\n }\n if (value === that._old && !show) {\n return;\n }\n element.toggleClass('k-readonly', show).val(placeholder);\n if (!placeholder && element[0] === document.activeElement) {\n caret(element[0], 0, 0);\n }\n }\n },\n _separator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return new RegExp(separator.join('|'), 'gi');\n }\n return separator;\n },\n _defaultSeparator: function () {\n var separator = this.options.separator;\n if (separator instanceof Array) {\n return separator[0];\n }\n return separator;\n },\n _inputValue: function () {\n return this.element.val();\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n if (that._prev !== that._accessor()) {\n that._prev = that._accessor();\n that.search();\n }\n }, that.options.delay);\n },\n _select: function (candidate) {\n var that = this;\n that._active = true;\n return that.listView.select(candidate).done(function () {\n that._active = false;\n });\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.element);\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n this.wrapper.addClass('k-autocomplete-clearable');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleCloseVisibility: function () {\n if (this.value()) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n }\n wrapper.attr('tabindex', -1);\n wrapper.attr('role', 'presentation');\n wrapper[0].style.cssText = DOMelement.style.cssText;\n element.css({\n width: '',\n height: DOMelement.style.height\n });\n that._focused = that.element;\n that.wrapper = wrapper.addClass('k-widget k-autocomplete').addClass(DOMelement.className);\n that._inputWrapper = $(wrapper[0]);\n }\n });\n ui.plugin(AutoComplete);\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.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', nsFocusEvent = ns + 'FocusEvent', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', CLICKEVENTS = 'click' + ns + ' touchend' + ns, HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that.wrapper.attr('aria-live', 'polite');\n that._enable();\n that._attachFocusHandlers();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n that.one('set', function (e) {\n if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n that._textAccessor(that._optionLabelText());\n }\n });\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n autoWidth: false\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n if (that.filterInput) {\n that.filterInput.off(nsFocusEvent);\n }\n },\n open: function () {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._focusFilter = true;\n that.popup.one('activate', that._focusInputHandler);\n that.popup._hovered = true;\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('
            ').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().on(CLICKEVENTS, proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return undefined;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _attachFocusHandlers: function () {\n var that = this;\n var wrapper = that.wrapper;\n wrapper.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n if (that.filterInput) {\n that.filterInput.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n }\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._focusElement(that.wrapper);\n that._blur();\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n } else {\n this.listView.focusNext();\n }\n },\n _prevItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n this.listView.focusPrev();\n if (!this.listView.focus()) {\n this._focus(this.optionLabel);\n }\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown').addClass(DOMelement.className).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\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.combobox', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'combobox',\n name: 'ComboBox',\n category: 'web',\n description: 'The ComboBox widget allows the selection from pre-defined values or entering a new value.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, caret = kendo.caret, support = kendo.support, placeholderSupported = support.placeholder, activeElement = kendo._activeElement, keys = kendo.keys, ns = '.kendoComboBox', nsFocusEvent = ns + 'FocusEvent', CLICK = 'click' + ns, MOUSEDOWN = 'mousedown' + ns, DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', LOADING = 'k-i-loading', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', STATE_REBIND = 'rebind', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, proxy = $.proxy, newLineRegEx = /(\\r\\n|\\n|\\r)/gm;\n var ComboBox = Select.extend({\n init: function (element, options) {\n var that = this, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n options.placeholder = options.placeholder || element.attr('placeholder');\n that._reset();\n that._wrapper();\n that._input();\n that._clearButton();\n that._tabindex(that.input);\n that._popup();\n that._dataSource();\n that._ignoreCase();\n that._enable();\n that._attachFocusEvents();\n that._oldIndex = that.selectedIndex = -1;\n that._aria();\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n if (options.autoBind) {\n that._filterSource();\n } else {\n text = options.text;\n if (!text && that._isSelect) {\n text = element.children(':selected').text();\n }\n if (text) {\n that._setText(text);\n }\n }\n if (!text) {\n that._placeholder();\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'ComboBox',\n enabled: true,\n index: -1,\n text: null,\n value: null,\n autoBind: true,\n delay: 200,\n dataTextField: '',\n dataValueField: '',\n minLength: 1,\n enforceMinLength: false,\n height: 200,\n highlightFirst: true,\n filter: 'none',\n placeholder: '',\n suggest: false,\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true,\n autoWidth: false\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria();\n this._clearButton();\n },\n destroy: function () {\n var that = this;\n that.input.off(ns);\n that.input.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n clearTimeout(that._pasteTimeout);\n that._arrow.off(CLICK + ' ' + MOUSEDOWN);\n that._clear.off(CLICK + ' ' + MOUSEDOWN);\n Select.fn.destroy.call(that);\n },\n _change: function () {\n var that = this;\n var text = that.text();\n var hasText = text && text !== that._oldText && text !== that.options.placeholder;\n var index = that.selectedIndex;\n var isCustom = index === -1;\n if (!that.options.syncValueAndText && !that.value() && isCustom && hasText) {\n that._old = '';\n that._oldIndex = index;\n that._oldText = text;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n that._typing = false;\n return;\n }\n Select.fn._change.call(that);\n that._toggleCloseVisibility();\n },\n _attachFocusEvents: function () {\n var that = this;\n that.input.on('focus' + nsFocusEvent, proxy(that._inputFocus, that)).on('focusout' + nsFocusEvent, proxy(that._inputFocusout, that));\n },\n _focusHandler: function () {\n this.input.focus();\n },\n _arrowClick: function () {\n this._toggle();\n },\n _inputFocus: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._placeholder(false);\n },\n _inputFocusout: function () {\n var that = this;\n var value = that.value();\n that._userTriggered = true;\n that._inputWrapper.removeClass(FOCUSED);\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n that.text(that.text());\n var item = that._focus();\n var dataItem = this.listView.dataItemByIndex(this.listView.getElementIndex(item));\n if (value !== that.value() && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._blur();\n that.element.blur();\n },\n _inputPaste: function () {\n var that = this;\n clearTimeout(that._pasteTimeout);\n that._pasteTimeout = null;\n that._pasteTimeout = setTimeout(function () {\n that.search();\n });\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that._inputWrapper.off(ns), input = that.element.add(that.input.off(ns)), arrow = that._arrow.off(CLICK + ' ' + MOUSEDOWN), clear = that._clear;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n arrow.on(CLICK, proxy(that._arrowClick, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n clear.on(CLICK + ' touchend' + ns, proxy(that._clearValue, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('input' + ns, proxy(that._search, that)).on('paste' + ns, proxy(that._inputPaste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n that._toggleCloseVisibility();\n },\n open: function () {\n var that = this;\n var state = that._state;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var reinitialized = !that.ul.find(that.listView.focus()).length;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() && state !== STATE_FILTER || state === STATE_ACCEPT) {\n that._open = true;\n that._state = STATE_REBIND;\n if (that.options.minLength !== 1 && !isFiltered || isFiltered && that.value() && that.selectedIndex === -1) {\n that.refresh();\n that._openPopup();\n if (!this.options.virtual) {\n that.listView.bound(false);\n }\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that.popup._hovered = true;\n that._openPopup();\n if (that.options.virtual) {\n that._focusItem();\n } else if (reinitialized && that.options.highlightFirst) {\n that.listView.focus(0);\n }\n }\n },\n _scrollToFocusedItem: function () {\n var listView = this.listView;\n listView.scrollToIndex(listView.getElementIndex(listView.focus()));\n },\n _openPopup: function () {\n this.popup.one('activate', proxy(this._scrollToFocusedItem, this));\n this.popup.open();\n },\n _updateSelectionState: function () {\n var that = this;\n var text = that.options.text;\n var value = that.options.value;\n if (that.listView.isFiltered()) {\n return;\n }\n if (that.selectedIndex === -1) {\n if (text === undefined || text === null) {\n text = value;\n }\n that._accessor(value);\n that.input.val(text || that.input.val());\n that._placeholder();\n } else if (that._oldIndex === -1) {\n that._oldIndex = that.selectedIndex;\n }\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var custom = that._customOption;\n if (that._state === STATE_REBIND) {\n that._state = '';\n }\n that._customOption = undefined;\n that._options(data, '', that.value());\n if (custom && custom[0].selected && !that.listView._emptySearch) {\n that._custom(custom.val());\n }\n },\n _updateSelection: function () {\n var that = this;\n var listView = that.listView;\n var initialIndex = that._initialIndex;\n var hasInitialIndex = initialIndex !== null && initialIndex > -1;\n var filtered = that._state === STATE_FILTER;\n if (filtered) {\n $(listView.focus()).removeClass('k-state-selected');\n return;\n }\n if (that._fetch) {\n return;\n }\n if (!listView.value().length) {\n if (hasInitialIndex) {\n that.select(initialIndex);\n } else if (that._accessor()) {\n listView.value(that._accessor());\n }\n }\n that._initialIndex = null;\n var dataItem = listView.selectedDataItems()[0];\n if (!dataItem) {\n return;\n }\n if (that._value(dataItem) !== that.value()) {\n that._custom(that._value(dataItem));\n } else if (that._value(dataItem) !== that.element[0].value) {\n that._accessor(that._value(dataItem));\n }\n if (that.text() && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n },\n _updateItemFocus: function () {\n var listView = this.listView;\n if (!this.options.highlightFirst) {\n listView.focus(-1);\n } else if (!listView.focus() && !listView.focusIndex()) {\n listView.focus(0);\n }\n },\n _listBound: function () {\n var that = this;\n var isActive = that.input[0] === activeElement();\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var length = data.length;\n var groupsLength = that.dataSource._group ? that.dataSource._group.length : 0;\n var isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!length);\n that._toggleHeader(!!groupsLength && !!length);\n that._resizePopup();\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n that._updateSelection();\n if (data.length && isFirstPage) {\n that._updateItemFocus();\n if (that.options.suggest && isActive && that.input.val()) {\n that.suggest(data[0]);\n }\n }\n if (that._open) {\n that._open = false;\n if (that._typingTimeout && !isActive) {\n that.popup.close();\n } else {\n that.toggle(that._allowOpening());\n }\n that._typingTimeout = null;\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n if (candidate === -1) {\n that.input[0].value = '';\n that._accessor('');\n }\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n that._toggleCloseVisibility();\n });\n },\n _selectValue: function (dataItem) {\n var idx = this.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this.selectedIndex = idx;\n if (this.listView.isFiltered() && idx !== -1) {\n this._valueBeforeCascade = this._old;\n }\n if (idx === -1 && !dataItem) {\n if (this.options.syncValueAndText) {\n if (this.options.dataTextField === this.options.dataValueField) {\n text = this._accessor();\n } else {\n text = this.input[0].value;\n }\n value = text;\n } else {\n text = this.text();\n }\n this.listView.focus(-1);\n } else {\n if (dataItem || dataItem === 0) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._setDomInputValue(text);\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n _setDomInputValue: function (text) {\n var that = this;\n var currentCaret = caret(this.input);\n var caretStart;\n if (currentCaret && currentCaret.length) {\n caretStart = currentCaret[0];\n }\n this._prev = this.input[0].value = text;\n if (caretStart && this.selectedIndex === -1) {\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n that.input[0].setSelectionRange(caretStart, caretStart);\n }, 0);\n } else {\n this.input[0].setSelectionRange(caretStart, caretStart);\n }\n }\n },\n refresh: function () {\n this.listView.refresh();\n },\n _toggleCloseVisibility: function () {\n var preventShow = this.element.is(':disabled') || this.element.is('[readonly]');\n if (this.text() && !preventShow) {\n this._showClear();\n } else {\n this._hideClear();\n }\n },\n suggest: function (word) {\n var that = this;\n var element = that.input[0];\n var value = that.text();\n var caretIdx = caret(element)[0];\n var key = that._last;\n var idx;\n if (key == keys.BACKSPACE || key == keys.DELETE) {\n that._last = undefined;\n return;\n }\n word = word || '';\n if (typeof word !== 'string') {\n if (word[0]) {\n word = that.dataSource.view()[List.inArray(word[0], that.ul[0])];\n }\n word = word ? that._text(word) : '';\n }\n if (caretIdx <= 0) {\n caretIdx = value.toLowerCase().indexOf(word.toLowerCase()) + 1;\n }\n if (word) {\n word = word.toString();\n idx = word.toLowerCase().indexOf(value.toLowerCase());\n if (idx > -1) {\n value += word.substring(idx + value.length);\n }\n } else {\n value = value.substring(0, caretIdx);\n }\n if (value.length !== caretIdx || !word) {\n element.value = value;\n if (element === activeElement()) {\n caret(element, caretIdx, value.length);\n }\n }\n },\n text: function (text) {\n text = text === null ? '' : text;\n var that = this;\n var input = that.input[0];\n var ignoreCase = that.options.ignoreCase;\n var loweredText = text;\n var dataItem;\n var value;\n if (text === undefined) {\n return input.value;\n }\n if (that.options.autoBind === false && !that.listView.bound()) {\n that._setText(text);\n return;\n }\n dataItem = that.dataItem();\n if (dataItem && that._text(dataItem).replace && that._text(dataItem).replace(newLineRegEx, '') === text) {\n value = that._value(dataItem);\n if (value === List.unifyType(that._old, typeof value)) {\n that._triggerCascade();\n return;\n }\n }\n if (ignoreCase) {\n loweredText = loweredText.toLowerCase();\n }\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n if (that.selectedIndex < 0) {\n input.value = text;\n if (that.options.syncValueAndText) {\n that._accessor(text);\n }\n that._cascadeTriggered = true;\n that._triggerCascade();\n }\n that._prev = input.value;\n });\n that._toggleCloseVisibility();\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n value: function (value) {\n var that = this;\n var options = that.options;\n var listView = that.listView;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n that.trigger('set', { value: value });\n if (value === options.value && that.input.val() === options.text) {\n return;\n }\n that._accessor(value);\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n if (that.selectedIndex === -1 && (!listView._selectedDataItems || !listView._selectedDataItems.length)) {\n that._accessor(value);\n that.input.val(value);\n that._placeholder(true);\n }\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n that._prev = that.input.val();\n if (that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n that._toggleCloseVisibility();\n });\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._arrowIcon.removeClass(LOADING);\n that._focused.attr('aria-busy', false);\n that._busy = null;\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n var dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(item));\n var shouldTrigger = true;\n e.preventDefault();\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n if (!shouldTrigger) {\n that.input.val(that._text(dataItem));\n }\n }\n if (shouldTrigger && that.trigger('select', {\n dataItem: dataItem,\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n });\n },\n _syncValueAndText: function () {\n return this.options.syncValueAndText;\n },\n _inputValue: function () {\n return this.text();\n },\n _searchByWord: function (word) {\n var that = this;\n var options = that.options;\n var dataSource = that.dataSource;\n var ignoreCase = options.ignoreCase;\n var predicate = function (dataItem) {\n var text = that._text(dataItem);\n if (text !== undefined) {\n text = text + '';\n if (text !== '' && word === '') {\n return false;\n }\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n }\n };\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n if (!that.ul[0].firstChild) {\n dataSource.one(CHANGE, function () {\n if (dataSource.view()[0]) {\n that.search(word);\n }\n }).fetch();\n return;\n }\n this.listView.focus(this._get(predicate));\n var current = this.listView.focus();\n if (current) {\n if (options.suggest) {\n that.suggest(current);\n }\n this.open();\n }\n if (this.options.highlightFirst && !word) {\n this.listView.focusFirst();\n }\n },\n _input: function () {\n var that = this, element = that.element.removeClass('k-input')[0], accessKey = element.accessKey, wrapper = that.wrapper, SELECTOR = 'input.k-input', name = element.name || '', input, maxLength;\n if (name) {\n name = 'name=\"' + name + '_input\" ';\n }\n input = wrapper.find(SELECTOR);\n if (!input[0]) {\n wrapper.append('').append(that.element);\n input = wrapper.find(SELECTOR);\n }\n input[0].style.cssText = element.style.cssText;\n input[0].title = element.title;\n maxLength = parseInt(this.element.prop('maxlength') || this.element.attr('maxlength'), 10);\n if (maxLength > -1) {\n input[0].maxLength = maxLength;\n }\n input.addClass(element.className).css({\n width: '',\n height: element.style.height\n }).attr({\n 'role': 'combobox',\n 'aria-expanded': false\n }).show();\n if (placeholderSupported) {\n input.attr('placeholder', that.options.placeholder);\n }\n if (accessKey) {\n element.accessKey = '';\n input[0].accessKey = accessKey;\n }\n that._focused = that.input = input;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n that._arrowIcon = that._arrow.find('.k-icon');\n if (element.id) {\n that._arrow.attr('aria-controls', that.ul[0].id);\n }\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-combobox-clearable');\n }\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._last = key;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = null;\n if (key === keys.HOME) {\n that._firstItem();\n } else if (key === keys.END) {\n that._lastItem();\n } else if (key === keys.ENTER || key === keys.TAB && that.popup.visible()) {\n var current = that.listView.focus();\n var dataItem = that.dataItem();\n var shouldTrigger = true;\n if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n current = null;\n }\n if (current) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n dataItem = that.listView.dataItemByIndex(that.listView.getElementIndex(current));\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n }\n if (shouldTrigger && that.trigger('select', {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n that._userTriggered = true;\n that._select(current).done(function () {\n that._blur();\n that._valueBeforeCascade = that._old = that.value();\n });\n } else {\n if (that._syncValueAndText() || that._isSelect) {\n that._accessor(that.input.val());\n }\n that.listView.value(that.input.val());\n that._blur();\n }\n } else if (key != keys.TAB && !that._move(e)) {\n that._search();\n } else if (key === keys.ESC && !that.popup.visible() && that.text()) {\n that._clearValue();\n }\n },\n _placeholder: function (show) {\n if (placeholderSupported) {\n return;\n }\n var that = this, input = that.input, placeholder = that.options.placeholder, value;\n if (placeholder) {\n value = that.value();\n if (show === undefined) {\n show = !value;\n }\n input.toggleClass('k-readonly', show);\n if (!show) {\n if (!value) {\n placeholder = '';\n } else {\n return;\n }\n }\n input.val(placeholder);\n if (!placeholder && input[0] === activeElement()) {\n caret(input[0], 0, 0);\n }\n }\n },\n _search: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that._typingTimeout = setTimeout(function () {\n var value = that.text();\n if (that._prev !== value) {\n that._prev = value;\n if (that.options.filter === 'none' && that.options.virtual) {\n that.listView.select(-1);\n }\n that.search(value);\n that._toggleCloseVisibility();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n },\n _setText: function (text) {\n this.input.val(text);\n this._prev = text;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.hide().wrap('').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n }\n that.wrapper = wrapper.addClass('k-widget k-combobox').addClass(element[0].className).css('display', '');\n },\n _clearSelection: function (parent, isFiltered) {\n var that = this;\n var hasValue = parent.value();\n var custom = hasValue && parent.selectedIndex === -1;\n if (this.selectedIndex == -1 && this.value()) {\n return;\n }\n if (isFiltered || !hasValue || custom) {\n that.options.value = '';\n that.value('');\n that._selectedValue = null;\n }\n },\n _preselect: function (value, text) {\n this.input.val(text);\n this._accessor(value);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._placeholder();\n this._initialIndex = null;\n this._presetValue = true;\n this._toggleCloseVisibility();\n }\n });\n ui.plugin(ComboBox);\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.multiselect', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'multiselect',\n name: 'MultiSelect',\n category: 'web',\n description: 'The MultiSelect widget allows the selection from pre-defined values.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, keys = $.extend({ A: 65 }, kendo.keys), activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, proxy = $.proxy, ID = 'id', LI = 'li', ACCEPT = 'accept', FILTER = 'filter', REBIND = 'rebind', OPEN = 'open', CLOSE = 'close', CHANGE = 'change', PROGRESS = 'progress', SELECT = 'select', DESELECT = 'deselect', ARIA_DISABLED = 'aria-disabled', FOCUSEDCLASS = 'k-state-focused', SELECTEDCLASS = 'k-state-selected', HIDDENCLASS = 'k-hidden', HOVERCLASS = 'k-state-hover', STATEDISABLED = 'k-state-disabled', DISABLED = 'disabled', READONLY = 'readonly', ns = '.kendoMultiSelect', CLICK = 'click' + ns, KEYDOWN = 'keydown' + ns, MOUSEENTER = 'mouseenter' + ns, MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = MOUSEENTER + ' ' + MOUSELEAVE, quotRegExp = /\"/g, isArray = $.isArray, styles = [\n 'font-family',\n 'font-size',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'letter-spacing',\n 'text-transform',\n 'line-height'\n ];\n var MultiSelect = List.extend({\n init: function (element, options) {\n var that = this, id, disabled;\n that.ns = ns;\n List.fn.init.call(that, element, options);\n that._optionsMap = {};\n that._customOptions = {};\n that._wrapper();\n that._tagList();\n that._input();\n that._textContainer();\n that._loader();\n that._clearButton();\n that._tabindex(that.input);\n element = that.element.attr('multiple', 'multiple').hide();\n options = that.options;\n if (!options.placeholder) {\n options.placeholder = element.data('placeholder');\n }\n id = element.attr(ID);\n if (id) {\n that._tagID = id + '_tag_active';\n id = id + '_taglist';\n that.tagList.attr(ID, id);\n that.input.attr('aria-describedby', id);\n }\n that._initialOpen = true;\n that._aria(id);\n that._dataSource();\n that._ignoreCase();\n that._popup();\n that._tagTemplate();\n that.requireValueMapper(that.options);\n that._initList();\n that._reset();\n that._enable();\n that._placeholder();\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (options.value) {\n that._preselect(options.value);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n kendo.notify(that);\n that._toggleCloseVisibility();\n },\n options: {\n name: 'MultiSelect',\n tagMode: 'multiple',\n enabled: true,\n autoBind: true,\n autoClose: true,\n highlightFirst: true,\n dataTextField: '',\n dataValueField: '',\n filter: 'startswith',\n ignoreCase: true,\n minLength: 1,\n enforceMinLength: false,\n delay: 100,\n value: null,\n maxSelectedItems: null,\n placeholder: '',\n height: 200,\n animation: {},\n virtual: false,\n itemTemplate: '',\n tagTemplate: '',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n autoWidth: false\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\n DESELECT,\n 'filtering',\n 'dataBinding',\n 'dataBound'\n ],\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._state = '';\n this._dataSource();\n this.persistTagList = false;\n this.listView.setDataSource(this.dataSource);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setOptions: function (options) {\n var listOptions = this._listOptions(options);\n List.fn.setOptions.call(this, options);\n this.listView.setOptions(listOptions);\n this._accessors();\n this._aria(this.tagList.attr(ID));\n this._tagTemplate();\n this._placeholder();\n this._clearButton();\n },\n currentTag: function (candidate) {\n var that = this;\n if (candidate !== undefined) {\n if (that._currentTag) {\n that._currentTag.removeClass(FOCUSEDCLASS).removeAttr(ID);\n that.input.removeAttr('aria-activedescendant');\n }\n if (candidate) {\n candidate.addClass(FOCUSEDCLASS).attr(ID, that._tagID);\n that.input.attr('aria-activedescendant', that._tagID);\n }\n that._currentTag = candidate;\n } else {\n return that._currentTag;\n }\n },\n dataItems: function () {\n return this.listView.selectedDataItems();\n },\n destroy: function () {\n var that = this, ns = that.ns;\n clearTimeout(that._busy);\n clearTimeout(that._typingTimeout);\n that.wrapper.off(ns);\n that.tagList.off(ns);\n that.input.off(ns);\n that._clear.off(ns);\n List.fn.destroy.call(that);\n },\n _activateItem: function () {\n if (this.popup.visible()) {\n List.fn._activateItem.call(this);\n }\n this.currentTag(null);\n },\n _listOptions: function (options) {\n var that = this;\n var listOptions = List.fn._listOptions.call(that, $.extend(options, {\n selectedItemChange: proxy(that._selectedItemChange, that),\n selectable: 'multiple'\n }));\n var itemTemplate = this.options.itemTemplate || this.options.template;\n var template = listOptions.itemTemplate || itemTemplate || listOptions.template;\n if (!template) {\n template = '#:' + kendo.expr(listOptions.dataTextField, 'data') + '#';\n }\n listOptions.template = template;\n return listOptions;\n },\n _setListValue: function () {\n List.fn._setListValue.call(this, this._initialValues.slice(0));\n },\n _listChange: function (e) {\n var data = this.dataSource.flatView();\n var optionsMap = this._optionsMap;\n var valueGetter = this._value;\n if (this._state === REBIND) {\n this._state = '';\n }\n for (var i = 0; i < e.added.length; i++) {\n if (optionsMap[valueGetter(e.added[i].dataItem)] === undefined) {\n this._render(data);\n break;\n }\n }\n this._selectValue(e.added, e.removed);\n },\n _selectedItemChange: function (e) {\n var items = e.items;\n var context;\n var idx;\n for (idx = 0; idx < items.length; idx++) {\n context = items[idx];\n this.tagList.children().eq(context.index).children('span:first').html(this.tagTextTemplate(context.item));\n }\n },\n _wrapperMousedown: function (e) {\n var that = this;\n var notInput = e.target.nodeName.toLowerCase() !== 'input';\n var target = $(e.target);\n var closeButton = target.hasClass('k-select') || target.hasClass('k-icon');\n if (closeButton) {\n closeButton = !target.closest('.k-select').children('.k-i-arrow-60-down').length;\n }\n if (notInput && !(closeButton && kendo.support.mobileOS)) {\n e.preventDefault();\n }\n if (!closeButton) {\n if (that.input[0] !== activeElement() && notInput) {\n that.input.focus();\n }\n if (that.options.minLength === 1) {\n that.open();\n }\n }\n },\n _inputFocus: function () {\n this._placeholder(false);\n this.wrapper.addClass(FOCUSEDCLASS);\n },\n _inputFocusout: function () {\n var that = this;\n clearTimeout(that._typingTimeout);\n that.wrapper.removeClass(FOCUSEDCLASS);\n that._placeholder(!that.listView.selectedDataItems()[0], true);\n that.close();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n if (that.listView.bound() && that.listView.isFiltered()) {\n that.persistTagList = true;\n that._clearFilter();\n }\n that.element.blur();\n },\n _removeTag: function (tag, shouldTrigger) {\n var that = this;\n var state = that._state;\n var position = tag.index();\n var listView = that.listView;\n var value = listView.value()[position];\n var dataItem = that.listView.selectedDataItems()[position];\n var customIndex = that._customOptions[value];\n var option;\n if (that.trigger(DESELECT, {\n dataItem: dataItem,\n item: tag\n })) {\n that._close();\n return;\n }\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n var done = function () {\n that.currentTag(null);\n if (shouldTrigger) {\n that._change();\n }\n that._close();\n };\n if (customIndex === undefined) {\n that.persistTagList = false;\n listView.select(listView.select()[position]).done(done);\n } else {\n option = that.element[0].children[customIndex];\n option.selected = false;\n listView.removeAt(position);\n tag.remove();\n done();\n }\n },\n _tagListClick: function (e) {\n var target = $(e.currentTarget);\n if (!target.children('.k-i-arrow-60-down').length) {\n this._removeTag(target.closest(LI), true);\n }\n },\n _clearClick: function () {\n var that = this;\n if (that.options.tagMode === 'single') {\n that.listView.value([]);\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n }\n that.input.val('');\n that._search();\n that._change();\n that.focus();\n that._hideClear();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n }\n },\n _editable: function (options) {\n var that = this, disable = options.disable, readonly = options.readonly, wrapper = that.wrapper.off(ns), tagList = that.tagList.off(ns), input = that.element.add(that.input.off(ns));\n if (!readonly && !disable) {\n wrapper.removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover).on('mousedown' + ns + ' touchend' + ns, proxy(that._wrapperMousedown, that));\n that.input.on(KEYDOWN, proxy(that._keydown, that)).on('paste' + ns, proxy(that._search, that)).on('input' + ns, proxy(that._search, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on(CLICK + ns + ' touchend' + ns, proxy(that._clearClick, that));\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n tagList.on(MOUSEENTER, LI, function () {\n $(this).addClass(HOVERCLASS);\n }).on(MOUSELEAVE, LI, function () {\n $(this).removeClass(HOVERCLASS);\n }).on(CLICK, 'li.k-button .k-select', proxy(that._tagListClick, that));\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED);\n } else {\n wrapper.removeClass(STATEDISABLED);\n }\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n _close: function () {\n var that = this;\n if (that.options.autoClose) {\n that.close();\n } else {\n that.popup.position();\n }\n },\n _filterSource: function (filter, force) {\n if (!force) {\n force = this._retrieveData;\n }\n this._retrieveData = false;\n List.fn._filterSource.call(this, filter, force);\n },\n close: function () {\n this._activeItem = null;\n this.input.removeAttr('aria-activedescendant');\n this.popup.close();\n },\n open: function () {\n var that = this;\n if (that._request) {\n that._retrieveData = false;\n }\n if (that._retrieveData || !that.listView.bound() || that._state === ACCEPT) {\n that._open = true;\n that._state = REBIND;\n that.listView.skipUpdate(true);\n that.persistTagList = that._initialOpen && !that.listView.bound() ? false : true;\n that._filterSource();\n that._focusItem();\n } else if (that._allowOpening()) {\n if (that._initialOpen && !that.options.autoBind && !that.options.virtual && that.options.value && !$.isPlainObject(that.options.value[0])) {\n that.value(that._initialValues);\n }\n that.popup._hovered = true;\n that._initialOpen = false;\n that.popup.open();\n that._focusItem();\n }\n },\n toggle: function (toggle) {\n toggle = toggle !== undefined ? toggle : !this.popup.visible();\n this[toggle ? OPEN : CLOSE]();\n },\n refresh: function () {\n this.listView.refresh();\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n that._render(data);\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup();\n if (that._open) {\n that._open = false;\n that.toggle(that._allowOpening());\n }\n that.popup.position();\n if (that.options.highlightFirst && (skip === undefined || skip === 0)) {\n that.listView.focusFirst();\n }\n if (that._touchScroller) {\n that._touchScroller.reset();\n }\n that._hideBusy();\n that._makeUnselectable();\n that.trigger('dataBound');\n },\n _inputValue: function () {\n var that = this;\n var inputValue = that.input.val();\n if (that.options.placeholder === inputValue) {\n inputValue = '';\n }\n return inputValue;\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var oldValue = listView.value().slice();\n var maxSelectedItems = that.options.maxSelectedItems;\n var clearFilters = listView.bound() && listView.isFiltered();\n if (value === undefined) {\n return oldValue;\n }\n that.persistTagList = false;\n that.requireValueMapper(that.options, value);\n value = that._normalizeValues(value);\n if (maxSelectedItems !== null && value.length > maxSelectedItems) {\n value = value.slice(0, maxSelectedItems);\n }\n if (clearFilters) {\n that._clearFilter();\n }\n listView.value(value);\n that._old = that._valueBeforeCascade = listView.value();\n if (!clearFilters) {\n that._fetchData();\n }\n that._toggleCloseVisibility();\n },\n _preselect: function (data, value) {\n var that = this;\n if (!isArray(data) && !(data instanceof kendo.data.ObservableArray)) {\n data = [data];\n }\n if ($.isPlainObject(data[0]) || data[0] instanceof kendo.data.ObservableObject || !that.options.dataValueField) {\n that.dataSource.data(data);\n that.value(value || that._initialValues);\n that._retrieveData = true;\n }\n },\n _setOption: function (value, selected) {\n var option = this.element[0].children[this._optionsMap[value]];\n if (option) {\n option.selected = selected;\n }\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n var isEmptyArray = that.listView.value().length === 0;\n if (isEmptyArray || that._request) {\n return;\n }\n if (that._retrieveData || !that._fetch && !hasItems) {\n that._fetch = true;\n that._retrieveData = false;\n that.dataSource.read().done(function () {\n that._fetch = false;\n });\n }\n },\n _isBound: function () {\n return this.listView.bound() && !this._retrieveData;\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {};\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n } else {\n that._progressHandler = proxy(that._showBusy, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(PROGRESS, that._progressHandler).bind('error', that._errorHandler);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(that._initialValues);\n that._placeholder();\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _initValue: function () {\n var value = this.options.value || this.element.val();\n this._old = this._initialValues = this._normalizeValues(value);\n },\n _normalizeValues: function (value) {\n var that = this;\n if (value === null) {\n value = [];\n } else if (value && $.isPlainObject(value)) {\n value = [that._value(value)];\n } else if (value && $.isPlainObject(value[0])) {\n value = $.map(value, function (dataItem) {\n return that._value(dataItem);\n });\n } else if (!isArray(value) && !(value instanceof ObservableArray)) {\n value = [value];\n } else if (isArray(value)) {\n value = value.slice();\n }\n return value;\n },\n _change: function () {\n var that = this, value = that.value();\n if (!compare(value, that._old)) {\n that._old = value.slice();\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n that.popup.position();\n that._toggleCloseVisibility();\n },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._activeItem = item;\n that._change();\n that._close();\n });\n },\n _getActiveItem: function () {\n return this._activeItem || $(this.listView.items()[this._getSelectedIndices().length - 1]) || this.listView.focus();\n },\n _getSelectedIndices: function () {\n return this.listView._selectedIndices || this.listView._selectedIndexes;\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var listView = that.listView;\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n var dir = 0;\n var activeItemIdx;\n var persistTagList;\n if (key !== keys.ENTER) {\n this._multipleSelection = false;\n }\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!listView.focus()) {\n listView.focusFirst();\n }\n return;\n }\n if (listView.focus()) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = -1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (!that._activeItem && e.shiftKey) {\n that._activeItem = listView.focus();\n dir = 1;\n }\n activeItemIdx = listView.getElementIndex(that._getActiveItem().first());\n listView.focusPrev();\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.shiftKey) {\n this._multipleSelection = true;\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus().first()) + dir);\n }\n }\n }\n e.preventDefault();\n } else if (key === keys.LEFT && !isRtl || key === keys.RIGHT && isRtl) {\n if (!hasValue) {\n tag = tag ? tag.prev() : $(that.tagList[0].lastChild);\n if (tag[0]) {\n that.currentTag(tag);\n }\n }\n } else if (key === keys.RIGHT && !isRtl || key === keys.LEFT && isRtl) {\n if (!hasValue && tag) {\n tag = tag.next();\n that.currentTag(tag[0] ? tag : null);\n }\n } else if (e.ctrlKey && !e.altKey && key === keys.A && visible && !that.options.virtual) {\n this._multipleSelection = true;\n if (this._getSelectedIndices().length === listView.items().length) {\n that._activeItem = null;\n }\n if (listView.items().length) {\n that._selectRange(0, listView.items().length - 1);\n }\n } else if (key === keys.ENTER && visible) {\n if (!listView.focus()) {\n return;\n }\n e.preventDefault();\n if (this._multipleSelection) {\n this._multipleSelection = false;\n if (listView.focus().hasClass(SELECTEDCLASS)) {\n that._close();\n return;\n }\n }\n that._select(listView.focus()).done(function () {\n that._change();\n that._close();\n });\n } else if (key === keys.SPACEBAR && e.ctrlKey && visible) {\n if (that._activeItem && listView.focus() && listView.focus()[0] === that._activeItem[0]) {\n that._activeItem = null;\n }\n if (!$(listView.focus()).hasClass(SELECTEDCLASS)) {\n that._activeItem = listView.focus();\n }\n that._select(listView.focus()).done(function () {\n that._change();\n });\n e.preventDefault();\n } else if (key === keys.SPACEBAR && e.shiftKey && visible) {\n var activeIndex = listView.getElementIndex(that._getActiveItem());\n var currentIndex = listView.getElementIndex(listView.focus());\n if (activeIndex !== undefined && currentIndex !== undefined) {\n that._selectRange(activeIndex, currentIndex);\n }\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.tagList.children().each(function (index, tag) {\n that._removeTag($(tag), false);\n });\n that._change();\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), 0);\n }\n listView.focusFirst();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].firstChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if (key === keys.END) {\n if (visible) {\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.ctrlKey && e.shiftKey && !that.options.virtual) {\n that._selectRange(listView.getElementIndex(listView.focus()[0]), listView.element.children().length - 1);\n }\n listView.focusLast();\n }\n } else if (!hasValue) {\n tag = that.tagList[0].lastChild;\n if (tag) {\n that.currentTag($(tag));\n }\n }\n } else if ((key === keys.DELETE || key === keys.BACKSPACE) && !hasValue) {\n that._state = ACCEPT;\n if (that.options.tagMode === 'single') {\n persistTagList = that.persistTagList;\n if (persistTagList) {\n that.persistTagList = false;\n }\n listView.value([]);\n that._change();\n that._close();\n that.persistTagList = persistTagList;\n return;\n }\n if (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag, true);\n }\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n } else {\n clearTimeout(that._typingTimeout);\n setTimeout(function () {\n that._scale();\n });\n that._search();\n }\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that.input.attr('aria-busy', false);\n that._loading.addClass(HIDDENCLASS);\n that._request = false;\n that._busy = null;\n that._toggleCloseVisibility();\n },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\n this._hideClear();\n },\n _showBusy: function () {\n var that = this;\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(proxy(that._showBusyHandler, that), 100);\n },\n _placeholder: function (show, skipCaret) {\n var that = this;\n var input = that.input;\n var active = activeElement();\n var placeholder = that.options.placeholder;\n var inputValue = input.val();\n var isActive = input[0] === active;\n var caretPos = inputValue.length;\n if (!isActive || that.options.autoClose || inputValue === placeholder) {\n caretPos = 0;\n inputValue = '';\n }\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = inputValue;\n input.toggleClass('k-readonly', show).val(show ? placeholder : inputValue);\n if (isActive && !skipCaret) {\n kendo.caret(input[0], caretPos, caretPos);\n }\n that._scale();\n },\n _scale: function () {\n var that = this, wrapper = that.wrapper.find('.k-multiselect-wrap'), wrapperWidth = wrapper.width(), span = that._span.text(that.input.val()), textWidth;\n if (!wrapper.is(':visible')) {\n span.appendTo(document.documentElement);\n wrapperWidth = textWidth = span.width() + 25;\n span.appendTo(wrapper);\n } else {\n textWidth = span.width() + 25;\n }\n that.input.width(textWidth > wrapperWidth ? wrapperWidth : textWidth);\n },\n _option: function (dataValue, dataText, selected) {\n var option = ' this.listView.value().length;\n },\n _angularTagItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.tagList[0].children,\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n },\n updatePersistTagList: function (added, removed) {\n if (this.persistTagList.added && this.persistTagList.added.length === removed.length && this.persistTagList.removed && this.persistTagList.removed.length === added.length) {\n this.persistTagList = false;\n } else {\n this.listView._removedAddedIndexes = this._old.slice();\n this.persistTagList = {\n added: added,\n removed: removed\n };\n }\n },\n _selectValue: function (added, removed) {\n var that = this;\n var values = that.value();\n var total = that.dataSource.total();\n var tagList = that.tagList;\n var getter = that._value;\n var removedItem;\n var addedItem;\n var idx;\n if (this.persistTagList) {\n this.updatePersistTagList(added, removed);\n return;\n }\n that._angularTagItems('cleanup');\n if (that.options.tagMode === 'multiple') {\n for (idx = removed.length - 1; idx > -1; idx--) {\n removedItem = removed[idx];\n if (tagList.children().length) {\n tagList[0].removeChild(tagList[0].children[removedItem.position]);\n that._setOption(getter(removedItem.dataItem), false);\n }\n }\n for (idx = 0; idx < added.length; idx++) {\n addedItem = added[idx];\n tagList.append(that.tagTemplate(addedItem.dataItem));\n that._setOption(getter(addedItem.dataItem), true);\n }\n } else {\n if (!that._maxTotal || that._maxTotal < total) {\n that._maxTotal = total;\n }\n tagList.html('');\n if (values.length) {\n tagList.append(that.tagTemplate({\n values: values,\n dataItems: that.dataItems(),\n maxTotal: that._maxTotal,\n currentTotal: total\n }));\n }\n for (idx = removed.length - 1; idx > -1; idx--) {\n that._setOption(getter(removed[idx].dataItem), false);\n }\n for (idx = 0; idx < added.length; idx++) {\n that._setOption(getter(added[idx].dataItem), true);\n }\n }\n that._angularTagItems('compile');\n that._placeholder();\n },\n _select: function (candidate) {\n var resolved = $.Deferred().resolve();\n if (!candidate) {\n return resolved;\n }\n var that = this;\n var listView = that.listView;\n var dataItem = listView.dataItemByIndex(listView.getElementIndex(candidate));\n var isSelected = candidate.hasClass('k-state-selected');\n if (that._state === REBIND) {\n that._state = '';\n }\n if (!that._allowSelection() && !isSelected) {\n return resolved;\n }\n if (that.trigger(isSelected ? DESELECT : SELECT, {\n dataItem: dataItem,\n item: candidate\n })) {\n that._close();\n return resolved;\n }\n that.persistTagList = false;\n return listView.select(candidate).done(function () {\n that._placeholder();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n listView.skipUpdate(true);\n }\n });\n },\n _selectRange: function (startIndex, endIndex) {\n var that = this;\n var listView = this.listView;\n var maxSelectedItems = this.options.maxSelectedItems;\n var indices = this._getSelectedIndices().slice();\n var indicesToSelect = [];\n var i;\n var selectIndices = function (indices) {\n listView.select(indices).done(function () {\n indices.forEach(function (index) {\n var dataItem = listView.dataItemByIndex(index);\n var candidate = listView.element.children()[index];\n var isSelected = $(candidate).hasClass('k-state-selected');\n that.trigger(isSelected ? SELECT : DESELECT, {\n dataItem: dataItem,\n item: $(candidate)\n });\n });\n that._change();\n });\n };\n if (indices.length - 1 === endIndex - startIndex) {\n return selectIndices(indices);\n }\n if (startIndex < endIndex) {\n for (i = startIndex; i <= endIndex; i++) {\n indicesToSelect.push(i);\n }\n } else {\n for (i = startIndex; i >= endIndex; i--) {\n indicesToSelect.push(i);\n }\n }\n if (maxSelectedItems !== null && indicesToSelect.length > maxSelectedItems) {\n indicesToSelect = indicesToSelect.slice(0, maxSelectedItems);\n }\n for (i = 0; i < indicesToSelect.length; i++) {\n var index = indicesToSelect[i];\n if (this._getSelectedIndices().indexOf(index) == -1) {\n indices.push(index);\n } else {\n indices.splice(indices.indexOf(index), 1);\n }\n }\n if (!indices.length) {\n return;\n }\n that.persistTagList = false;\n return selectIndices(indices);\n },\n _input: function () {\n var that = this;\n var element = that.element;\n var accessKey = element[0].accessKey;\n var input = that._innerWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('').appendTo(that._innerWrapper);\n }\n element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': 'off',\n 'role': 'listbox',\n 'title': element[0].title,\n 'aria-expanded': false\n });\n },\n _tagList: function () {\n var that = this, tagList = that._innerWrapper.children('ul');\n if (!tagList[0]) {\n tagList = $('
              ').appendTo(that._innerWrapper);\n }\n that.tagList = tagList;\n },\n _tagTemplate: function () {\n var that = this;\n var options = that.options;\n var tagTemplate = options.tagTemplate;\n var hasDataSource = options.dataSource;\n var isMultiple = options.tagMode === 'multiple';\n var defaultTemplate;\n if (that.element[0].length && !hasDataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n defaultTemplate = isMultiple ? kendo.template('#:' + kendo.expr(options.dataTextField, 'data') + '#', { useWithBlock: false }) : kendo.template('#:values.length# item(s) selected');\n that.tagTextTemplate = tagTemplate = tagTemplate ? kendo.template(tagTemplate) : defaultTemplate;\n that.tagTemplate = function (data) {\n return '
            • ' + tagTemplate(data) + '' + '
            • ';\n };\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.input);\n },\n _clearButton: function () {\n List.fn._clearButton.call(this);\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\n this.wrapper.addClass('k-multiselect-clearable');\n }\n },\n _textContainer: function () {\n var computedStyles = kendo.getComputedStyles(this.input[0], styles);\n computedStyles.position = 'absolute';\n computedStyles.visibility = 'hidden';\n computedStyles.top = -3333;\n computedStyles.left = -3333;\n this._span = $('').css(computedStyles).appendTo(this.wrapper);\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper = element.parent('span.k-multiselect');\n if (!wrapper[0]) {\n wrapper = element.wrap('
              ').parent();\n wrapper[0].style.cssText = element[0].style.cssText;\n wrapper[0].title = element[0].title;\n $('
              ').insertBefore(element);\n }\n that.wrapper = wrapper.addClass(element[0].className).css('display', '');\n that._innerWrapper = $(wrapper[0].firstChild);\n }\n });\n function compare(a, b) {\n var length;\n if (a === null && b !== null || a !== null && b === null) {\n return false;\n }\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (a[length] !== b[length]) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(MultiSelect);\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.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.slider', ['kendo.draganddrop'], f);\n}(function () {\n var __meta__ = {\n id: 'slider',\n name: 'Slider',\n category: 'web',\n description: 'The Slider widget provides a rich input for selecting values or ranges of values.',\n depends: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, format = kendo.format, parse = kendo.parseFloat, proxy = $.proxy, isArray = $.isArray, math = Math, support = kendo.support, pointers = support.pointers, msPointers = support.msPointers, CHANGE = 'change', SLIDE = 'slide', NS = '.slider', MOUSE_DOWN = 'touchstart' + NS + ' mousedown' + NS, TRACK_MOUSE_DOWN = pointers ? 'pointerdown' + NS : msPointers ? 'MSPointerDown' + NS : MOUSE_DOWN, MOUSE_UP = 'touchend' + NS + ' mouseup' + NS, TRACK_MOUSE_UP = pointers ? 'pointerup' : msPointers ? 'MSPointerUp' + NS : MOUSE_UP, MOVE_SELECTION = 'moveSelection', KEY_DOWN = 'keydown' + NS, CLICK = 'click' + NS, MOUSE_OVER = 'mouseover' + NS, FOCUS = 'focus' + NS, BLUR = 'blur' + NS, DRAG_HANDLE = '.k-draghandle', TRACK_SELECTOR = '.k-slider-track', TICK_SELECTOR = '.k-tick', STATE_SELECTED = 'k-state-selected', STATE_FOCUSED = 'k-state-focused', STATE_DEFAULT = 'k-state-default', STATE_DISABLED = 'k-state-disabled', DISABLED = 'disabled', UNDEFINED = 'undefined', TABINDEX = 'tabindex', getTouches = kendo.getTouches;\n var SliderBase = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that._isHorizontal = options.orientation == 'horizontal';\n that._isRtl = that._isHorizontal && kendo.support.isRtl(element);\n that._position = that._isHorizontal ? 'left' : 'bottom';\n that._sizeFn = that._isHorizontal ? 'width' : 'height';\n that._outerSize = that._isHorizontal ? outerWidth : outerHeight;\n options.tooltip.format = options.tooltip.enabled ? options.tooltip.format || '{0}' : '{0}';\n if (options.smallStep <= 0) {\n throw new Error('Kendo UI Slider smallStep must be a positive number.');\n }\n that._createHtml();\n that.wrapper = that.element.closest('.k-slider');\n that._trackDiv = that.wrapper.find(TRACK_SELECTOR);\n that._setTrackDivWidth();\n that._maxSelection = that._trackDiv[that._sizeFn]();\n that._sliderItemsInit();\n that._reset();\n that._tabindex(that.wrapper.find(DRAG_HANDLE));\n that[options.enabled ? 'enable' : 'disable']();\n var rtlDirectionSign = kendo.support.isRtl(that.wrapper) ? -1 : 1;\n that._keyMap = {\n 37: step(-1 * rtlDirectionSign * options.smallStep),\n 40: step(-options.smallStep),\n 39: step(+1 * rtlDirectionSign * options.smallStep),\n 38: step(+options.smallStep),\n 35: setValue(options.max),\n 36: setValue(options.min),\n 33: step(+options.largeStep),\n 34: step(-options.largeStep)\n };\n kendo.notify(that);\n },\n events: [\n CHANGE,\n SLIDE\n ],\n options: {\n enabled: true,\n min: 0,\n max: 10,\n smallStep: 1,\n largeStep: 5,\n orientation: 'horizontal',\n tickPlacement: 'both',\n tooltip: {\n enabled: true,\n format: '{0}'\n }\n },\n _distance: function () {\n return round(this.options.max - this.options.min);\n },\n _resize: function () {\n this._setTrackDivWidth();\n this.wrapper.find('.k-slider-items').remove();\n this._maxSelection = this._trackDiv[this._sizeFn]();\n this._sliderItemsInit();\n this._refresh();\n if (this.options.enabled) {\n this.enable(true);\n }\n },\n _sliderItemsInit: function () {\n var that = this, options = that.options;\n var sizeBetweenTicks = that._maxSelection / ((options.max - options.min) / options.smallStep);\n var pixelWidths = that._calculateItemsWidth(math.floor(that._distance() / options.smallStep));\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2) {\n $(this.element).parent().find('.k-slider-items').remove();\n that._trackDiv.before(createSliderItems(options, that._distance()));\n that._setItemsWidth(pixelWidths);\n that._setItemsTitle();\n }\n that._calculateSteps(pixelWidths);\n if (options.tickPlacement != 'none' && sizeBetweenTicks >= 2 && options.largeStep >= options.smallStep) {\n that._setItemsLargeTick();\n }\n },\n getSize: function () {\n return kendo.dimensions(this.wrapper);\n },\n _setTrackDivWidth: function () {\n var that = this, trackDivPosition = parseFloat(that._trackDiv.css(that._isRtl ? 'right' : that._position), 10) * 2;\n that._trackDiv[that._sizeFn](that.wrapper[that._sizeFn]() - 2 - trackDivPosition);\n },\n _setItemsWidth: function (pixelWidths) {\n var that = this, options = that.options, first = 0, last = pixelWidths.length - 1, items = that.wrapper.find(TICK_SELECTOR), i, paddingTop = 0, bordersWidth = 2, count = items.length, selection = 0;\n for (i = 0; i < count - 2; i++) {\n $(items[i + 1])[that._sizeFn](pixelWidths[i]);\n }\n if (that._isHorizontal) {\n $(items[first]).addClass('k-first')[that._sizeFn](pixelWidths[last - 1]);\n $(items[last]).addClass('k-last')[that._sizeFn](pixelWidths[last]);\n } else {\n $(items[last]).addClass('k-first')[that._sizeFn](pixelWidths[last]);\n $(items[first]).addClass('k-last')[that._sizeFn](pixelWidths[last - 1]);\n }\n if (that._distance() % options.smallStep !== 0 && !that._isHorizontal) {\n for (i = 0; i < pixelWidths.length; i++) {\n selection += pixelWidths[i];\n }\n paddingTop = that._maxSelection - selection;\n paddingTop += parseFloat(that._trackDiv.css(that._position), 10) + bordersWidth;\n that.wrapper.find('.k-slider-items').css('padding-top', paddingTop);\n }\n },\n _setItemsTitle: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), titleNumber = options.min, count = items.length, i = that._isHorizontal && !that._isRtl ? 0 : count - 1, limit = that._isHorizontal && !that._isRtl ? count : -1, increment = that._isHorizontal && !that._isRtl ? 1 : -1;\n for (; i - limit !== 0; i += increment) {\n $(items[i]).attr('title', format(options.tooltip.format, round(titleNumber)));\n titleNumber += options.smallStep;\n }\n },\n _setItemsLargeTick: function () {\n var that = this, options = that.options, items = that.wrapper.find(TICK_SELECTOR), i = 0, item, value;\n if (removeFraction(options.largeStep) % removeFraction(options.smallStep) === 0 || that._distance() / options.largeStep >= 3) {\n if (!that._isHorizontal && !that._isRtl) {\n items = $.makeArray(items).reverse();\n }\n for (i = 0; i < items.length; i++) {\n item = $(items[i]);\n value = that._values[i];\n var valueWithoutFraction = round(removeFraction(value - this.options.min));\n if (valueWithoutFraction % removeFraction(options.smallStep) === 0 && valueWithoutFraction % removeFraction(options.largeStep) === 0) {\n item.addClass('k-tick-large').html('' + item.attr('title') + '');\n if (i !== 0 && i !== items.length - 1) {\n item.css('line-height', item[that._sizeFn]() + 'px');\n }\n }\n }\n }\n },\n _calculateItemsWidth: function (itemsCount) {\n var that = this, options = that.options, trackDivSize = parseFloat(that._trackDiv.css(that._sizeFn)) + 1, distance = that._distance(), pixelStep = trackDivSize / distance, itemWidth, pixelWidths, i;\n if (distance / options.smallStep - math.floor(distance / options.smallStep) > 0) {\n trackDivSize -= distance % options.smallStep * pixelStep;\n }\n itemWidth = trackDivSize / itemsCount;\n pixelWidths = [];\n for (i = 0; i < itemsCount - 1; i++) {\n pixelWidths[i] = itemWidth;\n }\n pixelWidths[itemsCount - 1] = pixelWidths[itemsCount] = itemWidth / 2;\n return that._roundWidths(pixelWidths);\n },\n _roundWidths: function (pixelWidthsArray) {\n var balance = 0, count = pixelWidthsArray.length, i;\n for (i = 0; i < count; i++) {\n balance += pixelWidthsArray[i] - math.floor(pixelWidthsArray[i]);\n pixelWidthsArray[i] = math.floor(pixelWidthsArray[i]);\n }\n balance = math.round(balance);\n return this._addAdditionalSize(balance, pixelWidthsArray);\n },\n _addAdditionalSize: function (additionalSize, pixelWidthsArray) {\n if (additionalSize === 0) {\n return pixelWidthsArray;\n }\n var step = parseFloat(pixelWidthsArray.length - 1) / parseFloat(additionalSize == 1 ? additionalSize : additionalSize - 1), i;\n for (i = 0; i < additionalSize; i++) {\n pixelWidthsArray[parseInt(math.round(step * i), 10)] += 1;\n }\n return pixelWidthsArray;\n },\n _calculateSteps: function (pixelWidths) {\n var that = this, options = that.options, val = options.min, selection = 0, distance = that._distance(), itemsCount = math.ceil(distance / options.smallStep), i = 1, lastItem;\n itemsCount += distance / options.smallStep % 1 === 0 ? 1 : 0;\n pixelWidths.splice(0, 0, pixelWidths[itemsCount - 2] * 2);\n pixelWidths.splice(itemsCount - 1, 1, pixelWidths.pop() * 2);\n that._pixelSteps = [selection];\n that._values = [val];\n if (itemsCount === 0) {\n return;\n }\n while (i < itemsCount) {\n selection += (pixelWidths[i - 1] + pixelWidths[i]) / 2;\n that._pixelSteps[i] = selection;\n val += options.smallStep;\n that._values[i] = round(val);\n i++;\n }\n lastItem = distance % options.smallStep === 0 ? itemsCount - 1 : itemsCount;\n that._pixelSteps[lastItem] = that._maxSelection;\n that._values[lastItem] = options.max;\n if (that._isRtl) {\n that._pixelSteps.reverse();\n that._values.reverse();\n }\n },\n _getValueFromPosition: function (mousePosition, dragableArea) {\n var that = this, options = that.options, step = math.max(options.smallStep * (that._maxSelection / that._distance()), 0), position = 0, halfStep = step / 2, i;\n if (that._isHorizontal) {\n position = mousePosition - dragableArea.startPoint;\n if (that._isRtl) {\n position = that._maxSelection - position;\n }\n } else {\n position = dragableArea.startPoint - mousePosition;\n }\n if (that._maxSelection - (parseInt(that._maxSelection % step, 10) - 3) / 2 < position) {\n return options.max;\n }\n for (i = 0; i < that._pixelSteps.length; i++) {\n if (math.abs(that._pixelSteps[i] - position) - 1 <= halfStep) {\n return round(that._values[i]);\n }\n }\n },\n _getFormattedValue: function (val, drag) {\n var that = this, html = '', tooltip = that.options.tooltip, tooltipTemplate, selectionStart, selectionEnd;\n if (isArray(val)) {\n selectionStart = val[0];\n selectionEnd = val[1];\n } else if (drag && drag.type) {\n selectionStart = drag.selectionStart;\n selectionEnd = drag.selectionEnd;\n }\n if (drag) {\n tooltipTemplate = drag.tooltipTemplate;\n }\n if (!tooltipTemplate && tooltip.template) {\n tooltipTemplate = kendo.template(tooltip.template);\n }\n if (isArray(val) || drag && drag.type) {\n if (tooltipTemplate) {\n html = tooltipTemplate({\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n });\n } else {\n selectionStart = format(tooltip.format, selectionStart);\n selectionEnd = format(tooltip.format, selectionEnd);\n html = selectionStart + ' - ' + selectionEnd;\n }\n } else {\n if (drag) {\n drag.val = val;\n }\n if (tooltipTemplate) {\n html = tooltipTemplate({ value: val });\n } else {\n html = format(tooltip.format, val);\n }\n }\n return html;\n },\n _getDraggableArea: function () {\n var that = this, offset = kendo.getOffset(that._trackDiv);\n return {\n startPoint: that._isHorizontal ? offset.left : offset.top + that._maxSelection,\n endPoint: that._isHorizontal ? offset.left + that._maxSelection : offset.top\n };\n },\n _createHtml: function () {\n var that = this, element = that.element, options = that.options, inputs = element.find('input');\n if (inputs.length == 2) {\n inputs.eq(0).prop('value', formatValue(options.selectionStart));\n inputs.eq(1).prop('value', formatValue(options.selectionEnd));\n } else {\n element.prop('value', formatValue(options.value));\n }\n element.wrap(createWrapper(options, element, that._isHorizontal)).hide();\n if (options.showButtons) {\n element.before(createButton(options, 'increase', that._isHorizontal, that._isRtl)).before(createButton(options, 'decrease', that._isHorizontal, that._isRtl));\n }\n element.before(createTrack(options, element));\n },\n _focus: function (e) {\n var that = this, target = e.target, val = that.value(), drag = that._drag;\n if (!drag) {\n if (target == that.wrapper.find(DRAG_HANDLE).eq(0)[0]) {\n drag = that._firstHandleDrag;\n that._activeHandle = 0;\n } else {\n drag = that._lastHandleDrag;\n that._activeHandle = 1;\n }\n val = val[that._activeHandle];\n }\n $(target).addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n that._activeHandleDrag = drag;\n drag.selectionStart = that.options.selectionStart;\n drag.selectionEnd = that.options.selectionEnd;\n drag._updateTooltip(val);\n }\n },\n _focusWithMouse: function (target) {\n target = $(target);\n var that = this, idx = target.is(DRAG_HANDLE) ? target.index() : 0;\n window.setTimeout(function () {\n that.wrapper.find(DRAG_HANDLE)[idx == 2 ? 1 : 0].focus();\n }, 1);\n that._setTooltipTimeout();\n },\n _blur: function (e) {\n var that = this, drag = that._activeHandleDrag;\n $(e.target).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n if (drag) {\n drag._removeTooltip();\n delete that._activeHandleDrag;\n delete that._activeHandle;\n }\n },\n _setTooltipTimeout: function () {\n var that = this;\n that._tooltipTimeout = window.setTimeout(function () {\n var drag = that._drag || that._activeHandleDrag;\n if (drag) {\n drag._removeTooltip();\n }\n }, 300);\n },\n _clearTooltipTimeout: function () {\n var that = this;\n window.clearTimeout(this._tooltipTimeout);\n var drag = that._drag || that._activeHandleDrag;\n if (drag && drag.tooltipDiv) {\n drag.tooltipDiv.stop(true, false).css('opacity', 1);\n }\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._form = form.on('reset', proxy(that._formResetHandler, that));\n }\n },\n min: function (value) {\n if (!value) {\n return this.options.min;\n }\n this.setOptions({ 'min': value });\n },\n max: function (value) {\n if (!value) {\n return this.options.max;\n }\n this.setOptions({ 'max': value });\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._sliderItemsInit();\n this._refresh();\n },\n destroy: function () {\n if (this._form) {\n this._form.off('reset', this._formResetHandler);\n }\n Widget.fn.destroy.call(this);\n }\n });\n function createWrapper(options, element, isHorizontal) {\n var orientationCssClass = isHorizontal ? ' k-slider-horizontal' : ' k-slider-vertical', style = options.style ? options.style : element.attr('style'), cssClasses = element.attr('class') ? ' ' + element.attr('class') : '', tickPlacementCssClass = '';\n if (options.tickPlacement == 'bottomRight') {\n tickPlacementCssClass = ' k-slider-bottomright';\n } else if (options.tickPlacement == 'topLeft') {\n tickPlacementCssClass = ' k-slider-topleft';\n }\n style = style ? ' style=\\'' + style + '\\'' : '';\n return '
              ' + '
              ';\n }\n function createButton(options, type, isHorizontal, isRtl) {\n var buttonCssClass = '';\n if (isHorizontal) {\n if (!isRtl && type == 'increase' || isRtl && type != 'increase') {\n buttonCssClass = 'k-i-arrow-60-right';\n } else {\n buttonCssClass = 'k-i-arrow-60-left';\n }\n } else {\n if (type == 'increase') {\n buttonCssClass = 'k-i-arrow-60-up';\n } else {\n buttonCssClass = 'k-i-arrow-60-down';\n }\n }\n return '' + '';\n }\n function createSliderItems(options, distance) {\n var result = '
                ', count = math.floor(round(distance / options.smallStep)) + 1, i;\n for (i = 0; i < count; i++) {\n result += '
              •  
              • ';\n }\n result += '
              ';\n return result;\n }\n function createTrack(options, element) {\n var dragHandleCount = element.is('input') ? 1 : 2, firstDragHandleTitle = dragHandleCount == 2 ? options.leftDragHandleTitle : options.dragHandleTitle;\n return '';\n }\n function step(stepValue) {\n return function (value) {\n return value + stepValue;\n };\n }\n function setValue(value) {\n return function () {\n return value;\n };\n }\n function formatValue(value) {\n return (value + '').replace('.', kendo.cultures.current.numberFormat['.']);\n }\n function calculatePrecision(value) {\n var number = value.toString();\n var precision = 0;\n number = number.split('.');\n if (number[1]) {\n precision = number[1].length;\n }\n precision = precision > 10 ? 10 : precision;\n return precision;\n }\n function round(value) {\n var precision, power;\n value = parseFloat(value, 10);\n precision = calculatePrecision(value);\n power = math.pow(10, precision || 0);\n return math.round(value * power) / power;\n }\n function parseAttr(element, name) {\n var value = parse(element.getAttribute(name));\n if (value === null) {\n value = undefined;\n }\n return value;\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function removeFraction(value) {\n return value * 10000;\n }\n var Slider = SliderBase.extend({\n init: function (element, options) {\n var that = this, dragHandle;\n element.type = 'text';\n options = extend({}, {\n value: parseAttr(element, 'value'),\n min: parseAttr(element, 'min'),\n max: parseAttr(element, 'max'),\n smallStep: parseAttr(element, 'step')\n }, options);\n element = $(element);\n if (options && options.enabled === undefined) {\n options.enabled = !element.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.value) || options.value === null) {\n options.value = options.min;\n element.prop('value', formatValue(options.min));\n }\n options.value = math.max(math.min(options.value, options.max), options.min);\n dragHandle = that.wrapper.find(DRAG_HANDLE);\n this._selection = new Slider.Selection(dragHandle, that, options);\n that._drag = new Slider.Drag(dragHandle, '', that, options);\n },\n options: {\n name: 'Slider',\n showButtons: true,\n increaseButtonTitle: 'Increase',\n decreaseButtonTitle: 'Decrease',\n dragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n value: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler, move;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), target = $(e.target);\n if (target.hasClass('k-draghandle')) {\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n that._update(that._getValueFromPosition(mousePosition, dragableArea));\n that._focusWithMouse(e.target);\n that._drag.dragstart(e);\n e.preventDefault();\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n that._drag._end();\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n move = proxy(function (sign) {\n var newVal = that._nextValueByIndex(that._valueIndex + sign * 1);\n that._setValueInRange(newVal);\n that._drag._updateTooltip(newVal);\n }, that);\n if (options.showButtons) {\n var mouseDownHandler = proxy(function (e, sign) {\n this._clearTooltipTimeout();\n if (e.which === 1 || support.touch && e.which === 0) {\n move(sign);\n this.timeout = setTimeout(proxy(function () {\n this.timer = setInterval(function () {\n move(sign);\n }, 60);\n }, this), 200);\n }\n }, that);\n that.wrapper.find('.k-button').on(MOUSE_UP, proxy(function (e) {\n this._clearTimer();\n that._focusWithMouse(e.target);\n }, that)).on(MOUSE_OVER, function (e) {\n $(e.currentTarget).addClass('k-state-hover');\n }).on('mouseout' + NS, proxy(function (e) {\n $(e.currentTarget).removeClass('k-state-hover');\n this._clearTimer();\n }, that)).eq(0).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, 1);\n }, that)).click(false).end().eq(1).on(MOUSE_DOWN, proxy(function (e) {\n mouseDownHandler(e, -1);\n }, that)).click(kendo.preventDefault);\n }\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, false).on(KEY_DOWN, proxy(this._keydown, that));\n options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n $(that.element).prop(DISABLED, DISABLED);\n that.wrapper.find('.k-button').off(MOUSE_DOWN).on(MOUSE_DOWN, function (e) {\n e.preventDefault();\n $(this).addClass('k-state-active');\n }).off(MOUSE_UP).on(MOUSE_UP, function (e) {\n e.preventDefault();\n $(this).removeClass('k-state-active');\n }).off('mouseleave' + NS).on('mouseleave' + NS, kendo.preventDefault).off(MOUSE_OVER).on(MOUSE_OVER, kendo.preventDefault);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _update: function (val) {\n var that = this, change = that.value() != val;\n that.value(val);\n if (change) {\n that.trigger(CHANGE, { value: that.options.value });\n }\n },\n value: function (value) {\n var that = this, options = that.options;\n value = round(value);\n if (isNaN(value)) {\n return options.value;\n }\n if (value >= options.min && value <= options.max) {\n if (options.value != value) {\n that.element.prop('value', formatValue(value));\n options.value = value;\n that._refreshAriaAttr(value);\n that._refresh();\n }\n }\n },\n _refresh: function () {\n this.trigger(MOVE_SELECTION, { value: this.options.value });\n },\n _refreshAriaAttr: function (value) {\n var that = this, drag = that._drag, formattedValue;\n if (drag && drag._tooltipDiv) {\n formattedValue = drag._tooltipDiv.text();\n } else {\n formattedValue = that._getFormattedValue(value, null);\n }\n this.wrapper.find(DRAG_HANDLE).attr('aria-valuenow', value).attr('aria-valuetext', formattedValue);\n },\n _clearTimer: function () {\n clearTimeout(this.timeout);\n clearInterval(this.timer);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n that._setValueInRange(that._keyMap[e.keyCode](that.options.value));\n that._drag._updateTooltip(that.value());\n e.preventDefault();\n }\n },\n _setValueInRange: function (val) {\n var that = this, options = that.options;\n val = round(val);\n if (isNaN(val)) {\n that._update(options.min);\n return;\n }\n val = math.max(math.min(val, options.max), options.min);\n that._update(val);\n },\n _nextValueByIndex: function (index) {\n var count = this._values.length;\n if (this._isRtl) {\n index = count - 1 - index;\n }\n return this._values[math.max(0, math.min(index, count - 1))];\n },\n _formResetHandler: function () {\n var that = this, min = that.options.min;\n setTimeout(function () {\n var value = that.element[0].value;\n that.value(value === '' || isNaN(value) ? min : value);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find('.k-button').off(NS).end().find(DRAG_HANDLE).off(NS).end().find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end();\n that._drag.draggable.destroy();\n that._drag._removeTooltip(true);\n }\n });\n Slider.Selection = function (dragHandle, that, options) {\n function moveSelection(val) {\n var selectionValue = val - options.min, index = that._valueIndex = math.ceil(round(selectionValue / options.smallStep)), selection = parseInt(that._pixelSteps[index], 10), selectionDiv = that._trackDiv.find('.k-slider-selection'), halfDragHanndle = parseInt(that._outerSize(dragHandle) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n selectionDiv[that._sizeFn](that._isRtl ? that._maxSelection - selection : selection);\n dragHandle.css(that._position, selection - halfDragHanndle - rtlCorrection);\n }\n moveSelection(options.value);\n that.bind([\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(parseFloat(e.value, 10));\n });\n that.bind(CHANGE, function (e) {\n moveSelection(parseFloat(e.sender.value(), 10));\n });\n };\n Slider.Drag = function (element, type, owner, options) {\n var that = this;\n that.owner = owner;\n that.options = options;\n that.element = element;\n that.type = type;\n that.draggable = new Draggable(element, {\n distance: 0,\n dragstart: proxy(that._dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n element.click(false);\n element.on('dragstart', function (e) {\n e.preventDefault();\n });\n };\n Slider.Drag.prototype = {\n dragstart: function (e) {\n this.owner._activeDragHandle = this;\n this.draggable.userEvents.cancel();\n this._dragstart(e);\n this.dragend();\n },\n _dragstart: function (e) {\n var that = this, owner = that.owner, options = that.options;\n if (!options.enabled) {\n e.preventDefault();\n return;\n }\n this.owner._activeDragHandle = this;\n owner.element.off(MOUSE_OVER);\n owner.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n that.element.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n $(document.documentElement).css('cursor', 'pointer');\n that.dragableArea = owner._getDraggableArea();\n that.step = math.max(options.smallStep * (owner._maxSelection / owner._distance()), 0);\n if (that.type) {\n that.selectionStart = options.selectionStart;\n that.selectionEnd = options.selectionEnd;\n owner._setZIndex(that.type);\n } else {\n that.oldVal = that.val = options.value;\n }\n that._removeTooltip(true);\n that._createTooltip();\n },\n _createTooltip: function () {\n var that = this, owner = that.owner, tooltip = that.options.tooltip, html = '', wnd = $(window), tooltipTemplate, colloutCssClass;\n if (!tooltip.enabled) {\n return;\n }\n if (tooltip.template) {\n tooltipTemplate = that.tooltipTemplate = kendo.template(tooltip.template);\n }\n $('.k-slider-tooltip').remove();\n that.tooltipDiv = $('
              ').appendTo(document.body);\n html = owner._getFormattedValue(that.val || owner.value(), that);\n if (!that.type) {\n colloutCssClass = 'k-callout-' + (owner._isHorizontal ? 's' : 'e');\n that.tooltipInnerDiv = '
              ';\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that._scrollOffset = {\n top: wnd.scrollTop(),\n left: wnd.scrollLeft()\n };\n that.moveTooltip();\n },\n drag: function (e) {\n var that = this, owner = that.owner, x = e.x.location, y = e.y.location, startPoint = that.dragableArea.startPoint, endPoint = that.dragableArea.endPoint, slideParams;\n e.preventDefault();\n if (owner._isHorizontal) {\n if (owner._isRtl) {\n that.val = that.constrainValue(x, startPoint, endPoint, x < endPoint);\n } else {\n that.val = that.constrainValue(x, startPoint, endPoint, x >= endPoint);\n }\n } else {\n that.val = that.constrainValue(y, endPoint, startPoint, y <= endPoint);\n }\n if (that.oldVal != that.val) {\n that.oldVal = that.val;\n if (that.type) {\n if (that.type == 'firstHandle') {\n if (that.val < that.selectionEnd) {\n that.selectionStart = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n } else {\n if (that.val > that.selectionStart) {\n that.selectionEnd = that.val;\n } else {\n that.selectionStart = that.selectionEnd = that.val;\n }\n }\n slideParams = {\n values: [\n that.selectionStart,\n that.selectionEnd\n ],\n value: [\n that.selectionStart,\n that.selectionEnd\n ]\n };\n } else {\n slideParams = { value: that.val };\n }\n owner.trigger(SLIDE, slideParams);\n }\n that._updateTooltip(that.val);\n },\n _updateTooltip: function (val) {\n var that = this, options = that.options, tooltip = options.tooltip, html = '';\n if (!tooltip.enabled) {\n return;\n }\n if (!that.tooltipDiv) {\n that._createTooltip();\n }\n html = that.owner._getFormattedValue(round(val), that);\n if (!that.type) {\n html += that.tooltipInnerDiv;\n }\n that.tooltipDiv.html(html);\n that.moveTooltip();\n },\n dragcancel: function () {\n this.owner._refresh();\n $(document.documentElement).css('cursor', '');\n return this._end();\n },\n dragend: function () {\n var that = this, owner = that.owner;\n $(document.documentElement).css('cursor', '');\n if (that.type) {\n owner._update(that.selectionStart, that.selectionEnd);\n } else {\n owner._update(that.val);\n that.draggable.userEvents._disposeAll();\n }\n that.draggable.userEvents.cancel();\n return that._end();\n },\n _end: function () {\n var that = this, owner = that.owner;\n owner._focusWithMouse(that.element);\n owner.element.on(MOUSE_OVER);\n return false;\n },\n _removeTooltip: function (noAnimation) {\n var that = this, owner = that.owner;\n if (that.tooltipDiv && owner.options.tooltip.enabled && owner.options.enabled) {\n if (noAnimation) {\n that.tooltipDiv.remove();\n that.tooltipDiv = null;\n } else {\n that.tooltipDiv.fadeOut('slow', function () {\n $(this).remove();\n that.tooltipDiv = null;\n });\n }\n }\n },\n moveTooltip: function () {\n var that = this, owner = that.owner, top = 0, left = 0, element = that.element, offset = kendo.getOffset(element), margin = 8, viewport = $(window), callout = that.tooltipDiv.find('.k-callout'), width = outerWidth(that.tooltipDiv), height = outerHeight(that.tooltipDiv), dragHandles, sdhOffset, diff, anchorSize;\n if (that.type) {\n dragHandles = owner.wrapper.find(DRAG_HANDLE);\n offset = kendo.getOffset(dragHandles.eq(0));\n sdhOffset = kendo.getOffset(dragHandles.eq(1));\n if (owner._isHorizontal) {\n top = sdhOffset.top;\n left = offset.left + (sdhOffset.left - offset.left) / 2;\n } else {\n top = offset.top + (sdhOffset.top - offset.top) / 2;\n left = sdhOffset.left;\n }\n anchorSize = outerWidth(dragHandles.eq(0)) + 2 * margin;\n } else {\n top = offset.top;\n left = offset.left;\n anchorSize = outerWidth(element) + 2 * margin;\n }\n if (owner._isHorizontal) {\n left -= parseInt((width - owner._outerSize(element)) / 2, 10);\n top -= height + margin + (callout.length ? callout.height() : 0);\n } else {\n top -= parseInt((height - owner._outerSize(element)) / 2, 10);\n left -= width + margin + (callout.length ? callout.width() : 0);\n }\n if (owner._isHorizontal) {\n diff = that._flip(top, height, anchorSize, outerHeight(viewport) + that._scrollOffset.top);\n top += diff;\n left += that._fit(left, width, outerWidth(viewport) + that._scrollOffset.left);\n } else {\n diff = that._flip(left, width, anchorSize, outerWidth(viewport) + that._scrollOffset.left);\n top += that._fit(top, height, outerHeight(viewport) + that._scrollOffset.top);\n left += diff;\n }\n if (diff > 0 && callout) {\n callout.removeClass();\n callout.addClass('k-callout k-callout-' + (owner._isHorizontal ? 'n' : 'w'));\n }\n that.tooltipDiv.css({\n top: top,\n left: left\n });\n },\n _fit: function (position, size, viewPortEnd) {\n var output = 0;\n if (position + size > viewPortEnd) {\n output = viewPortEnd - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortEnd) {\n var output = 0;\n if (offset + size > viewPortEnd) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n return output;\n },\n constrainValue: function (position, min, max, maxOverflow) {\n var that = this, val = 0;\n if (min < position && position < max) {\n val = that.owner._getValueFromPosition(position, that.dragableArea);\n } else {\n if (maxOverflow) {\n val = that.options.max;\n } else {\n val = that.options.min;\n }\n }\n return val;\n }\n };\n kendo.ui.plugin(Slider);\n var RangeSlider = SliderBase.extend({\n init: function (element, options) {\n var that = this, inputs = $(element).find('input'), firstInput = inputs.eq(0)[0], secondInput = inputs.eq(1)[0];\n firstInput.type = 'text';\n secondInput.type = 'text';\n if (options && options.showButtons) {\n if (window.console) {\n window.console.warn('showbuttons option is not supported for the range slider, ignoring');\n }\n options.showButtons = false;\n }\n options = extend({}, {\n selectionStart: parseAttr(firstInput, 'value'),\n min: parseAttr(firstInput, 'min'),\n max: parseAttr(firstInput, 'max'),\n smallStep: parseAttr(firstInput, 'step')\n }, {\n selectionEnd: parseAttr(secondInput, 'value'),\n min: parseAttr(secondInput, 'min'),\n max: parseAttr(secondInput, 'max'),\n smallStep: parseAttr(secondInput, 'step')\n }, options);\n if (options && options.enabled === undefined) {\n options.enabled = !inputs.is('[disabled]');\n }\n SliderBase.fn.init.call(that, element, options);\n options = that.options;\n if (!defined(options.selectionStart) || options.selectionStart === null) {\n options.selectionStart = options.min;\n inputs.eq(0).prop('value', formatValue(options.min));\n }\n if (!defined(options.selectionEnd) || options.selectionEnd === null) {\n options.selectionEnd = options.max;\n inputs.eq(1).prop('value', formatValue(options.max));\n }\n var dragHandles = that.wrapper.find(DRAG_HANDLE);\n this._selection = new RangeSlider.Selection(dragHandles, that, options);\n that._firstHandleDrag = new Slider.Drag(dragHandles.eq(0), 'firstHandle', that, options);\n that._lastHandleDrag = new Slider.Drag(dragHandles.eq(1), 'lastHandle', that, options);\n },\n options: {\n name: 'RangeSlider',\n leftDragHandleTitle: 'drag',\n rightDragHandleTitle: 'drag',\n tooltip: { format: '{0:#,#.##}' },\n selectionStart: null,\n selectionEnd: null\n },\n enable: function (enable) {\n var that = this, options = that.options, clickHandler;\n that.disable();\n if (enable === false) {\n return;\n }\n that.wrapper.removeClass(STATE_DISABLED).addClass(STATE_DEFAULT);\n that.wrapper.find('input').removeAttr(DISABLED);\n clickHandler = function (e) {\n var touch = getTouches(e)[0];\n if (!touch) {\n return;\n }\n var mousePosition = that._isHorizontal ? touch.location.pageX : touch.location.pageY, dragableArea = that._getDraggableArea(), val = that._getValueFromPosition(mousePosition, dragableArea), target = $(e.target), from, to, drag;\n if (target.hasClass('k-draghandle')) {\n that.wrapper.find('.' + STATE_FOCUSED).removeClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n target.addClass(STATE_FOCUSED + ' ' + STATE_SELECTED);\n return;\n }\n if (val < options.selectionStart) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else if (val > that.selectionEnd) {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n } else {\n if (val - options.selectionStart <= options.selectionEnd - val) {\n from = val;\n to = options.selectionEnd;\n drag = that._firstHandleDrag;\n } else {\n from = options.selectionStart;\n to = val;\n drag = that._lastHandleDrag;\n }\n }\n drag.dragstart(e);\n that._setValueInRange(from, to);\n that._focusWithMouse(drag.element);\n };\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).on(TRACK_MOUSE_DOWN, clickHandler).end().on(TRACK_MOUSE_DOWN, function () {\n $(document.documentElement).one('selectstart', kendo.preventDefault);\n }).on(TRACK_MOUSE_UP, function () {\n if (that._activeDragHandle) {\n that._activeDragHandle._end();\n }\n });\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, 0).on(MOUSE_UP, function () {\n that._setTooltipTimeout();\n }).on(CLICK, function (e) {\n that._focusWithMouse(e.target);\n e.preventDefault();\n }).on(FOCUS, proxy(that._focus, that)).on(BLUR, proxy(that._blur, that));\n that.wrapper.find(DRAG_HANDLE).off(KEY_DOWN, kendo.preventDefault).eq(0).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'firstHandle');\n }, that)).end().eq(1).on(KEY_DOWN, proxy(function (e) {\n this._keydown(e, 'lastHandle');\n }, that));\n that.options.enabled = true;\n },\n disable: function () {\n var that = this;\n that.wrapper.removeClass(STATE_DEFAULT).addClass(STATE_DISABLED);\n that.wrapper.find('input').prop(DISABLED, DISABLED);\n that.wrapper.find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(TRACK_MOUSE_DOWN).off(TRACK_MOUSE_UP);\n that.wrapper.find(DRAG_HANDLE).attr(TABINDEX, -1).off(MOUSE_UP).off(KEY_DOWN).off(CLICK).off(FOCUS).off(BLUR);\n that.options.enabled = false;\n },\n _keydown: function (e, handle) {\n var that = this, selectionStartValue = that.options.selectionStart, selectionEndValue = that.options.selectionEnd, dragSelectionStart, dragSelectionEnd, activeHandleDrag;\n if (e.keyCode in that._keyMap) {\n that._clearTooltipTimeout();\n if (handle == 'firstHandle') {\n activeHandleDrag = that._activeHandleDrag = that._firstHandleDrag;\n selectionStartValue = that._keyMap[e.keyCode](selectionStartValue);\n if (selectionStartValue > selectionEndValue) {\n selectionEndValue = selectionStartValue;\n }\n } else {\n activeHandleDrag = that._activeHandleDrag = that._lastHandleDrag;\n selectionEndValue = that._keyMap[e.keyCode](selectionEndValue);\n if (selectionStartValue > selectionEndValue) {\n selectionStartValue = selectionEndValue;\n }\n }\n that._setValueInRange(round(selectionStartValue), round(selectionEndValue));\n dragSelectionStart = Math.max(selectionStartValue, that.options.selectionStart);\n dragSelectionEnd = Math.min(selectionEndValue, that.options.selectionEnd);\n activeHandleDrag.selectionEnd = Math.max(dragSelectionEnd, that.options.selectionStart);\n activeHandleDrag.selectionStart = Math.min(dragSelectionStart, that.options.selectionEnd);\n activeHandleDrag._updateTooltip(that.value()[that._activeHandle]);\n e.preventDefault();\n }\n },\n _update: function (selectionStart, selectionEnd) {\n var that = this, values = that.value();\n var change = values[0] != selectionStart || values[1] != selectionEnd;\n that.value([\n selectionStart,\n selectionEnd\n ]);\n if (change) {\n that.trigger(CHANGE, {\n values: [\n selectionStart,\n selectionEnd\n ],\n value: [\n selectionStart,\n selectionEnd\n ]\n });\n }\n },\n value: function (value) {\n if (value && value.length) {\n return this._value(value[0], value[1]);\n } else {\n return this._value();\n }\n },\n _value: function (start, end) {\n var that = this, options = that.options, selectionStart = options.selectionStart, selectionEnd = options.selectionEnd;\n if (isNaN(start) && isNaN(end)) {\n return [\n selectionStart,\n selectionEnd\n ];\n } else {\n start = round(start);\n end = round(end);\n }\n if (start >= options.min && start <= options.max && end >= options.min && end <= options.max && start <= end) {\n if (selectionStart != start || selectionEnd != end) {\n that.element.find('input').eq(0).prop('value', formatValue(start)).end().eq(1).prop('value', formatValue(end));\n options.selectionStart = start;\n options.selectionEnd = end;\n that._refresh();\n that._refreshAriaAttr(start, end);\n }\n }\n },\n values: function (start, end) {\n if (isArray(start)) {\n return this._value(start[0], start[1]);\n } else {\n return this._value(start, end);\n }\n },\n _refresh: function () {\n var that = this, options = that.options;\n that.trigger(MOVE_SELECTION, {\n values: [\n options.selectionStart,\n options.selectionEnd\n ],\n value: [\n options.selectionStart,\n options.selectionEnd\n ]\n });\n if (options.selectionStart == options.max && options.selectionEnd == options.max) {\n that._setZIndex('firstHandle');\n }\n },\n _refreshAriaAttr: function (start, end) {\n var that = this, dragHandles = that.wrapper.find(DRAG_HANDLE), drag = that._activeHandleDrag, formattedValue;\n formattedValue = that._getFormattedValue([\n start,\n end\n ], drag);\n dragHandles.eq(0).attr('aria-valuenow', start);\n dragHandles.eq(1).attr('aria-valuenow', end);\n dragHandles.attr('aria-valuetext', formattedValue);\n },\n _setValueInRange: function (selectionStart, selectionEnd) {\n var options = this.options;\n selectionStart = math.max(math.min(selectionStart, options.max), options.min);\n selectionEnd = math.max(math.min(selectionEnd, options.max), options.min);\n if (selectionStart == options.max && selectionEnd == options.max) {\n this._setZIndex('firstHandle');\n }\n this._update(math.min(selectionStart, selectionEnd), math.max(selectionStart, selectionEnd));\n },\n _setZIndex: function (type) {\n this.wrapper.find(DRAG_HANDLE).each(function (index) {\n $(this).css('z-index', type == 'firstHandle' ? 1 - index : index);\n });\n },\n _formResetHandler: function () {\n var that = this, options = that.options;\n setTimeout(function () {\n var inputs = that.element.find('input');\n var start = inputs[0].value;\n var end = inputs[1].value;\n that.values(start === '' || isNaN(start) ? options.min : start, end === '' || isNaN(end) ? options.max : end);\n });\n },\n destroy: function () {\n var that = this;\n SliderBase.fn.destroy.call(that);\n that.wrapper.off(NS).find(TICK_SELECTOR + ', ' + TRACK_SELECTOR).off(NS).end().find(DRAG_HANDLE).off(NS);\n that._firstHandleDrag.draggable.destroy();\n that._lastHandleDrag.draggable.destroy();\n }\n });\n RangeSlider.Selection = function (dragHandles, that, options) {\n function moveSelection(value) {\n value = value || [];\n var selectionStartValue = value[0] - options.min, selectionEndValue = value[1] - options.min, selectionStartIndex = math.ceil(round(selectionStartValue / options.smallStep)), selectionEndIndex = math.ceil(round(selectionEndValue / options.smallStep)), selectionStart = that._pixelSteps[selectionStartIndex], selectionEnd = that._pixelSteps[selectionEndIndex], halfHandle = parseInt(that._outerSize(dragHandles.eq(0)) / 2, 10), rtlCorrection = that._isRtl ? 2 : 0;\n dragHandles.eq(0).css(that._position, selectionStart - halfHandle - rtlCorrection).end().eq(1).css(that._position, selectionEnd - halfHandle - rtlCorrection);\n makeSelection(selectionStart, selectionEnd);\n }\n function makeSelection(selectionStart, selectionEnd) {\n var selection, selectionPosition, selectionDiv = that._trackDiv.find('.k-slider-selection');\n selection = math.abs(selectionStart - selectionEnd);\n selectionDiv[that._sizeFn](selection);\n if (that._isRtl) {\n selectionPosition = math.max(selectionStart, selectionEnd);\n selectionDiv.css('right', that._maxSelection - selectionPosition - 1);\n } else {\n selectionPosition = math.min(selectionStart, selectionEnd);\n selectionDiv.css(that._position, selectionPosition - 1);\n }\n }\n moveSelection(that.value());\n that.bind([\n CHANGE,\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(e.values);\n });\n };\n kendo.ui.plugin(RangeSlider);\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.colorpicker', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.popup',\n 'kendo.slider',\n 'kendo.userevents',\n 'kendo.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'colorpicker',\n name: 'Color tools',\n category: 'web',\n description: 'Color selection widgets',\n depends: [\n 'core',\n 'color',\n 'popup',\n 'slider',\n 'userevents',\n 'button'\n ]\n };\n (function ($, parseInt, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parseColor = kendo.parseColor, Color = kendo.Color, KEYS = kendo.keys, BACKGROUNDCOLOR = 'background-color', ITEMSELECTEDCLASS = 'k-state-selected', SIMPLEPALETTE = '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7', WEBPALETTE = 'FFFFFF,FFCCFF,FF99FF,FF66FF,FF33FF,FF00FF,CCFFFF,CCCCFF,CC99FF,CC66FF,CC33FF,CC00FF,99FFFF,99CCFF,9999FF,9966FF,9933FF,9900FF,FFFFCC,FFCCCC,FF99CC,FF66CC,FF33CC,FF00CC,CCFFCC,CCCCCC,CC99CC,CC66CC,CC33CC,CC00CC,99FFCC,99CCCC,9999CC,9966CC,9933CC,9900CC,FFFF99,FFCC99,FF9999,FF6699,FF3399,FF0099,CCFF99,CCCC99,CC9999,CC6699,CC3399,CC0099,99FF99,99CC99,999999,996699,993399,990099,FFFF66,FFCC66,FF9966,FF6666,FF3366,FF0066,CCFF66,CCCC66,CC9966,CC6666,CC3366,CC0066,99FF66,99CC66,999966,996666,993366,990066,FFFF33,FFCC33,FF9933,FF6633,FF3333,FF0033,CCFF33,CCCC33,CC9933,CC6633,CC3333,CC0033,99FF33,99CC33,999933,996633,993333,990033,FFFF00,FFCC00,FF9900,FF6600,FF3300,FF0000,CCFF00,CCCC00,CC9900,CC6600,CC3300,CC0000,99FF00,99CC00,999900,996600,993300,990000,66FFFF,66CCFF,6699FF,6666FF,6633FF,6600FF,33FFFF,33CCFF,3399FF,3366FF,3333FF,3300FF,00FFFF,00CCFF,0099FF,0066FF,0033FF,0000FF,66FFCC,66CCCC,6699CC,6666CC,6633CC,6600CC,33FFCC,33CCCC,3399CC,3366CC,3333CC,3300CC,00FFCC,00CCCC,0099CC,0066CC,0033CC,0000CC,66FF99,66CC99,669999,666699,663399,660099,33FF99,33CC99,339999,336699,333399,330099,00FF99,00CC99,009999,006699,003399,000099,66FF66,66CC66,669966,666666,663366,660066,33FF66,33CC66,339966,336666,333366,330066,00FF66,00CC66,009966,006666,003366,000066,66FF33,66CC33,669933,666633,663333,660033,33FF33,33CC33,339933,336633,333333,330033,00FF33,00CC33,009933,006633,003333,000033,66FF00,66CC00,669900,666600,663300,660000,33FF00,33CC00,339900,336600,333300,330000,00FF00,00CC00,009900,006600,003300,000000', WHITE = '#ffffff', MESSAGES = {\n apply: 'Apply',\n cancel: 'Cancel',\n noColor: 'no color',\n clearColor: 'Clear color',\n previewInput: 'Color Hexadecimal Code'\n }, NS = '.kendoColorTools', CLICK_NS = 'click' + NS, KEYDOWN_NS = 'keydown' + NS, browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9;\n var ColorSelector = Widget.extend({\n init: function (element, options) {\n var that = this, ariaId;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._value = options.value = parseColor(options.value);\n that._tabIndex = element.attr('tabIndex') || 0;\n ariaId = that._ariaId = options.ariaId;\n if (ariaId) {\n element.attr('aria-labelledby', ariaId);\n }\n if (options._standalone) {\n that._triggerSelect = that._triggerChange;\n }\n },\n options: {\n name: 'ColorSelector',\n value: null,\n _standalone: true\n },\n events: [\n 'change',\n 'select',\n 'cancel'\n ],\n color: function (value) {\n if (value !== undefined) {\n this._value = parseColor(value);\n this._updateUI(this._value);\n }\n return this._value;\n },\n value: function (color) {\n color = this.color(color);\n if (color) {\n if (this.options.opacity) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n }\n return color || null;\n },\n enable: function (enable) {\n if (arguments.length === 0) {\n enable = true;\n }\n $('.k-disabled-overlay', this.wrapper).remove();\n if (!enable) {\n this.wrapper.append('
              ');\n }\n this._onEnable(enable);\n },\n _select: function (color, nohooks) {\n var prev = this._value;\n color = this.color(color);\n if (!nohooks) {\n this.element.trigger('change');\n if (!color.equals(prev)) {\n this.trigger('change', { value: this.value() });\n } else if (!this._standalone) {\n this.trigger('cancel');\n }\n }\n },\n _triggerSelect: function (color) {\n triggerEvent(this, 'select', color);\n },\n _triggerChange: function (color) {\n triggerEvent(this, 'change', color);\n },\n destroy: function () {\n if (this.element) {\n this.element.off(NS);\n }\n if (this.wrapper) {\n this.wrapper.off(NS).find('*').off(NS);\n }\n this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n _updateUI: $.noop,\n _selectOnHide: function () {\n return null;\n },\n _cancel: function () {\n this.trigger('cancel');\n }\n });\n function triggerEvent(self, type, color) {\n color = parseColor(color);\n if (color && !color.equals(self.color())) {\n if (type == 'change') {\n self._value = color;\n }\n if (color.a != 1) {\n color = color.toCssRgba();\n } else {\n color = color.toCss();\n }\n self.trigger(type, { value: color });\n }\n }\n var ColorPalette = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n var colors = options.palette;\n if (colors == 'websafe') {\n colors = WEBPALETTE;\n options.columns = 18;\n } else if (colors == 'basic') {\n colors = SIMPLEPALETTE;\n }\n if (typeof colors == 'string') {\n colors = colors.split(',');\n }\n if ($.isArray(colors)) {\n colors = $.map(colors, function (x) {\n return parseColor(x);\n });\n }\n that._selectedID = (options.ariaId || kendo.guid()) + '_selected';\n element.addClass('k-widget k-colorpalette').attr('role', 'grid').attr('aria-readonly', 'true').append($(that._template({\n colors: colors,\n columns: options.columns,\n tileSize: options.tileSize,\n value: that._value,\n id: options.ariaId\n }))).on(CLICK_NS, '.k-item', function (ev) {\n that._select($(ev.currentTarget).css(BACKGROUNDCOLOR));\n }).attr('tabIndex', that._tabIndex).on(KEYDOWN_NS, bind(that._keydown, that));\n var tileSize = options.tileSize, width, height;\n if (tileSize) {\n if (/number|string/.test(typeof tileSize)) {\n width = height = parseFloat(tileSize);\n } else if (typeof tileSize == 'object') {\n width = parseFloat(tileSize.width);\n height = parseFloat(tileSize.height);\n } else {\n throw new Error('Unsupported value for the \\'tileSize\\' argument');\n }\n element.find('.k-item').css({\n width: width,\n height: height\n });\n }\n },\n focus: function () {\n if (this.wrapper && !this.wrapper.is('[unselectable=\\'on\\']')) {\n this.wrapper.focus();\n }\n },\n options: {\n name: 'ColorPalette',\n columns: 10,\n tileSize: null,\n palette: 'basic'\n },\n _onEnable: function (enable) {\n if (enable) {\n this.wrapper.attr('tabIndex', this._tabIndex);\n } else {\n this.wrapper.removeAttr('tabIndex');\n }\n },\n _keydown: function (e) {\n var selected, wrapper = this.wrapper, items = wrapper.find('.k-item'), current = items.filter('.' + ITEMSELECTEDCLASS).get(0), keyCode = e.keyCode;\n if (keyCode == KEYS.LEFT) {\n selected = relative(items, current, -1);\n } else if (keyCode == KEYS.RIGHT) {\n selected = relative(items, current, 1);\n } else if (keyCode == KEYS.DOWN) {\n selected = relative(items, current, this.options.columns);\n } else if (keyCode == KEYS.UP) {\n selected = relative(items, current, -this.options.columns);\n } else if (keyCode == KEYS.ENTER) {\n preventDefault(e);\n if (current) {\n this._select($(current).css(BACKGROUNDCOLOR));\n }\n } else if (keyCode == KEYS.ESC) {\n this._cancel();\n }\n if (selected) {\n preventDefault(e);\n this._current(selected);\n try {\n var color = parseColor(selected.css(BACKGROUNDCOLOR));\n this._triggerSelect(color);\n } catch (ex) {\n }\n }\n },\n _current: function (item) {\n this.wrapper.find('.' + ITEMSELECTEDCLASS).removeClass(ITEMSELECTEDCLASS).attr('aria-selected', false).removeAttr('id');\n $(item).addClass(ITEMSELECTEDCLASS).attr('aria-selected', true).attr('id', this._selectedID);\n this.element.removeAttr('aria-activedescendant').attr('aria-activedescendant', this._selectedID);\n },\n _updateUI: function (color) {\n var item = null;\n this.wrapper.find('.k-item').each(function () {\n var c = parseColor($(this).css(BACKGROUNDCOLOR));\n if (c && c.equals(color)) {\n item = this;\n return false;\n }\n });\n this._current(item);\n },\n _template: kendo.template('' + '# for (var i = 0; i < colors.length; ++i) { #' + '# var selected = colors[i].equals(value); #' + '# if (i && i % columns == 0) { # # } #' + '' + '# } #' + '
              ')\n });\n var FlatColorPicker = ColorSelector.extend({\n init: function (element, options) {\n var that = this;\n ColorSelector.fn.init.call(that, element, options);\n options = that.options;\n options.messages = options.options ? $.extend(that.options.messages, options.options.messages) : that.options.messages;\n element = that.element;\n that.wrapper = element.addClass('k-widget k-flatcolorpicker').append(that._template(options));\n that._hueElements = $('.k-hsv-rectangle, .k-transparency-slider .k-slider-track', element);\n that._selectedColor = $('.k-selected-color-display', element);\n that._colorAsText = $('input.k-color-value', element);\n that._sliders();\n that._hsvArea();\n that._updateUI(that._value || parseColor('#f00'));\n element.find('input.k-color-value').on(KEYDOWN_NS, function (ev) {\n var input = this;\n if (ev.keyCode == KEYS.ENTER) {\n try {\n var color = parseColor(input.value);\n var val = that.color();\n that._select(color, color.equals(val));\n } catch (ex) {\n $(input).addClass('k-state-error');\n }\n } else if (that.options.autoupdate) {\n setTimeout(function () {\n var color = parseColor(input.value, true);\n if (color) {\n that._updateUI(color, true);\n }\n }, 10);\n }\n }).end().on(CLICK_NS, '.k-controls button.apply', function () {\n if (that.options._clearedColor) {\n that.trigger('change');\n } else {\n that._select(that._getHSV());\n }\n }).on(CLICK_NS, '.k-controls button.cancel', function () {\n that._updateUI(that.color());\n that._cancel();\n });\n if (isIE8) {\n that._applyIEFilter();\n }\n },\n destroy: function () {\n this._hueSlider.destroy();\n if (this._opacitySlider) {\n this._opacitySlider.destroy();\n }\n this._hueSlider = this._opacitySlider = this._hsvRect = this._hsvHandle = this._hueElements = this._selectedColor = this._colorAsText = null;\n ColorSelector.fn.destroy.call(this);\n },\n options: {\n name: 'FlatColorPicker',\n opacity: false,\n buttons: false,\n input: true,\n preview: true,\n clearButton: false,\n autoupdate: true,\n messages: MESSAGES\n },\n _applyIEFilter: function () {\n var track = this.element.find('.k-hue-slider .k-slider-track')[0], url = track.currentStyle.backgroundImage;\n url = url.replace(/^url\\([\\'\\\"]?|[\\'\\\"]?\\)$/g, '');\n track.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'' + url + '\\', sizingMethod=\\'scale\\')';\n },\n _sliders: function () {\n var that = this, element = that.element, hueSlider = element.find('.k-hue-slider'), opacitySlider = element.find('.k-transparency-slider');\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n hueSlider.attr('aria-label', 'hue saturation');\n that._hueSlider = hueSlider.kendoSlider({\n min: 0,\n max: 360,\n tickPlacement: 'none',\n showButtons: false,\n slide: hueChange,\n change: hueChange\n }).data('kendoSlider');\n function opacityChange(e) {\n that._updateUI(that._getHSV(null, null, null, e.value / 100));\n }\n opacitySlider.attr('aria-label', 'opacity');\n that._opacitySlider = opacitySlider.kendoSlider({\n min: 0,\n max: 100,\n tickPlacement: 'none',\n showButtons: false,\n slide: opacityChange,\n change: opacityChange\n }).data('kendoSlider');\n },\n _hsvArea: function () {\n var that = this, element = that.element, hsvRect = element.find('.k-hsv-rectangle'), hsvHandle = hsvRect.find('.k-draghandle').attr('tabIndex', 0).on(KEYDOWN_NS, bind(that._keydown, that));\n function update(x, y) {\n var offset = this.offset, dx = x - offset.left, dy = y - offset.top, rw = this.width, rh = this.height;\n dx = dx < 0 ? 0 : dx > rw ? rw : dx;\n dy = dy < 0 ? 0 : dy > rh ? rh : dy;\n that._svChange(dx / rw, 1 - dy / rh);\n }\n that._hsvEvents = new kendo.UserEvents(hsvRect, {\n global: true,\n press: function (e) {\n this.offset = kendo.getOffset(hsvRect);\n this.width = hsvRect.width();\n this.height = hsvRect.height();\n hsvHandle.focus();\n update.call(this, e.x.location, e.y.location);\n },\n start: function () {\n hsvRect.addClass('k-dragging');\n hsvHandle.focus();\n },\n move: function (e) {\n e.preventDefault();\n update.call(this, e.x.location, e.y.location);\n },\n end: function () {\n hsvRect.removeClass('k-dragging');\n }\n });\n that._hsvRect = hsvRect;\n that._hsvHandle = hsvHandle;\n },\n _onEnable: function (enable) {\n this._hueSlider.enable(enable);\n if (this._opacitySlider) {\n this._opacitySlider.enable(enable);\n }\n this.wrapper.find('input').attr('disabled', !enable);\n var handle = this._hsvRect.find('.k-draghandle');\n if (enable) {\n handle.attr('tabIndex', this._tabIndex);\n } else {\n handle.removeAttr('tabIndex');\n }\n },\n _keydown: function (ev) {\n var that = this;\n function move(prop, d) {\n var c = that._getHSV();\n c[prop] += d * (ev.shiftKey ? 0.01 : 0.05);\n if (c[prop] < 0) {\n c[prop] = 0;\n }\n if (c[prop] > 1) {\n c[prop] = 1;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n function hue(d) {\n var c = that._getHSV();\n c.h += d * (ev.shiftKey ? 1 : 5);\n if (c.h < 0) {\n c.h = 0;\n }\n if (c.h > 359) {\n c.h = 359;\n }\n that._updateUI(c);\n preventDefault(ev);\n }\n switch (ev.keyCode) {\n case KEYS.LEFT:\n if (ev.ctrlKey) {\n hue(-1);\n } else {\n move('s', -1);\n }\n break;\n case KEYS.RIGHT:\n if (ev.ctrlKey) {\n hue(1);\n } else {\n move('s', 1);\n }\n break;\n case KEYS.UP:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', 1);\n break;\n case KEYS.DOWN:\n move(ev.ctrlKey && that._opacitySlider ? 'a' : 'v', -1);\n break;\n case KEYS.ENTER:\n that._select(that._getHSV());\n break;\n case KEYS.F2:\n that.wrapper.find('input.k-color-value').focus().select();\n break;\n case KEYS.ESC:\n that._cancel();\n break;\n }\n },\n focus: function () {\n this._hsvHandle.focus();\n },\n _getHSV: function (h, s, v, a) {\n var rect = this._hsvRect, width = rect.width(), height = rect.height(), handlePosition = this._hsvHandle.position();\n if (h == null) {\n h = this._hueSlider.value();\n }\n if (s == null) {\n s = handlePosition.left / width;\n }\n if (v == null) {\n v = 1 - handlePosition.top / height;\n }\n if (a == null) {\n a = this._opacitySlider ? this._opacitySlider.value() / 100 : 1;\n }\n return Color.fromHSV(h, s, v, a);\n },\n _svChange: function (s, v) {\n var color = this._getHSV(null, s, v, null);\n this._updateUI(color);\n },\n _updateUI: function (color, dontChangeInput) {\n var that = this, rect = that._hsvRect;\n if (!color) {\n return;\n }\n this._colorAsText.attr('title', that.options.messages.previewInput);\n this._colorAsText.removeClass('k-state-error');\n that._selectedColor.css(BACKGROUNDCOLOR, color.toDisplay());\n if (!dontChangeInput) {\n that._colorAsText.val(that._opacitySlider ? color.toCssRgba() : color.toCss());\n }\n that._triggerSelect(color);\n color = color.toHSV();\n that._hsvHandle.css({\n left: color.s * rect.width() + 'px',\n top: (1 - color.v) * rect.height() + 'px'\n });\n that._hueElements.css(BACKGROUNDCOLOR, Color.fromHSV(color.h, 1, 1, 1).toCss());\n that._hueSlider.value(color.h);\n if (that._opacitySlider) {\n that._opacitySlider.value(100 * color.a);\n }\n },\n _selectOnHide: function () {\n return this.options.buttons ? null : this._getHSV();\n },\n _template: kendo.template('# if (preview) { #' + '
              ' + '# if (clearButton && !_standalone) { #' + '' + '# } #' + '
              ' + '# } #' + '# if (clearButton && !_standalone && !preview) { #' + '
              #: messages.clearColor #
              ' + '# } #' + '
              ' + '' + '# if (opacity) { #' + '' + '# } #' + '# if (buttons) { #' + '
              ' + '# } #')\n });\n function relative(array, element, delta) {\n array = Array.prototype.slice.call(array);\n var n = array.length;\n var pos = array.indexOf(element);\n if (pos < 0) {\n return delta < 0 ? array[n - 1] : array[0];\n }\n pos += delta;\n if (pos < 0) {\n pos += n;\n } else {\n pos %= n;\n }\n return array[pos];\n }\n var ColorPicker = 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 var value = element.attr('value') || element.val();\n if (value) {\n value = parseColor(value, true);\n } else {\n value = parseColor(options.value, true);\n }\n that._value = options.value = value;\n var content = that.wrapper = $(that._template(options));\n element.hide().after(content);\n if (element.is('input')) {\n element.appendTo(content);\n var label = element.closest('label');\n var id = element.attr('id');\n if (id) {\n label = label.add('label[for=\"' + id + '\"]');\n }\n label.click(function (ev) {\n that.open();\n ev.preventDefault();\n });\n }\n that._tabIndex = element.attr('tabIndex') || 0;\n that.enable(!element.attr('disabled'));\n var accesskey = element.attr('accesskey');\n if (accesskey) {\n element.attr('accesskey', null);\n content.attr('accesskey', accesskey);\n }\n that.bind('activate', function (ev) {\n if (!ev.isDefaultPrevented()) {\n that.toggle();\n }\n });\n that._updateUI(value);\n },\n destroy: function () {\n this.wrapper.off(NS).find('*').off(NS);\n if (this._popup) {\n this._selector.destroy();\n this._popup.destroy();\n }\n this._selector = this._popup = this.wrapper = null;\n Widget.fn.destroy.call(this);\n },\n enable: function (enable) {\n var that = this, wrapper = that.wrapper, innerWrapper = wrapper.children('.k-picker-wrap'), arrow = innerWrapper.find('.k-select');\n if (arguments.length === 0) {\n enable = true;\n }\n that.element.attr('disabled', !enable);\n wrapper.attr('aria-disabled', !enable);\n arrow.off(NS).on('mousedown' + NS, preventDefault);\n wrapper.addClass('k-state-disabled').removeAttr('tabIndex').add('*', wrapper).off(NS);\n if (enable) {\n wrapper.removeClass('k-state-disabled').attr('tabIndex', that._tabIndex).on('mouseenter' + NS, function () {\n innerWrapper.addClass('k-state-hover');\n }).on('mouseleave' + NS, function () {\n innerWrapper.removeClass('k-state-hover');\n }).on('focus' + NS, function () {\n innerWrapper.addClass('k-state-focused');\n }).on('blur' + NS, function () {\n innerWrapper.removeClass('k-state-focused');\n }).on(KEYDOWN_NS, bind(that._keydown, that)).on(CLICK_NS, '.k-select', bind(that.toggle, that)).on(CLICK_NS, that.options.toolIcon ? '.k-tool-icon' : '.k-selected-color', function () {\n that.trigger('activate');\n });\n } else {\n that.close();\n }\n },\n _template: kendo.template('' + '' + '# if (toolIcon) { #' + '' + '' + '' + '# } else { #' + '' + '# } #' + '' + '' + '' + '' + ''),\n options: {\n name: 'ColorPicker',\n palette: null,\n columns: 10,\n toolIcon: null,\n value: null,\n messages: MESSAGES,\n opacity: false,\n buttons: true,\n preview: true,\n clearButton: false,\n ARIATemplate: 'Current selected color is #=data || \"\"#'\n },\n events: [\n 'activate',\n 'change',\n 'select',\n 'open',\n 'close'\n ],\n open: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().open();\n }\n },\n close: function () {\n var selOptions = this._selector && this._selector.options || {};\n selOptions._closing = true;\n this._getPopup().close();\n delete selOptions._closing;\n },\n toggle: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().toggle();\n }\n },\n _noColorIcon: function () {\n return this.wrapper.find('.k-picker-wrap > .k-selected-color > .k-icon.k-i-line');\n },\n color: ColorSelector.fn.color,\n value: ColorSelector.fn.value,\n _select: ColorSelector.fn._select,\n _triggerSelect: ColorSelector.fn._triggerSelect,\n _isInputTypeColor: function () {\n var el = this.element[0];\n return /^input$/i.test(el.tagName) && /^color$/i.test(el.type);\n },\n _updateUI: function (value) {\n var formattedValue = '';\n if (value) {\n if (this._isInputTypeColor() || value.a == 1) {\n formattedValue = value.toCss();\n } else {\n formattedValue = value.toCssRgba();\n }\n this.element.val(formattedValue);\n }\n if (!this._ariaTemplate) {\n this._ariaTemplate = kendo.template(this.options.ARIATemplate);\n }\n this.wrapper.attr('aria-label', this._ariaTemplate(formattedValue));\n this._triggerSelect(value);\n this.wrapper.find('.k-selected-color').css(BACKGROUNDCOLOR, value ? value.toDisplay() : WHITE);\n this._noColorIcon()[formattedValue ? 'hide' : 'show']();\n },\n _keydown: function (ev) {\n var key = ev.keyCode;\n if (this._getPopup().visible()) {\n if (key == KEYS.ESC) {\n this._selector._cancel();\n } else {\n this._selector._keydown(ev);\n }\n preventDefault(ev);\n } else if (key == KEYS.ENTER || key == KEYS.DOWN) {\n this.open();\n preventDefault(ev);\n }\n },\n _getPopup: function () {\n var that = this, popup = that._popup;\n if (!popup) {\n var options = that.options;\n var selectorType;\n if (options.palette) {\n selectorType = ColorPalette;\n } else {\n selectorType = FlatColorPicker;\n }\n options._standalone = false;\n delete options.select;\n delete options.change;\n delete options.cancel;\n var id = kendo.guid();\n var selector = that._selector = new selectorType($('
              ').appendTo(document.body), options);\n that.wrapper.attr('aria-owns', id);\n that._popup = popup = selector.wrapper.kendoPopup({\n anchor: that.wrapper,\n adjustSize: {\n width: 5,\n height: 0\n }\n }).data('kendoPopup');\n selector.element.find('.k-clear-color').kendoButton({\n icon: 'reset-color',\n click: function (e) {\n selector.options._clearedColor = true;\n that.value(null);\n that.element.val(null);\n that._updateUI(null);\n selector._colorAsText.val('');\n selector._hsvHandle.css({\n top: '0px',\n left: '0px'\n });\n selector._selectedColor.css(BACKGROUNDCOLOR, WHITE);\n that.trigger('change', { value: that.value() });\n e.preventDefault();\n }\n });\n selector.bind({\n select: function (ev) {\n that._updateUI(parseColor(ev.value));\n delete selector.options._clearedColor;\n },\n change: function () {\n if (!selector.options._clearedColor) {\n that._select(selector.color());\n }\n that.close();\n },\n cancel: function () {\n if (selector.options._clearedColor && !that.value() && selector.value()) {\n that._select(selector.color(), true);\n }\n that.close();\n }\n });\n popup.bind({\n close: function (ev) {\n if (that.trigger('close')) {\n ev.preventDefault();\n return;\n }\n that.wrapper.children('.k-picker-wrap').removeClass('k-state-focused');\n var color = selector._selectOnHide();\n var selectorColor = selector.value();\n var value = that.value();\n var options = selector.options;\n if (!color) {\n setTimeout(function () {\n if (that.wrapper && !that.wrapper.is('[unselectable=\\'on\\']')) {\n that.wrapper.focus();\n }\n });\n if (!options._closing && options._clearedColor && !value && selectorColor) {\n that._select(selectorColor, true);\n } else {\n that._updateUI(that.color());\n }\n } else if (!(options._clearedColor && !value)) {\n that._select(color);\n }\n },\n open: function (ev) {\n if (that.trigger('open')) {\n ev.preventDefault();\n } else {\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n },\n activate: function () {\n selector._select(that.color(), true);\n selector.focus();\n that.wrapper.children('.k-picker-wrap').addClass('k-state-focused');\n }\n });\n }\n return popup;\n }\n });\n function preventDefault(ev) {\n ev.preventDefault();\n }\n function bind(callback, obj) {\n return function () {\n return callback.apply(obj, arguments);\n };\n }\n ui.plugin(ColorPalette);\n ui.plugin(FlatColorPicker);\n ui.plugin(ColorPicker);\n }(jQuery, parseInt));\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.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n var inputType;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._initialOptions = extend({}, options);\n inputType = element.attr('type');\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n if (value == NULL) {\n if (inputType == 'number') {\n value = parseFloat(element.val());\n } else {\n value = element.val();\n }\n }\n that.value(value);\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.angular('compile', function () {\n return { elements: that._text.get() };\n });\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('keyup' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max,\n 'autocomplete': 'off'\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else if (key != keys.TAB) {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, originalValue = that._value, value = that._parse(element.val()) || 0, precision = that.options.decimals || 2;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value = +(value + that.options.step * step).toFixed(precision);\n value = that._adjust(value);\n that._update(value);\n that._typing = false;\n if (originalValue !== value) {\n that.trigger(SPIN);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this.element.attr('title') || input.val());\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('').parent();\n wrapper = wrapper.wrap('').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\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.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
              ' + '#=message#
              ', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('
              ')\n };\n kendo.alert = kendoAlert;\n kendo.confirm = kendoConfirm;\n kendo.prompt = kendoPrompt;\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.window', [\n 'kendo.draganddrop',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'window',\n name: 'Window',\n category: 'web',\n description: 'The Window widget displays content in a modal or non-modal HTML window.',\n depends: [\n 'draganddrop',\n 'popup'\n ],\n features: [{\n id: 'window-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, TabKeyTrap = kendo.ui.Popup.TabKeyTrap, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, proxy = $.proxy, extend = $.extend, each = $.each, template = kendo.template, BODY = 'body', templates, NS = '.kendoWindow', MODAL_NS = '.kendoWindowModal', KWINDOW = '.k-window', KWINDOWTITLE = '.k-window-title', KWINDOWTITLEBAR = KWINDOWTITLE + 'bar', KWINDOWCONTENT = '.k-window-content', KDIALOGCONTENT = '.k-dialog-content', KWINDOWRESIZEHANDLES = '.k-resize-handle', KOVERLAY = '.k-overlay', KCONTENTFRAME = 'k-content-frame', LOADING = 'k-i-loading', KHOVERSTATE = 'k-state-hover', KFOCUSEDSTATE = 'k-state-focused', MAXIMIZEDSTATE = 'k-window-maximized', VISIBLE = ':visible', HIDDEN = 'hidden', CURSOR = 'cursor', OPEN = 'open', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', CLOSE = 'close', REFRESH = 'refresh', MINIMIZE = 'minimize', MAXIMIZE = 'maximize', RESIZESTART = 'resizeStart', RESIZE = 'resize', RESIZEEND = 'resizeEnd', DRAGSTART = 'dragstart', DRAGEND = 'dragend', ERROR = 'error', OVERFLOW = 'overflow', DATADOCOVERFLOWRULE = 'original-overflow-rule', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-window-minimize,.k-window-actions .k-i-window-maximize', KPIN = '.k-i-pin', KUNPIN = '.k-i-unpin', PIN_UNPIN = KPIN + ',' + KUNPIN, TITLEBAR_BUTTONS = '.k-window-titlebar .k-window-action', REFRESHICON = '.k-window-titlebar .k-i-refresh', WINDOWEVENTSHANDLED = 'WindowEventsHandled', zero = /^0[a-z]*$/i, isLocalUrl = kendo.isLocalUrl, SIZE = {\n small: 'k-window-sm',\n medium: 'k-window-md',\n large: 'k-window-lg'\n };\n function defined(x) {\n return typeof x != 'undefined';\n }\n function toInt(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), low === -Infinity ? low : parseInt(low, 10));\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\n }\n function getPosition(elem) {\n var result = {\n top: elem.offsetTop,\n left: elem.offsetLeft\n }, parent = elem.offsetParent;\n while (parent) {\n result.top += parent.offsetTop;\n result.left += parent.offsetLeft;\n var parentOverflowX = $(parent).css('overflowX');\n var parentOverflowY = $(parent).css('overflowY');\n if (parentOverflowY === 'auto' || parentOverflowY === 'scroll') {\n result.top -= parent.scrollTop;\n }\n if (parentOverflowX === 'auto' || parentOverflowX === 'scroll') {\n result.left -= parent.scrollLeft;\n }\n parent = parent.offsetParent;\n }\n return result;\n }\n var Window = Widget.extend({\n init: function (element, options) {\n var that = this, wrapper, offset = {}, visibility, display, position, isVisible = false, content, windowContent, windowFrame, globalWindow, suppressActions = options && options.actions && !options.actions.length, id;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n position = options.position;\n element = that.element;\n content = options.content;\n globalWindow = $(window);\n if (suppressActions) {\n options.actions = [];\n }\n that.appendTo = $(options.appendTo);\n that.containment = options.draggable.containment ? $(options.draggable.containment).first() : null;\n if (content && !isPlainObject(content)) {\n content = options.content = { url: content };\n }\n element.find('script').filter(executableScript).remove();\n if (!element.parent().is(that.appendTo) && !that.containment && (position.top === undefined || position.left === undefined)) {\n if (element.is(VISIBLE)) {\n offset = element.offset();\n isVisible = true;\n } else {\n visibility = element.css('visibility');\n display = element.css('display');\n element.css({\n visibility: HIDDEN,\n display: ''\n });\n offset = element.offset();\n element.css({\n visibility: visibility,\n display: display\n });\n }\n if (position.top === undefined) {\n position.top = offset.top;\n }\n if (position.left === undefined) {\n position.left = offset.left;\n }\n }\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n wrapper = that.wrapper = element.closest(KWINDOW);\n if (!element.is('.k-content') || !wrapper[0]) {\n element.addClass('k-window-content k-content');\n that._createWindow(element, options);\n wrapper = that.wrapper = element.closest(KWINDOW);\n that.title(that.options.title);\n that._dimensions();\n }\n that.minTop = that.minLeft = -Infinity;\n that.maxTop = that.maxLeft = Infinity;\n that._position();\n if (content) {\n that.refresh(content);\n }\n if (options.visible) {\n that.toFront();\n }\n windowContent = wrapper.children(KWINDOWCONTENT);\n that._tabindex(windowContent);\n if (options.visible && options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n }\n wrapper.on('mouseenter' + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that)).on('mouseleave' + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that)).on('click' + NS, '> ' + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that)).on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowFrame = windowContent.find('.' + KCONTENTFRAME)[0];\n if (windowFrame && !globalWindow.data(WINDOWEVENTSHANDLED)) {\n globalWindow.on('blur' + NS, function () {\n var element = $(document.activeElement).parent(KWINDOWCONTENT);\n if (element.length) {\n var windowInstance = kendo.widgetInstance(element);\n windowInstance._focus();\n }\n });\n globalWindow.on('focus' + NS, function () {\n $(KWINDOWCONTENT).not(KDIALOGCONTENT).each(function (i, element) {\n kendo.widgetInstance($(element))._blur();\n });\n });\n globalWindow.data(WINDOWEVENTSHANDLED, true);\n }\n this._resizable();\n this._draggable();\n if (options.pinned && this.wrapper.is(':visible')) {\n that.pin();\n }\n id = element.attr('id');\n if (id) {\n id = id + '_wnd_title';\n wrapper.children(KWINDOWTITLEBAR).children(KWINDOWTITLE).attr('id', id);\n windowContent.attr({\n 'role': 'dialog',\n 'aria-labelledby': id\n });\n }\n wrapper.add(wrapper.children('.k-resize-handle,' + KWINDOWTITLEBAR)).on('mousedown' + NS, proxy(that.toFront, that));\n that.touchScroller = kendo.touchScroller(element);\n that._resizeHandler = proxy(that._onDocumentResize, that);\n that._marker = kendo.guid().substring(0, 8);\n $(window).on('resize' + NS + that._marker, that._resizeHandler);\n if (options.visible) {\n that.trigger(OPEN);\n that.trigger(ACTIVATE);\n }\n kendo.notify(that);\n if (this.options.modal) {\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n this._tabKeyTrap.trap();\n this._tabKeyTrap.shouldTrap = function () {\n return windowContent.data('isFront');\n };\n }\n },\n _buttonEnter: function (e) {\n $(e.currentTarget).addClass(KHOVERSTATE);\n },\n _buttonLeave: function (e) {\n $(e.currentTarget).removeClass(KHOVERSTATE);\n },\n _focus: function () {\n this.wrapper.addClass(KFOCUSEDSTATE);\n },\n _blur: function () {\n this.wrapper.removeClass(KFOCUSEDSTATE);\n },\n _dimensions: function () {\n var wrapper = this.wrapper;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var maxHeight = options.maxHeight;\n var sizeClass = options.size;\n var dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n var contentBoxSizing = wrapper.css('box-sizing') == 'content-box';\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (this.containment && !this._isPinned) {\n this._updateBoundaries();\n options.maxHeight = Math.min(this.containment.height - (tbBorderWidth + paddingTop), maxHeight);\n options.maxWidth = Math.min(this.containment.width - lrBorderWidth, options.maxWidth);\n }\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]] || '';\n if (value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n if (maxHeight != Infinity) {\n this.element.css('maxHeight', maxHeight);\n }\n if (width) {\n if (isNaN(width) && width.toString().indexOf('px') < 0) {\n wrapper.width(width);\n } else {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n }\n } else {\n wrapper.width('');\n }\n if (height) {\n if (isNaN(height) && height.toString().indexOf('px') < 0) {\n wrapper.height(height);\n } else {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n }\n } else {\n wrapper.height('');\n }\n if (!options.visible) {\n wrapper.hide();\n }\n if (sizeClass && SIZE[sizeClass]) {\n wrapper.addClass(SIZE[sizeClass]);\n }\n },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position;\n this._updateBoundaries();\n if (this.containment) {\n position.top = Math.min(this.minTop + (position.top || 0), this.maxTop);\n position.left = Math.min(this.minLeft + (position.left || 0), this.maxLeft);\n }\n if (position.top === 0) {\n position.top = position.top.toString();\n }\n if (position.left === 0) {\n position.left = position.left.toString();\n }\n wrapper.css({\n top: position.top || '',\n left: position.left || ''\n });\n },\n _updateBoundaries: function () {\n var containment = this.containment;\n if (!containment) {\n return null;\n }\n containment.width = containment.innerWidth();\n containment.height = containment.innerHeight();\n if (parseInt(containment.width, 10) > containment[0].clientWidth) {\n containment.width -= kendo.support.scrollbar();\n }\n if (parseInt(containment.height, 10) > containment[0].clientHeight) {\n containment.height -= kendo.support.scrollbar();\n }\n containment.position = getPosition(containment[0]);\n if (this._isPinned) {\n this.minTop = this.minLeft = -Infinity;\n this.maxTop = this.maxLeft = Infinity;\n } else {\n this.minTop = containment.scrollTop();\n this.minLeft = containment.scrollLeft();\n this.maxLeft = this.minLeft + containment.width - outerWidth(this.wrapper, true);\n this.maxTop = this.minTop + containment.height - outerHeight(this.wrapper, true);\n }\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _resize: function () {\n kendo.resize(this.element.children());\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var wrapper = this.wrapper;\n if (this.resizing) {\n wrapper.off('dblclick' + NS).children(KWINDOWRESIZEHANDLES).remove();\n this.resizing.destroy();\n this.resizing = null;\n }\n if (resizable) {\n wrapper.on('dblclick' + NS, KWINDOWTITLEBAR, proxy(function (e) {\n if (!$(e.target).closest('.k-window-action').length) {\n this.toggleMaximization();\n }\n }, this));\n each('n e s w se sw ne nw'.split(' '), function (index, handler) {\n wrapper.append(templates.resizeHandle(handler));\n });\n this.resizing = new WindowResizing(this);\n }\n wrapper = null;\n },\n _draggable: function () {\n var draggable = this.options.draggable;\n if (this.dragging) {\n this.dragging.destroy();\n this.dragging = null;\n }\n if (draggable) {\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n }\n },\n _actions: function () {\n var options = this.options;\n var actions = options.actions;\n var pinned = options.pinned;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n var windowSpecificCommands = [\n 'maximize',\n 'minimize'\n ];\n actions = $.map(actions, function (action) {\n action = pinned && action.toLowerCase() === 'pin' ? 'unpin' : action;\n return { name: windowSpecificCommands.indexOf(action.toLowerCase()) > -1 ? 'window-' + action : action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\n var that = this;\n var sizeClass = that.options.size;\n var cachedOptions = JSON.parse(JSON.stringify(options));\n extend(options.position, that.options.position);\n extend(options.position, cachedOptions.position);\n Widget.fn.setOptions.call(that, options);\n var scrollable = that.options.scrollable !== false;\n that.restore();\n if (typeof options.title !== 'undefined') {\n that.title(options.title);\n }\n that.wrapper.removeClass(SIZE[sizeClass]);\n that._dimensions();\n that._position();\n that._resizable();\n that._draggable();\n that._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = that.options.visible !== false;\n that._enableDocumentScrolling();\n that._overlay(options.modal && visible);\n }\n that.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n },\n events: [\n OPEN,\n ACTIVATE,\n DEACTIVATE,\n CLOSE,\n MINIMIZE,\n MAXIMIZE,\n REFRESH,\n RESIZESTART,\n RESIZE,\n RESIZEEND,\n DRAGSTART,\n DRAGEND,\n ERROR\n ],\n options: {\n name: 'Window',\n animation: {\n open: {\n effects: {\n zoom: { direction: 'in' },\n fade: { direction: 'in' }\n },\n duration: 350\n },\n close: {\n effects: {\n zoom: {\n direction: 'out',\n properties: { scale: 0.7 }\n },\n fade: { direction: 'out' }\n },\n duration: 350,\n hide: true\n }\n },\n title: '',\n actions: ['Close'],\n autoFocus: true,\n modal: false,\n size: 'auto',\n resizable: true,\n draggable: true,\n minWidth: 90,\n minHeight: 50,\n maxWidth: Infinity,\n maxHeight: Infinity,\n pinned: false,\n scrollable: true,\n position: {},\n content: null,\n visible: null,\n height: null,\n width: null,\n appendTo: 'body',\n isMaximized: false,\n isMinimized: false\n },\n _closable: function () {\n return $.inArray('close', $.map(this.options.actions, function (x) {\n return x.toLowerCase();\n })) > -1;\n },\n _keydown: function (e) {\n var that = this, options = that.options, keys = kendo.keys, keyCode = e.keyCode, wrapper = that.wrapper, offset, handled, distance = 10, isMaximized = options.isMaximized, isMinimized = options.isMinimized, newWidth, newHeight, w, h;\n if (keyCode == keys.ESC && that._closable()) {\n e.stopPropagation();\n that._close(false);\n }\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (e.altKey && keyCode == 82) {\n that.refresh();\n }\n if (e.altKey && keyCode == 80) {\n if (that.options.pinned) {\n that.unpin();\n } else {\n that.pin();\n }\n }\n if (e.altKey && keyCode == keys.UP) {\n if (isMinimized) {\n that.restore();\n that.element.focus();\n } else if (!isMaximized) {\n that.maximize();\n that.element.focus();\n }\n } else if (e.altKey && keyCode == keys.DOWN) {\n if (!isMinimized && !isMaximized) {\n that.minimize();\n that.wrapper.focus();\n } else if (isMaximized) {\n that.restore();\n that.element.focus();\n }\n }\n offset = kendo.getOffset(wrapper);\n if (that.containment && !that._isPinned) {\n offset = that.options.position;\n }\n if (options.draggable && !e.ctrlKey && !e.altKey && !isMaximized) {\n that._updateBoundaries();\n if (keyCode == keys.UP) {\n offset.top = constrain(offset.top - distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.DOWN) {\n offset.top = constrain(offset.top + distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.LEFT) {\n offset.left = constrain(offset.left - distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n } else if (keyCode == keys.RIGHT) {\n offset.left = constrain(offset.left + distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n }\n }\n if (options.resizable && e.ctrlKey && !isMaximized && !isMinimized) {\n if (keyCode == keys.UP) {\n handled = true;\n newHeight = wrapper.height() - distance;\n } else if (keyCode == keys.DOWN) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newHeight = Math.min(wrapper.height() + distance, that.containment.height - offset.top - toInt(wrapper, 'padding-top') - toInt(wrapper, 'borderBottomWidth') - toInt(wrapper, 'borderTopWidth'));\n } else {\n newHeight = wrapper.height() + distance;\n }\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newWidth = Math.min(wrapper.width() + distance, that.containment.width - offset.left - toInt(wrapper, 'borderLeftWidth') - toInt(wrapper, 'borderRightWidth'));\n } else {\n newWidth = wrapper.width() + distance;\n }\n }\n if (handled) {\n w = constrain(newWidth, options.minWidth, options.maxWidth);\n h = constrain(newHeight, options.minHeight, options.maxHeight);\n if (!isNaN(w)) {\n wrapper.width(w);\n that.options.width = w + 'px';\n }\n if (!isNaN(h)) {\n wrapper.height(h);\n that.options.height = h + 'px';\n }\n that.resize();\n }\n }\n if (handled) {\n e.preventDefault();\n }\n },\n _overlay: function (visible) {\n var overlay = this.containment ? this.containment.children(KOVERLAY) : this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $('
              ');\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n if (this.options.modal.preventScroll && !this.containment) {\n this._stopDocumentScrolling();\n }\n return overlay;\n },\n _actionForIcon: function (icon) {\n var iconClass = /\\bk-i(-\\w+)+\\b/.exec(icon[0].className)[0];\n return {\n 'k-i-close': '_close',\n 'k-i-window-maximize': 'maximize',\n 'k-i-window-minimize': 'minimize',\n 'k-i-window-restore': 'restore',\n 'k-i-refresh': 'refresh',\n 'k-i-pin': 'pin',\n 'k-i-unpin': 'unpin'\n }[iconClass];\n },\n _windowActionHandler: function (e) {\n if (this._closing) {\n return;\n }\n var icon = $(e.target).closest('.k-window-action').find('.k-icon');\n var action = this._actionForIcon(icon);\n if (action) {\n e.preventDefault();\n this[action]();\n return false;\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && options.visible && options.appendTo === that.options.appendTo && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KWINDOWCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n center: function () {\n var that = this, position = that.options.position, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newTop, newLeft;\n if (that.options.isMaximized) {\n return that;\n }\n if (that.options.pinned && !that._isPinned) {\n that.pin();\n }\n if (!that.options.pinned) {\n scrollTop = documentWindow.scrollTop();\n scrollLeft = documentWindow.scrollLeft();\n }\n if (this.containment && !that.options.pinned) {\n newTop = this.minTop + (this.maxTop - this.minTop) / 2;\n newLeft = this.minLeft + (this.maxLeft - this.minLeft) / 2;\n } else {\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - toInt(wrapper, 'paddingTop')) / 2);\n }\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n position.top = newTop;\n position.left = newLeft;\n return that;\n },\n title: function (title) {\n var that = this, value, encoded = true, wrapper = that.wrapper, titleBar = wrapper.children(KWINDOWTITLEBAR), titleElement = titleBar.children(KWINDOWTITLE), titleBarHeight, display, visibility;\n if (!arguments.length) {\n return titleElement.html();\n }\n if ($.isPlainObject(title)) {\n value = typeof title.text !== 'undefined' ? title.text : '';\n encoded = title.encoded !== false;\n } else {\n value = title;\n }\n if (value === false) {\n wrapper.addClass('k-window-titleless');\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar({ title: encoded ? kendo.htmlEncode(value) : value }));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n titleElement.html(encoded ? kendo.htmlEncode(value) : value);\n }\n visibility = wrapper.css('visibility');\n display = wrapper.css('display');\n if (visibility === HIDDEN) {\n wrapper.css({ display: '' });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({ display: display });\n } else {\n wrapper.css({\n visibility: HIDDEN,\n display: ''\n });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({\n visibility: visibility,\n display: display\n });\n }\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = value;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.element.focus();\n }\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n $(window).on('focus' + MODAL_NS, function () {\n if (contentElement.data('isFront') && !$(document.activeElement).closest(contentElement).length) {\n that.element.focus();\n }\n });\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(this._activate, this)\n });\n }\n }\n if (options.isMaximized) {\n that._containerScrollTop = doc.scrollTop();\n that._containerScrollLeft = doc.scrollLeft();\n that._stopDocumentScrolling();\n }\n if (options.pinned && !that._isPinned) {\n that.pin();\n }\n return that;\n },\n _activate: function () {\n var scrollable = this.options.scrollable !== false;\n if (this.options.autoFocus) {\n this.element.focus();\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n kendo.resize(this.element.children());\n this.trigger(ACTIVATE);\n },\n _removeOverlay: function (suppressAnimation) {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n var overlay = options.modal ? this._overlay(true) : $(undefined);\n var hideOptions = this._animationOptions('close');\n if (hideOverlay) {\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n var overlayFx = kendo.fx(overlay).fadeOut();\n overlayFx.duration(hideOptions.duration || 0);\n overlayFx.startValue(0.5);\n overlayFx.play();\n } else {\n this._overlay(false).remove();\n }\n if (options.modal.preventScroll) {\n this._enableDocumentScrolling();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n if (options.modal.preventScroll) {\n this._stopDocumentScrolling();\n }\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document), defaultPrevented;\n if (that._closing) {\n return;\n }\n defaultPrevented = that.trigger(CLOSE, { userTriggered: !systemTriggered });\n that._closing = !defaultPrevented;\n if (wrapper.is(VISIBLE) && !defaultPrevented) {\n options.visible = false;\n $(KWINDOW).each(function (i, element) {\n var contentElement = $(element).children(KWINDOWCONTENT);\n if (element != wrapper && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.children(KOVERLAY).remove();\n }\n });\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._deactivate, this)\n });\n $(window).off(MODAL_NS);\n }\n if (that.options.isMaximized) {\n that._enableDocumentScrolling();\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n doc.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n doc.scrollLeft(that._containerScrollLeft);\n }\n }\n },\n _deactivate: function () {\n var that = this;\n that.wrapper.hide().css('opacity', '');\n that.trigger(DEACTIVATE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n close: function () {\n this._close(true);\n return this;\n },\n _actionable: function (element) {\n return $(element).is(TITLEBAR_BUTTONS + ',' + TITLEBAR_BUTTONS + ' .k-icon,:input,a');\n },\n _shouldFocus: function (target) {\n var active = activeElement(), element = this.element;\n return this.options.autoFocus && !$(active).is(element) && !this._actionable(target) && (!element.find(active).length || !element.find(target).length);\n },\n toFront: function (e) {\n var that = this, wrapper = that.wrapper, currentWindow = wrapper[0], containmentContext = that.containment && !that._isPinned, zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex, target = e && e.target || null;\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX), contentElement = windowObject.children(KWINDOWCONTENT);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n contentElement.data('isFront', element == currentWindow);\n if (element != currentWindow && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.append(templates.overlay);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n if (that._shouldFocus(target)) {\n if (that.isMinimized()) {\n that.wrapper.focus();\n } else if ($(target).is(KOVERLAY)) {\n setTimeout(function () {\n that.element.focus();\n });\n } else {\n that.element.focus();\n }\n var scrollTop = containmentContext ? that.containment.scrollTop() : $(window).scrollTop(), windowTop = parseInt(wrapper.position().top, 10);\n if (!that.options.pinned && windowTop > 0 && windowTop < scrollTop) {\n if (scrollTop > 0) {\n $(window).scrollTop(windowTop);\n } else {\n wrapper.css('top', scrollTop);\n }\n }\n }\n wrapper = null;\n return that;\n },\n toggleMaximization: function () {\n if (this._closing) {\n return this;\n }\n return this[this.options.isMaximized ? 'restore' : 'maximize']();\n },\n restore: function () {\n var that = this;\n var options = that.options;\n var minHeight = options.minHeight;\n var restoreOptions = that.restoreOptions;\n var shouldRestrictTop;\n var container = that.containment && !that._isPinned ? that.containment : $(document);\n if (!options.isMaximized && !options.isMinimized) {\n return that;\n }\n if (minHeight && minHeight != Infinity) {\n that.wrapper.css('min-height', minHeight);\n }\n if (restoreOptions && !options.isMaximized) {\n restoreOptions.height = constrain(restoreOptions.height, that.options.minHeight, that.options.maxHeight);\n shouldRestrictTop = options.position.top + parseInt(restoreOptions.height, 10) > that.maxTop;\n if (shouldRestrictTop) {\n options.position.top = constrain(options.position.top, that.minTop, that.maxTop - parseInt(restoreOptions.height, 10));\n extend(restoreOptions, {\n left: options.position.left,\n top: options.position.top\n });\n }\n }\n that.wrapper.css({\n position: options.pinned ? 'fixed' : 'absolute',\n left: restoreOptions.left,\n top: restoreOptions.top,\n width: restoreOptions.width,\n height: restoreOptions.height\n }).removeClass(MAXIMIZEDSTATE).find('.k-window-content,.k-resize-handle').show().end().find('.k-window-titlebar .k-i-window-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n if (options.isMaximized) {\n that.wrapper.find('.k-i-window-maximize').parent().focus();\n } else if (options.isMinimized) {\n that.wrapper.find('.k-i-window-minimize').parent().focus();\n }\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n if (!that.options.modal.preventScroll) {\n that._enableDocumentScrolling();\n }\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n container.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n container.scrollLeft(that._containerScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n that.wrapper.removeAttr('tabindex');\n that.wrapper.removeAttr('aria-labelled-by');\n that.resize();\n return that;\n },\n _sizingAction: function (actionId, callback) {\n var that = this, wrapper = that.wrapper, style = wrapper[0].style, options = that.options;\n if (options.isMaximized || options.isMinimized) {\n return that;\n }\n that.restoreOptions = {\n width: style.width,\n height: style.height\n };\n wrapper.children(KWINDOWRESIZEHANDLES).hide().end().children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide().eq(0).before(templates.action({ name: 'window-restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\n wrapper.find('.k-i-window-restore').parent().focus();\n return that;\n },\n maximize: function () {\n this._sizingAction('maximize', function () {\n var that = this, wrapper = that.wrapper, containmentContext = this.containment && !that._isPinned, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left + (containmentContext ? this.containment.scrollLeft() : 0),\n top: position.top + (containmentContext ? this.containment.scrollTop() : 0)\n });\n this._containerScrollTop = containmentContext ? this.containment.scrollTop() : doc.scrollTop();\n this._containerScrollLeft = containmentContext ? this.containment.scrollLeft() : doc.scrollLeft();\n that._stopDocumentScrolling();\n wrapper.css({\n top: containmentContext ? this.containment.scrollTop() : 0,\n left: containmentContext ? this.containment.scrollLeft() : 0,\n position: containmentContext ? 'absolute' : 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n _stopDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._storeOverflowRule(containment);\n containment.css(OVERFLOW, HIDDEN);\n that.wrapper.css({\n maxWidth: containment.innerWidth(),\n maxHeight: containment.innerHeight()\n });\n return;\n }\n var $body = $('body');\n that._storeOverflowRule($body);\n $body.css(OVERFLOW, HIDDEN);\n var $html = $('html');\n that._storeOverflowRule($html);\n $html.css(OVERFLOW, HIDDEN);\n },\n _enableDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._restoreOverflowRule(containment);\n that.wrapper.css({\n maxWidth: containment.width,\n maxHeight: containment.height\n });\n return;\n }\n that._restoreOverflowRule($(document.body));\n that._restoreOverflowRule($('html'));\n },\n _storeOverflowRule: function ($element) {\n if (this._isOverflowStored($element)) {\n return;\n }\n var overflowRule = $element.get(0).style.overflow;\n if (typeof overflowRule === 'string') {\n $element.data(DATADOCOVERFLOWRULE, overflowRule);\n }\n },\n _isOverflowStored: function ($element) {\n return typeof $element.data(DATADOCOVERFLOWRULE) === 'string';\n },\n _restoreOverflowRule: function ($element) {\n var overflowRule = $element.data(DATADOCOVERFLOWRULE);\n if (overflowRule !== null && overflowRule !== undefined) {\n $element.css(OVERFLOW, overflowRule);\n $element.removeData(DATADOCOVERFLOWRULE);\n } else {\n $element.css(OVERFLOW, '');\n }\n },\n isMaximized: function () {\n return this.options.isMaximized;\n },\n minimize: function () {\n this._sizingAction('minimize', function () {\n var that = this;\n that.wrapper.css({\n height: '',\n minHeight: ''\n });\n that.element.hide();\n that.options.isMinimized = true;\n });\n this.wrapper.attr('tabindex', 0);\n this.wrapper.attr('aria-labelled-by', this.element.attr('aria-labelled-by'));\n this._updateBoundaries();\n return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = options.position, top = this.containment ? getPosition(wrapper[0]).top + toInt(this.containment, 'borderTopWidth') : toInt(wrapper, 'top'), left = this.containment ? getPosition(wrapper[0]).left + toInt(this.containment, 'borderLeftWidth') : toInt(wrapper, 'left');\n if (!that.options.isMaximized) {\n position.top = top;\n position.left = left;\n if (!this.containment || this.containment.css('position') !== 'fixed') {\n position.top -= win.scrollTop();\n position.left -= win.scrollLeft();\n }\n wrapper.css(extend(position, { position: 'fixed' }));\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that._isPinned = true;\n that.options.pinned = true;\n if (this.containment) {\n options.maxWidth = options.maxHeight = Infinity;\n wrapper.css({\n maxWidth: '',\n maxHeight: ''\n });\n }\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = that.options.position, containment = that.containment, top = parseInt(wrapper.css('top'), 10) + win.scrollTop(), left = parseInt(wrapper.css('left'), 10) + win.scrollLeft();\n if (!that.options.isMaximized) {\n that._isPinned = false;\n that.options.pinned = false;\n if (containment) {\n that._updateBoundaries();\n options.maxWidth = Math.min(containment.width, options.maxWidth);\n options.maxHeight = Math.min(containment.height - toInt(wrapper, 'padding-top'), options.maxHeight);\n wrapper.css({\n maxWidth: options.maxWidth,\n maxHeight: options.maxHeight\n });\n if (top < containment.position.top) {\n top = that.minTop;\n } else if (top > containment.position.top + containment.height) {\n top = that.maxTop;\n } else {\n top = top + containment.scrollTop() - (containment.position.top + toInt(containment, 'border-top-width'));\n }\n if (left < containment.position.left) {\n left = that.minLeft;\n } else if (left > containment.position.left + containment.width) {\n left = that.maxLeft;\n } else {\n left = left + containment.scrollLeft() - (containment.position.left + toInt(containment, 'border-left-width'));\n }\n }\n position.top = constrain(top, that.minTop, that.maxTop);\n position.left = constrain(left, that.minLeft, that.maxLeft);\n wrapper.css(extend(position, { position: '' }));\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), contentBoxSizing = wrapper.css('box-sizing') == 'content-box', w, h;\n if (!that.options.isMaximized) {\n return;\n }\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (that.containment && !that._isPinned) {\n w = that.containment.innerWidth() - lrBorderWidth;\n h = that.containment.innerHeight() - (tbBorderWidth + paddingTop);\n } else {\n w = wnd.width() / zoomLevel - lrBorderWidth;\n h = wnd.height() / zoomLevel - (tbBorderWidth + paddingTop);\n }\n wrapper.css({\n width: w,\n height: h\n });\n that.options.width = w;\n that.options.height = h;\n that.resize();\n },\n refresh: function (options) {\n var that = this, initOptions = that.options, element = $(that.element), iframe, showIframe, url;\n if (!isPlainObject(options)) {\n options = { url: options };\n }\n options = extend({}, initOptions.content, options);\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n url = options.url;\n if (url) {\n if (!defined(showIframe)) {\n showIframe = !isLocalUrl(url);\n }\n if (!showIframe) {\n that._ajaxRequest(options);\n } else {\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = url || iframe.src;\n } else {\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n }\n element.find('.' + KCONTENTFRAME).unbind('load' + NS).on('load' + NS, proxy(this._triggerRefresh, this));\n }\n } else {\n if (options.template) {\n that.content(template(options.template)({}));\n }\n that.trigger(REFRESH);\n }\n element.toggleClass('k-window-iframecontent', !!showIframe);\n return that;\n },\n _triggerRefresh: function () {\n this.trigger(REFRESH);\n },\n _ajaxComplete: function () {\n clearTimeout(this._loadingIconTimeout);\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\n },\n _ajaxError: function (xhr, status) {\n this.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n _ajaxSuccess: function (contentTemplate) {\n return function (data) {\n var html = data;\n if (contentTemplate) {\n html = template(contentTemplate)(data || {});\n }\n this.content(html, data);\n this.element.prop('scrollTop', 0);\n this.trigger(REFRESH);\n };\n },\n _showLoading: function () {\n this.wrapper.find(REFRESHICON).addClass(LOADING);\n },\n _ajaxRequest: function (options) {\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n $.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: proxy(this._ajaxError, this),\n complete: proxy(this._ajaxComplete, this),\n success: proxy(this._ajaxSuccess(options.template), this)\n }, options));\n },\n _destroy: function () {\n if (this.resizing) {\n this.resizing.destroy();\n }\n if (this.dragging) {\n this.dragging.destroy();\n }\n this.wrapper.off(NS).children(KWINDOWCONTENT).off(NS).end().find('.k-resize-handle,.k-window-titlebar').off(NS);\n $(window).off('resize' + NS + this._marker);\n $(window).off(MODAL_NS);\n $(window).off(NS);\n clearTimeout(this._loadingIconTimeout);\n Widget.fn.destroy.call(this);\n this.unbind(undefined);\n kendo.destroy(this.wrapper);\n this._removeOverlay(true);\n },\n destroy: function () {\n this._destroy();\n this.wrapper.empty().remove();\n this.wrapper = this.appendTo = this.element = $();\n },\n _createWindow: function () {\n var contentHtml = this.element, options = this.options, iframeSrcAttributes, wrapper, isRtl = kendo.support.isRtl(contentHtml);\n if (options.scrollable === false) {\n contentHtml.css('overflow', 'hidden');\n }\n wrapper = $(templates.wrapper(options));\n iframeSrcAttributes = contentHtml.find('iframe:not(.k-content)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).append(contentHtml).find('iframe:not(.k-content)').each(function (index) {\n this.src = iframeSrcAttributes[index];\n });\n if (this.containment) {\n this.containment.prepend(wrapper);\n } else if (this.appendTo) {\n wrapper.appendTo(this.appendTo);\n }\n wrapper.find('.k-window-title').css(isRtl ? 'left' : 'right', outerWidth(wrapper.find('.k-window-actions')) + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('
              '),\n action: template('' + '' + ''),\n titlebar: template('
              ' + '#= title #' + '
              ' + '
              '),\n overlay: '
              ',\n contentFrame: template(''),\n resizeHandle: template('
              ')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.width(),\n height: wrapper.height()\n };\n wnd._updateBoundaries();\n that.containerOffset = wnd.containment ? wnd.containment.position : kendo.getOffset(wnd.appendTo, 'position');\n var offsetParent = wrapper.offsetParent();\n if (offsetParent.is('html')) {\n that.containerOffset.top = that.containerOffset.left = 0;\n } else {\n var marginTop = offsetParent.css('margin-top');\n var marginLeft = offsetParent.css('margin-left');\n var hasMargin = !zero.test(marginTop) || !zero.test(marginLeft);\n if (hasMargin) {\n var wrapperPosition = getPosition(wrapper[0]);\n var relativeElMarginLeft = wrapperPosition.left - that.containerOffset.left - that.initialPosition.left;\n var relativeElMarginTop = wrapperPosition.top - that.containerOffset.top - that.initialPosition.top;\n that._relativeElMarginLeft = relativeElMarginLeft > 1 ? relativeElMarginLeft : 0;\n that._relativeElMarginTop = relativeElMarginTop > 1 ? relativeElMarginTop : 0;\n that.initialPosition.left += that._relativeElMarginLeft;\n that.initialPosition.top += that._relativeElMarginTop;\n }\n }\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper, options = wnd.options, position = options.position, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, containmentContext = wnd.containment && !wnd._isPinned, rtl = kendo.support.isRtl(wnd.containment), leftRtlOffset = containmentContext && rtl && wnd.containment.innerWidth() > wnd.containment.width ? kendo.support.scrollbar() : 0, scrollOffset = containmentContext ? {\n top: wnd.containment.scrollTop(),\n left: wnd.containment.scrollLeft()\n } : {\n top: 0,\n left: 0\n }, newWidth, newHeight, windowBottom, windowRight, x = Math.max(e.x.location, 0), y = Math.max(e.y.location, 0);\n if (direction.indexOf('e') >= 0) {\n if (wnd.containment && x - initialSize.width >= wnd.maxLeft - scrollOffset.left + containerOffset.left + leftRtlOffset) {\n newWidth = wnd.maxLeft + leftRtlOffset - initialPosition.left + initialSize.width - scrollOffset.left;\n } else {\n newWidth = x - initialPosition.left - containerOffset.left;\n }\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n } else if (direction.indexOf('w') >= 0) {\n windowRight = initialPosition.left + initialSize.width + containerOffset.left;\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n position.left = windowRight - newWidth - containerOffset.left - leftRtlOffset - (that._relativeElMarginLeft || 0) + scrollOffset.left;\n if (wnd.containment && position.left <= wnd.minLeft) {\n position.left = wnd.minLeft;\n newWidth = constrain(windowRight - leftRtlOffset - position.left - containerOffset.left + scrollOffset.left, options.minWidth, options.maxWidth);\n }\n wrapper.css({\n left: position.left,\n width: newWidth\n });\n }\n var newWindowTop = y;\n if (wnd.options.pinned) {\n newWindowTop -= $(window).scrollTop();\n }\n if (direction.indexOf('s') >= 0) {\n newHeight = newWindowTop - initialPosition.top - that.elementPadding - containerOffset.top;\n if (newWindowTop - initialSize.height - that.elementPadding >= wnd.maxTop + containerOffset.top - scrollOffset.top) {\n newHeight = wnd.maxTop - initialPosition.top + initialSize.height - scrollOffset.top;\n }\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n } else if (direction.indexOf('n') >= 0) {\n windowBottom = initialPosition.top + initialSize.height + containerOffset.top;\n newHeight = constrain(windowBottom - newWindowTop, options.minHeight, options.maxHeight);\n position.top = windowBottom - newHeight - containerOffset.top - (that._relativeElMarginTop || 0) + scrollOffset.top;\n if (position.top <= wnd.minTop && wnd.containment) {\n position.top = wnd.minTop;\n newHeight = constrain(windowBottom - position.top - containerOffset.top + scrollOffset.top, options.minHeight, options.maxHeight);\n }\n wrapper.css({\n top: position.top,\n height: newHeight\n });\n }\n if (newWidth) {\n wnd.options.width = newWidth + 'px';\n }\n if (newHeight) {\n wnd.options.height = newHeight + 'px';\n }\n wnd.resize();\n },\n dragend: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper;\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n $(BODY).css(CURSOR, '');\n if (wnd.touchScroller) {\n wnd.touchScroller.reset();\n }\n if (e.keyCode == 27) {\n wrapper.css(that.initialPosition).css(that.initialSize);\n }\n wnd.trigger(RESIZEEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n function WindowDragging(wnd, dragHandle) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: dragHandle,\n group: wnd.wrapper.id + '-moving',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n that._draggable.userEvents.stopPropagation = false;\n }\n WindowDragging.prototype = {\n dragstart: function (e) {\n var wnd = this.owner, draggable = wnd.options.draggable, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART) || !draggable;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: wnd.options.position.left,\n top: wnd.options.position.top\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n wnd._updateBoundaries();\n if (!wnd.containment) {\n if (actions.length > 0) {\n wnd.minLeft = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeft = 20 - outerWidth(element);\n }\n wnd.minLeft -= containerOffset.left;\n wnd.minTop = -containerOffset.top;\n }\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n var wnd = this.owner;\n var position = wnd.options.position;\n var axis = wnd.options.draggable.axis;\n var left;\n var top;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n if (!axis || axis.toLowerCase() === 'x') {\n left = e.x.client - wnd.startPosition.left;\n if (wnd.containment && !wnd._isPinned) {\n left += wnd.containment.scrollLeft();\n }\n position.left = constrain(left, wnd.minLeft, wnd.maxLeft);\n }\n if (!axis || axis.toLowerCase() === 'y') {\n top = e.y.client - wnd.startPosition.top;\n if (wnd.containment && !wnd._isPinned) {\n top += wnd.containment.scrollTop();\n }\n position.top = constrain(top, wnd.minTop, wnd.maxTop);\n }\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (position.left - wnd.initialPointerPosition.left) + 'px, ' + (position.top - wnd.initialPointerPosition.top) + 'px)');\n } else {\n $(wnd.wrapper).css(position);\n }\n },\n _finishDrag: function () {\n var wnd = this.owner;\n wnd.wrapper.children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end().find(KOVERLAY).remove();\n $(BODY).css(CURSOR, '');\n },\n dragcancel: function (e) {\n if (this._preventDragging) {\n return;\n }\n this._finishDrag();\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n },\n dragend: function () {\n var wnd = this.owner;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n $(wnd.wrapper).css(wnd.options.position).css('transform', '');\n this._finishDrag();\n wnd.trigger(DRAGEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n kendo.ui.plugin(Window);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '
              ', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('
              ');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('
              ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
              ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n }\n },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('
              ');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '

              Loading...

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

              Loading...

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