{"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","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","_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","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","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","_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","_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","_oldText","_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","_inputWrapper","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","_initialTitle","_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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oC,GAAX,CAGA7yB,EAASlvJ,WAAWgkE,EACpB,IAAI/mF,GAAWiyK,EAAS,GAAG8yB,SAC3B,OAAO,UAAU1xK,EAAOh+B,EAAS4kM,EAAOE,GAEpC,IADA,GAAI/c,IACIA,GAAc+c,EAAYjlM,QAC9BkoL,EAAa+c,EAAY5qL,OAExB6tK,IAGDA,EAAWp9K,SAAS8kM,EAAc9kM,GAClC3K,EAAQywB,UAHRk3K,EAAK91D,KAAKngD,EAAW,4EAA8E7lF,EAAQ1M,KAAK,oBAW9IP,OAAOuB,MAAMgtB,OAAQvuB,OAAOwuB,SACvBxuB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAOwjC,IAAMxjC,OAAS,SAAUyjC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU3jC,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,OAAOwjC,IAAMxjC,OAAS,SAAUyjC,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.115'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n var exp = customPrecision ? number.toExponential(precision) : number.toExponential();\n return exp.replace(POINT, numberFormat[POINT]);\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0 && format[2]) {\n format = format[2];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n var rounded = round(number, sharpIndex, negative);\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n rounded = round(number, sharpIndex, negative);\n }\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n number = round(number, idx, negative);\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision, negative) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n if (negative) {\n value = -value;\n }\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var calendar = culture.calendar || culture.calendars.standard;\n var patterns = calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width || element.hasClass('k-tooltip'))) {\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) {\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 result, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n });\n if (result) {\n break;\n }\n }\n that._updateRangesLength();\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, selectedNode = that.widget.treeview.select(), nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : that.widget.treeview.dataItem(selectedNode) || that.widget.value(), newValues = valuePrimitive || that.widget.options.autoBind === false ? that.widget.value() : nonPrimitiveValues;\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 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 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) && $.trim(filter.value).length) {\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)) {\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 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 e.preventDefault();\n that.trigger('click', { item: $(e.target.closest(ITEMSELECTOR)) });\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 (!e.isDefaultPrevented()) {\n if (!this.trigger('click', { item: $(e.currentTarget) })) {\n this.select(e.currentTarget);\n }\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 },\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)').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 $('').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.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 }\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._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._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 = 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 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 that._initialTitle = element.title;\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._initialTitle || 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 'k-' + name + ' km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(SWITCHOFF), !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(ACTIVE_STATE));\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(className(SWITCHON), checked).toggleClass(className(SWITCHOFF), !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('ng-form, form').first();\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect || kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n ScrollView: 'div',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n kendo.htmlEncode = function (str) {\n return encode(str).replace(open, encOpen).replace(close, encClose);\n };\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
                ' + element.html() + '
                ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n '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}));"]}