{"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","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","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","pushState","history","hashChange","customElements","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","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","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","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_trigger","_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","_tap","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","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","aggregates","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","val","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupBy","currentValue","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","setup","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_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","_updatePristineForModel","_removeItems","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","reject","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","requestParams","itemIds","_aggregateResult","endless","_changeHandler","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","moreItemsCount","remote","fetch","_query","next","totalPages","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","pageSkip","paging","sorting","filtering","_currentRequestTimeStamp","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","temp","currentRangeStart","_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","Select","MultiSelect","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","gantt","j","old","removeIndex","newValue","oldValues","newValues","selectedValue","_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","done","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","hub","signalr","fail","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","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","KBUTTON","KBUTTONICON","KBUTTONICONTEXT","DISABLED","DISABLEDSTATE","FOCUSEDSTATE","SELECTEDSTATE","Button","_graphics","_focus","_blur","_keydown","_keyup","icon","spriteCssClass","imageUrl","_isNativeButton","span","img","isEmpty","err","numeric","wrapClassName","iconTemplate","FIRST","PREV","NEXT","LAST","KEYDOWN","MOUSEDOWN","DOCUMENT_ELEMENT","Pager","pageSizes","pageItems","linkTemplate","selectTemplate","currentPageTemplate","_refreshHandler","downEvent","previousNext","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","buttonCount","morePages","setDataSource","reminder","hasAll","selectAll","_hideList","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","insertionMethod","defaultArgs","typeIcon","showText","warning","openedNotifications","getNotifications","guidElements","newOptions","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_isShownOnFocus","_mouseenter","autoHide","_mouseleave","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","_closePopup","arrowBorder","elementOffset","offsetAmount","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","candidate","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_ANCHOR","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","_resizeHandler","_buttonClick","release","_toggleOverflowAnchor","tool","overflowTool","component","itemClasses","overflowTemplate","_shrink","_getItem","toolbarItem","overflowItem","isResizable","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","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","ID","FOCUSED","HOVER","LOADING","HIDDENCLASS","GROUPHEADER","LABELIDPART","CASCADE","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_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","enforceMinLength","_clearFilter","_filterSource","newExpression","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","_toggleHeader","groupHeader","footer","_allowOpening","_old","_ignoreCase","widgetOptions","_open","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_state","_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","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","padding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_current","_parentWidget","_cascadeSelect","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_customOption","_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","cascadeFromField","currentHandler","_optionID","_selectedIndices","_dataItems","_values","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","_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","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","newGroup","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumberTemplate","cellTemplate","emptyCellTemplate","createDate","disableDates","isInRange","date1","date2","year1","getToday","DATE","restrictValue","shiftArray","multiplier","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","MOUSEENTER","FOCUS","prevent","leapYear","dateObject","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_selectable","link","_toDateObject","_focusView","focusOnNav","_cellID","_isMultipleSelection","_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","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","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","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","dateInput","_dateInput","_update","ARIATemplate","_dateIcon","_inputWrapper","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","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","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","valueGetter","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getElementByDataItem","_getIndecies","deferredRange","itemCount","defs","low","high","pages","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","minHeight","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","flatGroups","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","autocomplete","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_toggleCloseVisibility","_progressHandler","_separator","_unifySeparators","_last","wordIndex","groupsLength","isActive","_touchScroller","_muted","_selectValue","_defaultSeparator","itemSelected","_loading","DOMelement","assign","normalizeIndex","sameCharsOnly","character","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_word","_span","_mobile","_filterHeader","_textAccessor","valueTemplate","optionLabelTemplate","hasOptionLabel","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_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","_setText","syncValueAndText","_pasteTimeout","hasText","isCustom","_arrowClick","_inputFocus","_inputFocusout","_inputPaste","_openPopup","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","_setDomInputValue","caretStart","currentCaret","maxLength","accessKey","A","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","SELECTEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_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","_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","columns","_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","isStep","_focusout","_arrows","_validation","_toggleText","factor","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","_initialTitle","aria-valuemin","aria-valuemax","_key","_step","isNumPadDecimal","_numericRegex","_addInvalidState","fractionRule","_floatRegExp","rounder","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","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","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","_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","iconClass","stringDiffStart","str1","str2","MOUSEUP","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","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","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","_updateClasses","_initData","_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","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","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","TimeView","TimePicker","ARIA_ACTIVEDESCENDANT","_dates","_timeViewID","_heightHandler","dataBind","_html","msStart","lastIdx","msInterval","interval","startDay","innerText","_distinctSelection","selectionIndex","timeView","lastTimeOption","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","percentageUnitsRegex","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","KCONTENT","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","okText","promptInput","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","toFront","_triggerInitOpen","_overlay","_focusDialog","closable","_closeClick","_closeKeyHandler","_setElementMaxHeight","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","_overlayedNodes","jthis","hiddenValue","titlebarActions","titleId","actions","_createActionbar","isStretchedLayout","buttonLayout","_addButtons","_normalizeButtonSize","btn","actionClick","_actionClick","actionKeyHandler","_actionKeyHandler","buttonSize","_mergeTextWithOptions","lastButton","closeBtn","actionButtons","_runActionBtn","preventClose","otherModalsVisible","overlayFx","showOptions","_animationOptions","_modals","Fade","fadeIn","_openAnimationEnd","basicAnimation","_initOpenTriggered","originalZIndex","windowObject","zIndexNew","_stopCenterOnResize","systemTriggered","hideOptions","_removeOverlay","_closeAnimationEnd","_centerOnResize","documentWindow","newLeft","newTop","_trackResize","modals","hideOverlay","_object","lastModal","zStack","encodedHtml","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","confirm","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","executableScript","WindowResizing","_preventDragging","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowDragging","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","DATADOCOVERFLOWRULE","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","suppressActions","_createWindow","_buttonEnter","_buttonLeave","_windowActionHandler","windowInstance","aria-labelledby","_onDocumentResize","toggleMaximization","resizeHandle","dragging","_actions","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","_closable","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","_isPinned","titleBarHeight","titleBar","doc","_activate","_documentScrollTop","_documentScrollLeft","_stopDocumentScrolling","suppressAnimation","defaultPrevented","_deactivate","_enableDocumentScrolling","_actionable","_shouldFocus","windowTop","currentWindow","restoreOptions","_sizingAction","actionId","$html","$body","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","lrBorderWidth","tbBorderWidth","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","hasMargin","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_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","iconElement","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","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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","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 = '2018.1.117'.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 return customPrecision ? number.toExponential(precision) : number.toExponential();\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 (negative) {\n number = -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) {\n format = format[2] || format[0];\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 idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\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) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\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 = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 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 patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.css({\n display: '',\n position: ''\n });\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].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)[ \\/]([\\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.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;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\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) {\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 value = kendo.template($('#' + value).html());\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 (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 (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 ], 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, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', 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 _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 _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 this._trigger(TAP, touchInfo);\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 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 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 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 === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\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 }\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 + ' || \\'\\').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 };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n } else {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n that.submit = options.submit;\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 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;\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 getters[field] = getter(fromName || fieldName);\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.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 mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < 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 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 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) {\n if (!isArray(items)) {\n items = [items];\n }\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) {\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._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\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._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\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 items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\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, requestParams;\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._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n requestParams = arguments.length > 1 ? arguments[1] : undefined;\n data = that._readData(data, requestParams);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var 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 that._pristineData = data.slice(0);\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n data = that._observe(data);\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._readData(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 timestamp: new Date().getTime()\n });\n that._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 }\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 that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\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 if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(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 fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ 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({\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 _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n 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) {\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 if (isFunction(callback)) {\n callback();\n }\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n 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 break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\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 _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' && value != null) {\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 (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;\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 widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\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 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 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 });\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.then($.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.then($.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 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 (typeof promise.done != 'function' || typeof promise.fail != 'function') {\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 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 this.promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\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.chrome ? 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 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(), targetCenter;\n if (target.length && !target.is(':visible')) {\n target = delta < 0 ? target.prev() : target.next();\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', 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', 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: [CHANGE],\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 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', 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._graphics();\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._keyup, 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 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 this.element.removeClass(FOCUSEDSTATE);\n },\n _keydown: function (e) {\n var that = this;\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n if (that.options.enable) {\n that.element.addClass(SELECTEDSTATE);\n }\n if (!that._isNativeButton()) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n }\n that._click(e);\n }\n }\n },\n _keyup: function () {\n this.element.removeClass(SELECTEDSTATE);\n },\n _graphics: function () {\n var that = this, element = that.element, options = that.options, icon = options.icon, spriteCssClass = options.spriteCssClass, imageUrl = options.imageUrl, span, img, isEmpty;\n if (spriteCssClass || imageUrl || icon) {\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 (icon) {\n span = element.children('span.k-icon').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass('k-i-' + 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 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', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), 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 Widget.fn.init.call(that, element, options);\n options = that.options;\n that.dataSource = kendo.data.DataSource.create(options.dataSource);\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();\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 _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(dataSource.total());\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 });\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';\n wrapper.removeClass('k-popup').addClass(that._guid)[insertionMethod](options.appendTo).hide().kendoAnimate(animation.open || false);\n that._attachStaticEvents(options, wrapper);\n if (autoHideAfter > 0) {\n setTimeout(function () {\n that._hideStatic(wrapper);\n }, autoHideAfter);\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._isShownOnFocus()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && !this._isShownOnFocus()) {\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 _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that.options.showOn && that.options.showOn.match(/click/)) {\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 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._isShownOnFocus()) {\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 _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(), arrowBorder = parseInt(that.arrow.css('border-top-width'), 10), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2 - arrowBorder;\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 target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\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 this.popup.toggle();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(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 e.preventDefault();\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.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 km-widget';\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 }\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 if (that.options.resizable) {\n tool.element.appendTo(that.element).css('visibility', 'hidden');\n that._shrink(that.element.innerWidth());\n tool.element.css('visibility', 'visible');\n } else {\n tool.element.appendTo(that.element);\n }\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 if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.hide();\n item.toolbar.getParentGroup().refresh();\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 item.overflow.hide();\n item.overflow.getParentGroup().refresh();\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 };\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 };\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).focus(function () {\n var element = $(this).find(':kendoFocusable:first');\n if (element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n element[0].focus();\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;\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (items.last().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') {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus) {\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 e.preventDefault();\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n }\n this.userEvents.trigger('tap', { target: target });\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, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', HIDDENCLASS = 'k-hidden', GROUPHEADER = '.k-group-header', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', WIDTH = 'width', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, 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 that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\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 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 _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 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 that = this;\n if (that._clear) {\n this._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n var that = this;\n if (that._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\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 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 if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return;\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isValidFilterExpr(filter)) {\n newExpression.filters.push(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 _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _noData: function () {\n var noData = $(this.noData);\n var template = this.options.noDataTemplate;\n this.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n this.noData = null;\n return;\n }\n this.noData = $('
            ').appendTo(this.list);\n this.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderNoData: function () {\n var noData = this.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(this.noDataTemplate({ instance: this }));\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 _footer: function () {\n var footer = $(this.footer);\n var template = this.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n this.footer = null;\n return;\n }\n this.footer = $('
            ').appendTo(this.list);\n this.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _renderFooter: function () {\n var footer = this.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(this.footerTemplate({ instance: this }));\n this._angularElement(footer, 'compile');\n },\n _header: function () {\n var header = $(this.header);\n var template = this.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n this.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n this.header = header[0] ? header : null;\n this.list.prepend(header);\n this._angularElement(this.header, '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 ignoreCase = widgetOptions.ignoreCase;\n var field = widgetOptions.dataTextField;\n var expression = {\n value: ignoreCase ? options.word.toLowerCase() : options.word,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n that._open = options.open;\n that._filterSource(expression);\n },\n _clearButton: function () {\n if (!this._clear) {\n this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n }\n if (!this.options.clearButton) {\n this._clear.remove();\n }\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._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);\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) {\n that._old = value;\n } else {\n that._old = that.dataItem() ? that.dataItem()[that.options.dataValueField] : null;\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 _adjustListWidth: function () {\n var list = this.list, width = list[0].style.width, wrapper = this.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: this.options.autoWidth ? 'auto' : width,\n minWidth: width\n }).data(WIDTH, width);\n return true;\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 _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 },\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 that = this;\n that.popup = new ui.Popup(that.list, extend({}, that.options.popup, {\n anchor: that.wrapper,\n open: proxy(that._openHandler, that),\n close: proxy(that._closeHandler, that),\n animation: that.options.animation,\n isRtl: support.isRtl(that.wrapper),\n autosize: that.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._old, typeof 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._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 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('.k-item');\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 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) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
          • ';\n item += this.templates.template(dataItem);\n if (notFirstItem && context.newGroup) {\n item += '
            ' + this.templates.groupTemplate(context.group) + '
            ';\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 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) {\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 }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, 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 + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + ')', 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._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 = that._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 = that._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._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 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 : 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 = that._toDateObject(target.find('a'));\n that._class(FOCUSED, that._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) {\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 = that._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(that._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 = that._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 || that._toDateObject(that.selectable.value().first().find('a')), toDate = that._toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? that._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 = that._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 = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = that._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) {\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 = that._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 (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(that._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 if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\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(restrictValue(currentValue, options.min, options.max));\n }\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 ? that._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, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\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 to.insertAfter(that.element[0].firstChild);\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.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\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 to.css({\n position: 'static',\n top: 0,\n left: 0\n });\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 = that._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 _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 = that._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 _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\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;\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 that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #', { 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, 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 (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 content: options.content,\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;\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 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;\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 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;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\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 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, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
            ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
            ';\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 += weekNumber(weekNumberBuild(start));\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += 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 leapYear = 1904;\n var dateObject = new DATE(leapYear, month, date);\n dateObject.setFullYear(year);\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 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 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 }\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, template = kendo.template, activeElement = kendo._activeElement, DIV = '
            ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, 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 that._calendar();\n that.popup.open();\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 });\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 if (options.dateInput) {\n that._dateInput = new ui.DateInput(element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\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 if (that._dateInput) {\n that._dateInput.setOptions({\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\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(CLICK, 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 () {\n var that = this, element = that.element;\n that.dateView.toggle();\n if (!kendo.support.touch && 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 k-header').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 _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, 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).html(itemTemplate(data.item || {}));\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\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 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 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 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) {\n that._selectingValue = true;\n that.value(that._values, true).done(function () {\n that.bound(true);\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\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 _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 that.select([-1]);\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 if (!that._getRange(skip, take).length) {\n return null;\n }\n that.mute(function () {\n that.dataSource.range(skip, take);\n });\n return that._findDataItem(that.dataSource.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);\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, 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();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\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 that.focus(indices);\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 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 },\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.isFiltered() && value.length && item) {\n for (var i = 0; i < value.length; i++) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n value.splice(i, 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 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 value = this._valueGetter(this.dataItemByIndex(index));\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 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 });\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('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, 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 },\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 },\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 that._resetFocusItem();\n that.popup.open();\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 k-header').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', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', 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._enable();\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 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 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 },\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.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 },\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().click(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 _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('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that)).on('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 }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n wrapper.on('focusin' + ns, proxy(that._focusinHandler, that)).on('focusout' + ns, proxy(that._focusoutHandler, that));\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 } 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 k-header').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', 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._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 ignoreCase: true,\n animation: {},\n virtual: false,\n template: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n clearButton: true,\n syncValueAndText: true\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.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 _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, proxy(that._clearValue, that)).on(MOUSEDOWN, function (e) {\n e.preventDefault();\n });\n that.input.on('keydown' + ns, proxy(that._keydown, that)).on('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, 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 },\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 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 && !that.value() || isFiltered && that.selectedIndex === -1) {\n that.refresh();\n that._openPopup();\n that.listView.bound(false);\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 }\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) {\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 }\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 });\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.options.autoBind) {\n this._valueBeforeCascade = this._old;\n }\n if (idx === -1 && !dataItem) {\n text = this._accessor();\n if (this.options.syncValueAndText) {\n value = 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 if (this.text()) {\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 },\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._toggleCloseVisibility();\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) {\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 });\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 e.preventDefault();\n if (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.TAB && !that._move(e)) {\n that._search();\n } else if (key === keys.ESC && !that.popup.visible()) {\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 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 k-header').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 }\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 }\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 },\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 List.fn._activateItem.call(this);\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.persistTagList = false;\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.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.trigger(CHANGE);\n that.focus();\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('focus' + ns, proxy(that._inputFocus, that)).on('focusout' + ns, proxy(that._inputFocusout, that));\n that._clear.on('click' + 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.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 = true;\n that._filterSource();\n that._focusItem();\n } else if (that._allowOpening()) {\n that.popup._hovered = true;\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._toggleCloseVisibility();\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 },\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._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 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()[0]);\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n } else {\n if (e.shiftKey) {\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus()[0]) + 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()[0]);\n listView.focusPrev();\n if (!listView.focus()) {\n that.close();\n } else {\n if (e.shiftKey) {\n that._selectRange(activeItemIdx, listView.getElementIndex(listView.focus()[0]) + 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 && key === keys.A && visible) {\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 that._select(listView.focus()).done(function () {\n that._change();\n that._close();\n });\n e.preventDefault();\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.trigger(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) {\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) {\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 listView.value([]);\n that._change();\n that._close();\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.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 tagList[0].removeChild(tagList[0].children[removedItem.position]);\n that._setOption(getter(removedItem.dataItem), false);\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 h *= 60;\n s *= 100;\n l *= 100;\n }\n return new HSL(h, s, l, 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 ref = this;\n var h = ref.h;\n var s = ref.s;\n var l = ref.l;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n h /= 360;\n s /= 100;\n l /= 100;\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 };\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 + callout.height() + margin;\n } else {\n top -= parseInt((height - owner._outerSize(element)) / 2, 10);\n left -= width + callout.width() + margin;\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 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 that._initialOptions = extend({}, options);\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._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 that.value(value !== NULL ? value : element.val());\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 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 arrows.wrapAll('');\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 });\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 {\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) {\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, value = that._parse(element.val()) || 0;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value += that.options.step * step;\n that._update(that._adjust(value));\n that._typing = false;\n that.trigger(SPIN);\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, nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
              ' + '#=message#
              ', CHANGE = 'change';\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 attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\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', 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;\n function defined(x) {\n return typeof x != 'undefined';\n }\n function constrain(value, low, high) {\n return Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), parseInt(low, 10));\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\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 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) && (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._dimensions();\n }\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 dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n this.title(options.title);\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 },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position;\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 _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 cachedOptions = JSON.parse(JSON.stringify(options));\n extend(options.position, this.options.position);\n extend(options.position, cachedOptions.position);\n Widget.fn.setOptions.call(this, options);\n var scrollable = this.options.scrollable !== false;\n this.restore();\n this._dimensions();\n this._position();\n this._resizable();\n this._draggable();\n this._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = this.options.visible !== false;\n this._overlay(options.modal && visible);\n }\n this.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 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 = that.options.isMaximized, isMinimized = that.options.isMinimized, newWidth, newHeight, w, h;\n if (keyCode == keys.ESC && that._closable()) {\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 if (options.draggable && !e.ctrlKey && !e.altKey && !isMaximized) {\n offset = kendo.getOffset(wrapper);\n if (keyCode == keys.UP) {\n handled = wrapper.css('top', offset.top - distance);\n } else if (keyCode == keys.DOWN) {\n handled = wrapper.css('top', offset.top + distance);\n } else if (keyCode == keys.LEFT) {\n handled = wrapper.css('left', offset.left - distance);\n } else if (keyCode == keys.RIGHT) {\n handled = wrapper.css('left', offset.left + distance);\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 newHeight = wrapper.height() + distance;\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n newWidth = wrapper.width() + distance;\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.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 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 newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - parseInt(wrapper.css('paddingTop'), 10)) / 2);\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 (text) {\n var that = this, wrapper = that.wrapper, options = that.options, titleBar = wrapper.children(KWINDOWTITLEBAR), title = titleBar.children(KWINDOWTITLE), titleBarHeight;\n if (!arguments.length) {\n return title.html();\n }\n if (text === false) {\n wrapper.addClass('k-window-titleless');\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar(options));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n title.html(kendo.htmlEncode(text));\n }\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = text;\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, doc = $(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', 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._documentScrollTop = doc.scrollTop();\n that._documentScrollLeft = 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 } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), doc = $(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 }\n if (that.options.isMaximized) {\n that._enableDocumentScrolling();\n if (that._documentScrollTop && that._documentScrollTop > 0) {\n doc.scrollTop(that._documentScrollTop);\n }\n if (that._documentScrollLeft && that._documentScrollLeft > 0) {\n doc.scrollLeft(that._documentScrollLeft);\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], 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 = $(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 doc = $(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 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 that._enableDocumentScrolling();\n if (this._documentScrollTop && this._documentScrollTop > 0) {\n doc.scrollTop(this._documentScrollTop);\n }\n if (this._documentScrollLeft && this._documentScrollLeft > 0) {\n doc.scrollLeft(this._documentScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n this.wrapper.removeAttr('tabindex');\n this.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, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left,\n top: position.top\n });\n wrapper.css({\n left: 0,\n top: 0,\n position: 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n this._documentScrollTop = doc.scrollTop();\n this._documentScrollLeft = doc.scrollLeft();\n that._stopDocumentScrolling();\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n _stopDocumentScrolling: function () {\n var that = this;\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 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 return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (!that.options.isMaximized) {\n wrapper.css({\n position: 'fixed',\n top: top - win.scrollTop(),\n left: left - win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that._isPinned = true;\n that.options.pinned = true;\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (!that.options.isMaximized) {\n wrapper.css({\n position: '',\n top: top + win.scrollTop(),\n left: left + win.scrollLeft()\n });\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n that._isPinned = false;\n that.options.pinned = false;\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), w, h;\n if (!that.options.isMaximized) {\n return;\n }\n var lrBorderWidth = parseInt(wrapper.css('border-left-width'), 10) + parseInt(wrapper.css('border-right-width'), 10);\n var tbBorderWidth = parseInt(wrapper.css('border-top-width'), 10) + parseInt(wrapper.css('border-bottom-width'), 10);\n w = wnd.width() / zoomLevel - lrBorderWidth;\n h = wnd.height() / zoomLevel - parseInt(wrapper.css('padding-top'), 10) - tbBorderWidth;\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(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).appendTo(this.appendTo).append(contentHtml).find('iframe:not(.k-content)').each(function (index) {\n this.src = iframeSrcAttributes[index];\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 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 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 that.containerOffset = 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, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, 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 newWidth = x - initialPosition.left - containerOffset.left;\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 wrapper.css({\n left: windowRight - newWidth - containerOffset.left - (that._relativeElMarginLeft || 0),\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 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 wrapper.css({\n top: windowBottom - newHeight - containerOffset.top - (that._relativeElMarginTop || 0),\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, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART) || !wnd.options.draggable;\n if (this._preventDragging) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: e.x.client,\n top: e.y.client\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n if (actions.length > 0) {\n wnd.minLeftPosition = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeftPosition = 20 - outerWidth(element);\n }\n wnd.minLeftPosition -= containerOffset.left;\n wnd.minTopPosition = -containerOffset.top;\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var wnd = this.owner;\n var position = wnd.options.position;\n position.top = Math.max(e.y.client - wnd.startPosition.top, wnd.minTopPosition);\n position.left = Math.max(e.x.client - wnd.startPosition.left, wnd.minLeftPosition);\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (e.x.client - wnd.initialPointerPosition.left) + 'px, ' + (e.y.client - 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 if (this._preventDragging) {\n return;\n }\n $(this.owner.wrapper).css(this.owner.options.position).css('transform', '');\n this._finishDrag();\n this.owner.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) {\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('form');\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;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
                ' + element.html() + '
                ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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}));"]}