{"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","shadows","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","isRtl","parent","hasClass","style","is","show","percentRegExp","test","outerWidth","outerHeight","boxSizing","mozBoxSizing","webkitBoxSizing","opera","addClass","marginLeft","paddingLeft","paddingRight","paddingBottom","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","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","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","sign","pointers","msPointers","top","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","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","offset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","transforms","elementProto","mobileOS","documentMode","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","MSPointerEvent","PointerEvent","HTMLElement","hasHW3D","WebKitCSSMatrix","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","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","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","down","up","in","out","enabled","display","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","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","fromLocalOffset","toLocalOffset","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","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","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","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","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","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","isPlainObject","XmlDataReader","idField","xmlParse","model","parse","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","item","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","collection","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","prop","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","newLineRegExp","wrapAll","json","object","howMany","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","op","ignore","doesnotstartwith","doesnotendwith","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","orderBy","orderByDescending","compiled","predicate","allData","groupBy","currentValue","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","setup","error","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","transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","online","sync","Deferred","resolve","offlineData","_isServerGrouped","_push","_readData","_flatData","getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","created","updated","promises","_sendSubmit","_send","when","then","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","status","reject","deferred","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","itemIds","_aggregateResult","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_changeHandler","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","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","rangeLength","startOffset","transportOptions","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","append","loaded","level","_childrenLoaded","load","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","useRanges","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","multiple","single","position","isFixed","originalPosition","dX","dY","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","opacity","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","content","_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","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","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","insertAfter","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","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","_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","Pager","pageSizes","pageItems","linkTemplate","selectTemplate","currentPageTemplate","_refreshHandler","previousNext","of","allPages","itemsPerPage","DropDownList","kendoDropDownList","_refreshClick","_toggleActive","buttonCount","morePages","setDataSource","reminder","hasAll","selectAll","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","Popup","parentPopup","collisions","downEvent","anchor","_hovered","animation","open","close","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_openAnimation","_showDirClass","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","parentsUntil","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","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","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","_mouseenter","autoHide","_mouseleave","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","arrowBorder","elementOffset","offsetAmount","adjustPopupWidth","computedWidth","fontFamily","min-width","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","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","isEnabled","twin","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","toggleHandler","propagate","getParentGroup","isChild","_addGraphics","align","hasIcon","showIcon","overflowHidden","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","main","splitButton","kendoPopup","li","altKey","menuButtons","rootUid","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","isOverflowAnchor","containerWidth","_stretch","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","getSelectedOption","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","removeFiltersForField","STATIC_LIST_NS","StaticList","ID","FOCUSED","HOVER","LOADING","HIDDENCLASS","CASCADE","isIE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","tabIndex","aria-hidden","_listMousedown","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_editable","_listOptions","currentOptions","listBoundHandler","_listBound","_listChange","_activateItem","_deactivateItem","groupTemplate","fixedGroupTemplate","$angular","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","_clearFilter","_filterSource","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","footer","header","_allowOpening","_old","_ignoreCase","widgetOptions","_open","_inputValue","_typingTimeout","enforceMinLength","minLength","_state","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_value","_aria","suggest","_oldIndex","_typing","typing","_enable","_dataValue","_offsetHeight","prevAll","_height","offsetTop","popups","footerHeight","_adjustListWidth","borderLeftWidth","borderRightWidth","autoWidth","minWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","groupHeader","padding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_userTriggered","_triggerChange","_valueBeforeCascade","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_accessorInput","_accessorSelect","_custom","custom","_customOption","_hideBusy","_busy","_arrow","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","_fetch","dataItemByIndex","getElementIndex","_focusElement","focusout","scrollWith","_fetchData","hasItems","_options","optionLabel","dataText","dataValue","htmlElement","formId","parentElement","_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","_current","_get","focusIndex","skipUpdate","_skipUpdate","indices","filtered","singleSelection","selectedIndices","added","isFiltered","_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","cellsPerRow","perRow","cellTemplate","emptyCellTemplate","DATE","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","multiplier","mousetoggle","MOUSEENTER","FOCUS","prevent","getCalendarInfo","depth","extractFormat","MONTH","dates","makeUnselectable","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","MIN","SLIDE","CENTURY","NAVIGATE","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","decade","century","Calendar","unescape","link","_toDateObject","_focusView","focusOnNav","_cellID","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","currentView","_oldTable","_changeView","_animate","_class","isDisabled","_nextNavigatable","navigatableDate","active","_horizontal","viewWidth","float","margin-left","unwrap","_vertical","disabledDate","links","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","parseFormats","DatePicker","DIV","SPAN","READONLY","DEFAULT","STATEDISABLED","HOVEREVENTS","MAX","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","_setOptions","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_oldText","_updateARIA","_icon","aria-expanded","aria-owns","_update","ARIATemplate","_dateIcon","_inputWrapper","dateChanged","valueUpdated","textFormatted","aria-controls","formattedValue","isSameType","_ariaTemplate","indexOfWordAtCaret","caretIdx","wordAtCaret","replaceWordAtCaret","defaultSeparator","words","placeholderSupported","ARIA_READONLY","AutoComplete","_loader","_clearButton","_keypress","_search","_prev","autocomplete","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","clearButton","_progressHandler","_separator","_mute","_unifySeparators","_last","wordIndex","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","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_filterPaste","_focusinHandler","_focusoutHandler","shouldTrigger","isIFrame","self","focusedItem","_getElementDataItem","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","dataLength","isInLoop","fromCharCode","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","optionLabelText","STATE_REBIND","_input","_setText","_pasteTimeout","_arrowClick","_inputFocus","_inputFocusout","_inputPaste","_openPopup","_scrollToFocusedItem","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","maxLength","accessKey","LI","ACCEPT","FILTER","REBIND","DESELECT","FOCUSEDCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_tagTemplate","tagMode","autoClose","maxSelectedItems","itemTemplate","tagTemplate","currentTag","_currentTag","_selectedItemChange","_initialValues","optionsMap","valueGetter","tagTextTemplate","notInput","closeButton","_removeTag","tag","customIndex","_close","_tagListClick","_clearClick","_retrieveData","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_showBusyHandler","skipCaret","caretPos","textWidth","wrapperWidth","selectedItems","_buildSelectedItems","_selectedItemIndex","_angularTagItems","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","isSelected","_innerWrapper","defaultTemplate","hasDataSource","isMultiple","computedStyles","parseColor","color","nothrow","_Color","namedColorRegexp","_RGB","Color","namedColors","_Bytes","hex","n","hue2rgb","p","q","_HSV","_HSL","re","processor","channels","resolveColor","r","normalizeByte","toHex","padDigit","brightness","percBrightness","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","toHSV","toRGB","toBytes","toCss","toCssRgba","rgb","toDisplay","diff","c2","NaN","c1","h","toHSL","l","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","_distance","_isHorizontal","_sizeFn","_outerSize","tooltip","_createHtml","_trackDiv","_setTrackDivWidth","_maxSelection","_sliderItemsInit","_keyMap","37","40","39","38","35","36","33","largeStep","34","_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","triggerEvent","relative","KEYS","BACKGROUNDCOLOR","ITEMSELECTEDCLASS","SIMPLEPALETTE","WEBPALETTE","APPLY_CANCEL","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","_getHSV","_applyIEFilter","_hueSlider","_opacitySlider","_hsvRect","_hsvHandle","preview","track","backgroundImage","hueChange","opacityChange","kendoSlider","slide","rw","rh","_svChange","hsvRect","hsvHandle","_hsvEvents","hue","handlePosition","dontChangeInput","ColorPicker","_selector","innerWrapper","toolIcon","_getPopup","_isInputTypeColor","selectorType","buttonHtml","truncate","INPUT","SPIN","TOUCHEND","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_paste","adjusted","_adjust","_focusin","arrows","_spinning","_focusing","groupRegExp","extractRegExp","_format","caretPosition","_culture","CLASSNAME","_initialTitle","aria-valuemin","aria-valuemax","_key","_step","isNumPadDecimal","_numericRegex","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","editor","isObject","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","DATABOUND","DATABINDING","FOCUSSELECTOR","KEDITITEM","EDIT","REMOVE","SAVE","ListView","_itemId","_selectable","_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","INPUT_EVENT_NAME","MaskedTextBox","_rules","_tokenize","_togglePrompt","_emptyMask","_oldValue","_timeoutId","_maskLength","clearPromptChar","unmaskOnPost","promptChar","0","9","#","L","?","&","C","A","_unbindInput","_bindInput","_formElement","_submitHandler","unmasked","_unmask","emptyMask","_mask","_propertyChange","_pasting","pasted","backward","chr","chrIdx","tokenIdx","tokensLength","maskChars","getEffectDirection","parseDirection","updateItemClasses","IMG","IMAGE","LINK","DEFAULTSTATE","excludedNodesRegExp","updateArrow","updateFirstLast","MENU","ContextMenu","TIMER","ZINDEX","POINTERDOWN","allPointers","KENDOPOPUP","HOVERSTATE","menuSelector","groupSelector","popupSelector","allItemsSelector","disabledSelector","itemSelector","linkSelector","exclusionSelector","nextSelector","lastSelector","templateSelector","touchPointerTypes","itemWrapper","image","sprite","rendering","wrapperCssClass","firstLevel","itemCssAttributes","imageCssAttributes","imageAttr","contentCssAttributes","contentAttr","defaultClasses","textClass","textAttributes","arrowClass","encoded","groupAttributes","expanded","groupCssClass","Menu","_initData","_updateClasses","_animations","nextItemZIndex","_focusProxy","_preventClose","_removeHoverItem","_checkActiveElement","openOnClick","clicked","_documentClickHandler","_documentClick","closeOnClick","hoverDelay","popupCollision","_toggleDisabled","referenceItem","inserted","_insert","plain","groupData","renderGroup","renderItem","windowHeight","setScrolling","parentHorizontal","_triggerEvent","maxHeight","dontClearClose","_isRootItem","isEnter","_closurePrevented","hoverItem","_hoverItem","_findRootParent","hasFocus","oldHoverItem","_oldHoverItem","nonContentGroupsSelector","delegateTarget","pointerType","_","openHandle","childGroup","childGroupVisible","formNode","targetHref","sampleHref","isLink","isLocalLink","isTargetLink","shouldCloseTheRootItem","enterKey","_moveHover","belongsToVertical","_itemBelongsToVertival","_itemHasChildren","_itemDown","_itemUp","_itemEsc","menuIsVertical","nextItem","_itemRight","parentItem","nextAll","_itemLeft","menu","renderContent","subGroup","renderItems","_marker","_wire","alignToAnchor","_showProxy","_closeProxy","_closeTimeoutProxy","_showHandler","_eventOrigin","_targetChild","normalClick","sameTarget","containment","_triggerProxy","LINKSELECTOR","ACTIVECLASS","HREF","ITEM","GROUP","VISIBLEGROUP","EXPAND","CONTENT","COLLAPSE","GROUPS","CONTENTS","DISABLEDCLASS","SELECTEDCLASS","SELECTEDSELECTOR","HIGHLIGHTCLASS","ACTIVEITEMSELECTOR","clickableItems","disabledItems","selectableItems","defaultState","SINGLE","contentUrl","contentAttributes","PanelBar","_first","expand","_angularCompile","expandMode","_angularCleanup","useAnimation","animBackup","_animating","_collapseAllExpanded","_toggleItem","_updateSelected","reload","focused","isReferenceItem","_updateItemsClasses","panels","_updateItemClasses","wrapElement","contentUrls","isAnchor","isVisible","_toggleGroup","animationSettings","hasCollapseAnimation","_animationCallback","stopExpand","contentElement","statusIcon","loadingIconTimeout","panelBar","DEFAULTMIN","DEFAULTMAX","DEFAULTVALUE","DEFAULTCHUNKCOUNT","KPROGRESSBAR","KPROGRESSBARREVERSE","KPROGRESSBARINDETERMINATE","KPROGRESSBARCOMPLETE","KPROGRESSWRAPPER","KPROGRESSSTATUS","KCOMPLETEDCHUNK","KUPCOMINGCHUNK","KSTATEDISABLED","PROGRESSTYPE","PERCENT","CHUNK","COMPLETE","HUNDREDPERCENT","DEFAULTANIMATIONDURATION","PRECISION","progressStatus","ProgressBar","_progressProperty","_fields","_validateValue","_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","toggleButton","_registerBreakpoint","_mediaQuery","_registerStyle","breakpoint","head","styleSheet","createTextNode","prevented","updateTabClasses","tabs","ACTIVESTATE","TABONTOP","tabGroup","scrollButtonHtml","buttonClass","iconClass","CONTENTURL","NAVIGATABLEITEMS","HOVERABLEITEMS","TabStrip","_tabPosition","_scrollable","_keyDownProxy","wr","setActive","contentHolder","activateTab","_endItem","endItem","rtl","tab","dataContentField","dataContentUrlField","dataImageUrlField","dataUrlField","dataSpriteCssClass","tabPosition","collapsible","scrollable","scrollWrap","_scrollableModeActive","_scrollPrevButton","_scrollNextButton","ajaxRequest","_create","_updateContentElements","referenceTab","referenceContent","activeItem","activeTab","contentElements","tabStripID","currentIndex","currentContent","contentAnimators","tabsHeight","_setContentElementsDimensions","contentDivs","activeDiv","marginStyleProperty","minHeight","_sizeScrollWrap","deactivateTab","wrapperOffsetWidth","tabGroupScrollWidth","scrollPrevButton","scrollNextButton","_scrollableAllowed","_nowScrollingTabs","marginRight","_scrollTabsByDelta","_toggleScrollButtons","_scrollTabsToItem","itemPosition","currentScrollOffset","itemOffset","tabGroupWidth","tabGroupPadding","finish","scrLeft","hasCloseAnimation","neighbours","oldTab","visibleContents","isAjaxContent","showContentElement","showContent","inRequest","abort","idTest","scrollContainer","halfWidth","fakeProgress","endState","oldProgressAnimation","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","setMinutes","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","low","high","Infinity","buttonKeyTrigger","PopupBox","Alert","kendoAlert","Confirm","kendoConfirm","Prompt","kendoPrompt","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","KDIALOG","KWINDOW","KICONCLOSE","KCONTENTCLASS","KCONTENT","KTITLELESS","KDIALOGTITLE","KDIALOGTITLEBAR","KBUTTONGROUP","KALERT","KCONFIRM","KPROMPT","KTEXTBOX","KOVERLAY","INITOPEN","OK_CANCEL","okText","overlaySelector","DialogBase","_init","_centerCallback","_center","wrapperTemplate","_createDialog","_defaultFocus","_dimensions","_tabKeyTrap","toFront","_triggerInitOpen","_overlay","_focusDialog","closable","_closeClick","_closeKeyHandler","_setElementMaxHeight","maxWidth","_setElementHeight","paddingBox","elementMaxHeight","_paddingBox","_uiHeight","actionbar","actionbarHeight","titlebar","titlebarHeight","overlay","_waiAriaOverlay","_removeWaiAriaOverlay","_overlayedNodes","jthis","hiddenValue","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","trap","Dialog","alertWrapper","_ensureContentId","_ariaDescribedBy","_initFocus","_chooseEntryFocus","alert","confirmDialog","confirm","_createPrompt","promptContainer","promptInputContainer","promptDialog","prompt","_keepInTrap","removeTrap","focusableItems","focusableItemsCount","focusedItemIndex","executableScript","WindowResizing","_preventDragging","_draggable","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","WindowDragging","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","Window","windowContent","suppressActions","_createWindow","_buttonEnter","_buttonLeave","_windowActionHandler","aria-labelledby","_onDocumentResize","toggleMaximization","resizeHandle","dragging","_actions","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","w","_actionForIcon","k-i-close","k-i-maximize","k-i-minimize","k-i-restore","k-i-refresh","k-i-pin","k-i-unpin","titleBarHeight","titleBar","doc","_activate","_documentScrollTop","_documentScrollLeft","suppressAnimation","_deactivate","_actionable","_shouldFocus","windowTop","currentWindow","restoreOptions","_sizingAction","actionId","maximize","minimize","unpin","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","lineHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","arr1","arr2","ITEMCHANGE","reshift","placeholderTemplate","GROUPITEM","isActivePromise","VIRTUALLIST","LIST","HEADER","VIRTUALITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","deferredRange","itemCount","defs","pages","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_getIndecies","_deselectCurrentValues","_listCreated","_getElementByDataItem","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","flatGroups","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","_currentGroup","_range","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","elementIndex","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","_clickHandler","firstItem","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","responseText","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","_initialHeight","defaultTitle","_hideBar","COMMAND","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","headers","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","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","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","originalElement","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","$element","roleattr","Editor","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","isString","angularDataItem","templateSettings","col","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templateName","attrName","outerHTML","cloneEvent","initCustomEvent","defaultPrevented","expose","props","registerElement","newElement","bindEvents","EVENT_PREFIX","attachedCallback","getPrototypeOf","detachedCallback","registered","major","numerictextbox","datepicker","datetimepicker","timepicker","colorpicker","maskedtextbox","dropdownlist","mobilebutton","mobilebackbutton","mobiledetailbutton","listview","mobilelistview","treeview","contextmenu","actionsheet","elementName","System","__decorate","__metadata","decorators","Reflect","metadata","exports_1","angular2_1","KendoValueAccessor","_angular2_1","execute","cd","elementRef","_this","onTouched","nativeElement","valueAccessor","writeValue","registerOnChange","registerOnTouched","Directive","NgControl","ElementRef"],"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 = '2016.3.1103'.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 ? 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 parts.push(integer.substring(0, idx));\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.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) {\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 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 kendo.parseDate = function (value, formats, culture) {\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);\n if (date) {\n return date;\n }\n }\n return date;\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, isRtl = element.css('direction') == 'rtl';\n if (!element.parent().hasClass('k-animation-container')) {\n var shadows = getShadows(element), width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n if (browser.opera) {\n shadows.left = shadows.right = shadows.bottom = 5;\n }\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = element.outerWidth();\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = element.outerHeight();\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height,\n marginLeft: shadows.left * (isRtl ? 1 : -1),\n paddingLeft: shadows.left,\n paddingRight: shadows.right,\n paddingBottom: shadows.bottom\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.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: element.outerWidth(),\n height: element.outerHeight(),\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) {\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 support.msPointers = window.MSPointerEvent;\n support.pointers = window.PointerEvent;\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 document.documentElement.style || 'msPerspective' in document.documentElement.style;\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.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\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 document.documentElement.style.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 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 }());\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 result = element[type]();\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset + sign * 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 value = kendo.template($('#' + value).html());\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) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\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.ui.progress.messages.loading + '
').width('100%').height('100%').css('top', container.scrollTop()).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 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 return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 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 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 date.getTime() - getDate(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 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 element.setSelectionRange(start, end);\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 (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 = typeof e.decode === 'undefined';\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 element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\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 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, 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 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 data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\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 }\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\\((.*?)\\)\\/$/, newLineRegExp = /(\\r+|\\n+)/g, quoteRegExp = /(?=['\\\\])/g;\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) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(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) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(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 return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\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 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 !== '_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 }\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 if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\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 },\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(value) {\n return value.replace(quoteRegExp, '\\\\').replace(newLineRegExp, '');\n }\n function operator(op, a, b, ignore) {\n var date;\n if (b != null) {\n if (typeof b === STRING) {\n b = quote(b);\n date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = '\\'' + b.toLowerCase() + '\\'';\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = '\\'' + 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 return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n if (typeof value == 'string') {\n return '\\'' + quote(value) + '\\'';\n }\n return '' + 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: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == 0';\n },\n doesnotstartwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == -1';\n },\n endswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') >= 0';\n },\n doesnotendwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') < 0';\n },\n contains: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') >= 0';\n },\n doesnotcontain: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') == -1';\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 || ' + a + ' === undefined)';\n },\n isnotnull: function (a) {\n return '(' + a + ' !== null && ' + a + ' !== undefined)';\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) {\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 return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\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) });\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) {\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 query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (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 idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (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 },\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);\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 var idx, length, data = this._flatData(this._data);\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 return model;\n },\n pushCreate: function (items) {\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.add(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 }\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 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 this._updateRangesLength();\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);\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);\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 that._accept(arguments[idx]);\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);\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);\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 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 }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\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.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;\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 data = that._readData(data);\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 that._data = that._observe(data);\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) {\n var that = this, start = 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 return Query.process(data, options);\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 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) {\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 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);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\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 var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\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 result, found, 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 if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\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 that.hasChildren = !!hasChildren.call(that, that);\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 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 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 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 _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 bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\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, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? element.outerHeight() : element.outerWidth()), 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 = element.outerWidth();\n result.height = element.outerHeight();\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', 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 ],\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;\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 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);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || 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), minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - element.outerWidth(true), maxY = minY + container.height() - element.outerHeight(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, 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 (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, 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 || offsetDelta.left < 0)) {\n direction = 'prev';\n } else if (axisDelta.x > 0 && (moveOnDragEnter || offsetDelta.left > 0)) {\n direction = 'next';\n }\n } else {\n if (axisDelta.y < 0 && (moveOnDragEnter || offsetDelta.top < 0)) {\n direction = 'prev';\n } else if (axisDelta.y > 0 && (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 += lastItem.outerHeight();\n lastItemOffset.left += lastItem.outerWidth();\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 += element.outerHeight() / 2;\n center.left += element.outerWidth() / 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-expand,span.k-icon.k-i-collapse', 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 });\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 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);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE);\n } else {\n that.value(target);\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 () {\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);\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) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE);\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(INPUTSELECTOR)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(INPUTSELECTOR)) {\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) {\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);\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 + element.outerWidth();\n elementPosition.bottom = elementPosition.top + element.outerHeight();\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-selected';\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 that._tabindex();\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 (!that._isNativeButton()) {\n if (e.keyCode == keys.ENTER || e.keyCode == keys.SPACEBAR) {\n if (e.keyCode == keys.SPACEBAR) {\n e.preventDefault();\n if (that.options.enable) {\n that.element.addClass(SELECTEDSTATE);\n }\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 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-seek-w', LAST = '.k-i-seek-e', PREV = '.k-i-arrow-w', NEXT = '.k-i-arrow-e', CHANGE = 'change', NS = '.kendoPager', CLICK = 'click', KEYDOWN = 'keydown', DISABLED = 'disabled', 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 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).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 this.list.toggleClass('k-state-expanded');\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, support = kendo.support, getOffset = kendo.getOffset, 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), 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] || BODY);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\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 });\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);\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);\n wrap.css({ overflow: HIDDEN });\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 viewportWidth -= 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, wrapper.outerHeight() + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, wrapper.outerWidth() + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = element.outerHeight();\n var wrapperHeight = wrapper.outerHeight();\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());\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 = element.outerWidth(), height = element.outerHeight(), anchorWidth = anchor.outerWidth(), anchorHeight = anchor.outerHeight(), 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 }(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 };\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 = '
      ' + '#=typeIcon#' + '#=content#' + 'Hide' + '
      ', 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 (popup.options.anchor !== document.body && popup.options.origin.indexOf(RIGHT) > 0) {\n popup.bind('open', function () {\n var shadows = kendo.getShadows(popup.element);\n setTimeout(function () {\n popup.wrapper.css('left', parseFloat(popup.wrapper.css('left')) + shadows.left + shadows.right);\n });\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 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({ margin: 0 }, 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.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 };\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 restoreTitleAttributeForElement(element);\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 }\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 }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n saveTitleAttributeForElement(element);\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)).on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n if (this.options.autoHide) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, 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 effects: 'fade:out',\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\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|focus/)) {\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) {\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 if (this.popup) {\n var element = $(e.currentTarget), offset = element.offset(), pageX = e.pageX, pageY = e.pageY;\n offset.right = offset.left + element.outerWidth();\n offset.bottom = offset.top + element.outerHeight();\n if (pageX > offset.left && pageX < offset.right && pageY > offset.top && pageY < offset.bottom) {\n return;\n }\n this.popup.close();\n } else {\n restoreTitle($(e.currentTarget));\n }\n clearTimeout(this.timeout);\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, 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', 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 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) {\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, 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 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 }\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 options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + '_optionlist').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: adjustPopupWidth,\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function () {\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\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;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.mainButton = new OverflowButton($.extend({ isChild: true }, 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 isChild: true\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 adjustPopupWidth() {\n var anchor = this.options.anchor, computedWidth = anchor.outerWidth(), width;\n kendo.wrap(this.element).addClass('k-split-wrapper');\n if (this.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (this.element.outerWidth() - this.element.width());\n } else {\n width = computedWidth;\n }\n this.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n }\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) * ((wrapper.outerWidth() - 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 }\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.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');\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 if (e.shiftKey && items.index(element) === 1) {\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 this.wrapper.prev(':kendoFocusable').focus();\n }\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 },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton'), isDefaultPrevented;\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n if (splitButton.popup.element.is(':visible')) {\n isDefaultPrevented = this.trigger(CLOSE, { target: splitButton.element });\n } else {\n isDefaultPrevented = this.trigger(OPEN, { target: splitButton.element });\n }\n if (!isDefaultPrevented) {\n splitButton.toggle();\n }\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 += $(this).outerWidth(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() + item.outerWidth(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, 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-loading-hidden', 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 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 change: proxy(that._listChange, 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);\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.listView.value([]);\n this._clearText();\n this._accessor('');\n if (this._isFilterEnabled()) {\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 expression = {\n filters: expression.filters || [],\n logic: 'and'\n };\n if (filter) {\n expression.filters.push(filter);\n }\n if (that._cascading) {\n this.listView.setDSFilter(expression);\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: expression });\n 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 _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 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 },\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 (index !== undefined && index !== that._oldIndex) {\n trigger = true;\n }\n if (trigger) {\n that._old = value;\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 if (element.hasClass('k-list-filter')) {\n offsetHeight += element.children().outerHeight();\n } else {\n offsetHeight += element.outerHeight();\n }\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 = $(that.footer).outerHeight() || 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) || wrapper.outerWidth();\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 - (list.outerWidth() - 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('.k-group-header');\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 }));\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._old !== that.value() || that._oldIndex !== that.selectedIndex) {\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 }\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 _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('aria-selected').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');\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');\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 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', ['kendo.core'], 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: ['core']\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, 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 }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, 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)', 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', 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._header();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar').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.options.disableDates(value) && that._view.name == 'month') {\n return;\n }\n that._click($(link));\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 normalize(options);\n value = parse(options.value, options.format, options.culture);\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 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 url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\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 },\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._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 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, selectedValue = that._value, 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 disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\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 }, that[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] && selectedValue && !that.options.disableDates(selectedValue)) {\n that._class('k-state-selected', selectedValue);\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n value: function (value) {\n var that = this, view = that._view, options = that.options, old = that._view, min = options.min, max = options.max;\n if (value === undefined) {\n return that._value;\n }\n if (value === null) {\n that._current = new Date(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(value)) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass('k-state-selected');\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\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 (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 }\n } else {\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.ENTER) {\n that._click($(that._cell[0].firstChild));\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 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 if (isInRange(currentValue, min, max)) {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\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 = from.outerWidth();\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: from.prev().outerHeight(),\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) {\n return this._table.find('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) {\n disabledDate = that.options.disableDates(date);\n }\n cell = that._table.find('td:not(.' + OTHERMONTH + ')').removeClass(className).filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n }).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.options.disableDates(value) && that._view.name == 'month') {\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 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 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 = new DATE(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, empty = month.empty;\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty })\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 new DATE(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(), 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\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, 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 = new DATE(), html = '';\n for (; idx < 7; idx++) {\n html += '';\n }\n today = new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n min: new DATE(min.getFullYear(), min.getMonth(), min.getDate()),\n max: new DATE(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 });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = new DATE(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: new DATE(min.getFullYear(), min.getMonth(), 1),\n max: new DATE(max.getFullYear(), max.getMonth(), 1),\n start: new DATE(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 new DATE(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return new DATE(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: new DATE(year - year % 10 - 1, 0, 1),\n min: new DATE(options.min.getFullYear(), 0, 1),\n max: new DATE(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 new DATE(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(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: new DATE(year - year % 100 - 10, 0, 1),\n min: new DATE(minYear, 0, 1),\n max: new DATE(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 new DATE(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return new DATE(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, length = options.cells || 12, cellsPerRow = options.perRow || 4, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
            ' + shortNames[idx] + '
            ';\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n }\n start = new DATE(start.getFullYear(), start.getMonth(), start.getDate(), 0, 0, 0);\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 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 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 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 && $.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 && $.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.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.datepicker', [\n 'kendo.calendar',\n 'kendo.popup'\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 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 that._current = calendar._move(e);\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 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 ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#'\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 (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 }\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 that.element.val(kendo.toString(date || value, options.format, options.culture));\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.autocomplete', [\n 'kendo.list',\n 'kendo.mobile.scroller'\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 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 },\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 },\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 },\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 isActive = that.element[0] === activeElement();\n var action;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.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 _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 },\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 }\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.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 }\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._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 this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.element);\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\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: '100%',\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 ], 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.optionLabel.off();\n },\n open: function () {\n var that = this;\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) {\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.popup.one('activate', that._focusInputHandler);\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 if (that.selectedIndex === -1 && that.text()) {\n that.text('');\n that._accessor('', -1);\n }\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 null;\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 filtered = that._state === STATE_FILTER;\n var isIFrame = window.self !== window.top;\n var focusedItem = that._focus();\n var dataItem = that._getElementDataItem(focusedItem);\n var shouldTrigger;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n var done = function () {\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 shouldTrigger = !filtered && focusedItem && that._value(dataItem) !== that.value();\n if (shouldTrigger && !that.trigger('select', {\n dataItem: dataItem,\n item: focusedItem\n })) {\n that._select(focusedItem, !that.dataSource.view().length).done(done);\n } else {\n done();\n }\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._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 }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\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 }\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) {\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 listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && this.options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (this.options.optionLabel) {\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) {\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-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 ], 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', 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;\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 },\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 },\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(options);\n this._accessors();\n this._aria();\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 _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._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 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) {\n that.refresh();\n that._openPopup();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._openPopup();\n that._focusItem();\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 isFirstPage = skip === undefined || skip === 0;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.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 (idx === -1 && !dataItem) {\n value = text = this.input[0].value;\n this.listView.focus(-1);\n } else {\n if (dataItem) {\n value = this._dataValue(dataItem);\n text = this._text(dataItem);\n }\n if (value === null) {\n value = '';\n }\n }\n this._prev = this.input[0].value = text;\n this._accessor(value !== undefined ? value : text, idx);\n this._placeholder();\n this._triggerCascade();\n },\n refresh: function () {\n this.listView.refresh();\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) === 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 that._accessor(text);\n input.value = text;\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.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 _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 _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: '100%',\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 if (element.id) {\n that._arrow.attr('aria-controls', that.ul[0].id);\n }\n },\n _clearButton: function () {\n this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\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.TAB && !that._move(e)) {\n that._search();\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') {\n that.listView.select(-1);\n }\n that.search(value);\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 }\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 ], 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 = 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', HIDDENCLASS = 'k-loading-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 },\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.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 },\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._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-s').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 that.element.blur();\n },\n _removeTag: function (tag) {\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 that._change();\n that._close();\n };\n if (customIndex === undefined) {\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-s').length) {\n this._removeTag(target.closest(LI));\n }\n },\n _clearClick: function () {\n this.value(null);\n this.trigger('change');\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.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._filterSource();\n } else if (that._allowOpening()) {\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.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 },\n _click: function (e) {\n var that = this;\n var item = e.item;\n e.preventDefault();\n that._select(item).done(function () {\n that._change();\n that._close();\n });\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 current = listView.focus();\n var hasValue = that.input.val();\n var isRtl = kendo.support.isRtl(that.wrapper);\n var visible = that.popup.visible();\n if (key === keys.DOWN) {\n e.preventDefault();\n if (!visible) {\n that.open();\n if (!current) {\n listView.focusFirst();\n }\n return;\n }\n if (current) {\n listView.focusNext();\n if (!listView.focus()) {\n listView.focusLast();\n }\n } else {\n listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (current) {\n listView.focusPrev();\n }\n if (!listView.focus()) {\n that.close();\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 (key === keys.ENTER && visible) {\n that._select(current).done(function () {\n that._change();\n that._close();\n });\n e.preventDefault();\n } else if (key === keys.ESC) {\n if (visible) {\n e.preventDefault();\n } else {\n that.currentTag(null);\n }\n that.close();\n } else if (key === keys.HOME) {\n if (visible) {\n listView.focusFirst();\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 listView.focusLast();\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 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);\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._showClear();\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, 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 _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 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()) {\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 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 _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 this._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n if (this.options.clearButton) {\n this._clear.insertAfter(this.input);\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 (function ($, parseFloat, parseInt) {\n var Color = function (value) {\n var color = this, formats = Color.formats, re, processor, parts, i, channels;\n if (arguments.length === 1) {\n value = color.resolveColor(value);\n for (i = 0; i < formats.length; i++) {\n re = formats[i].re;\n processor = formats[i].process;\n parts = re.exec(value);\n if (parts) {\n channels = processor(parts);\n color.r = channels[0];\n color.g = channels[1];\n color.b = channels[2];\n }\n }\n } else {\n color.r = arguments[0];\n color.g = arguments[1];\n color.b = arguments[2];\n }\n color.r = color.normalizeByte(color.r);\n color.g = color.normalizeByte(color.g);\n color.b = color.normalizeByte(color.b);\n };\n Color.prototype = {\n toHex: function () {\n var color = this, pad = color.padDigit, r = color.r.toString(16), g = color.g.toString(16), b = color.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n value = value || 'black';\n if (value.charAt(0) == '#') {\n value = value.substr(1, 6);\n }\n value = value.replace(/ /g, '');\n value = value.toLowerCase();\n value = Color.namedColors[value] || value;\n return value;\n },\n normalizeByte: function (value) {\n return value < 0 || isNaN(value) ? 0 : value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var color = this, round = Math.round;\n color.r = round(color.normalizeByte(color.r * value));\n color.g = round(color.normalizeByte(color.g * value));\n color.b = round(color.normalizeByte(color.b * value));\n return color;\n },\n percBrightness: function () {\n var color = this;\n return Math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\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 = {\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 namedColorRegexp = ['transparent'];\n for (var i in Color.namedColors) {\n if (Color.namedColors.hasOwnProperty(i)) {\n namedColorRegexp.push(i);\n }\n }\n namedColorRegexp = new RegExp('^(' + namedColorRegexp.join('|') + ')(\\\\W|$)', 'i');\n function parseColor(color, nothrow) {\n var m, ret;\n if (color == null || color == 'none') {\n return null;\n }\n if (color instanceof _Color) {\n return color;\n }\n color = color.toLowerCase();\n if (m = namedColorRegexp.exec(color)) {\n if (m[1] == 'transparent') {\n color = new _RGB(1, 1, 1, 0);\n } else {\n color = parseColor(Color.namedColors[m[1]], nothrow);\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 (!nothrow) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n function hex(n, width, pad) {\n if (!pad) {\n pad = '0';\n }\n n = n.toString(16);\n while (width > n.length) {\n n = '0' + n;\n }\n return n;\n }\n function hue2rgb(p, q, t) {\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 var _Color = kendo.Class.extend({\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((+this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (kendo.support.browser.msie && kendo.support.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 (c2) {\n if (c2 == null) {\n return NaN;\n }\n var c1 = this.toBytes();\n c2 = c2.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 = _Color.extend({\n init: function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var min, max, delta, h, s, v;\n var r = this.r, g = this.g, b = this.b;\n min = Math.min(r, g, b);\n max = Math.max(r, g, b);\n v = max;\n delta = max - min;\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 r = this.r, g = this.g, b = this.b;\n var max = Math.max(r, g, b), 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 }\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 this.r = Math.round(r);\n this.g = Math.round(g);\n this.b = Math.round(b);\n this.a = 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 var _HSV = _Color.extend({\n init: function (h, s, v, a) {\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h, s = this.s, v = this.v;\n var i, r, g, b, f, p, q, t;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n i = Math.floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n 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 = _Color.extend({\n init: function (h, s, l, a) {\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h, s = this.s, l = this.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 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 kendo.Color = Color;\n kendo.parseColor = parseColor;\n }(window.kendo.jQuery, parseFloat, parseInt));\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, 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._distance = round(options.max - options.min);\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 _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 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, pixelStep = trackDivSize / that._distance, itemWidth, pixelWidths, i;\n if (that._distance / options.smallStep - math.floor(that._distance / options.smallStep) > 0) {\n trackDivSize -= that._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, itemsCount = math.ceil(that._distance / options.smallStep), i = 1, lastItem;\n itemsCount += that._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 = that._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)).before(createButton(options, 'decrease', that._isHorizontal));\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 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) {\n var buttonCssClass = '';\n if (type == 'increase') {\n buttonCssClass = isHorizontal ? 'k-i-arrow-e' : 'k-i-arrow-n';\n } else {\n buttonCssClass = isHorizontal ? 'k-i-arrow-w' : 'k-i-arrow-s';\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, kendo.preventDefault).off(MOUSE_UP).on(MOUSE_UP, kendo.preventDefault).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(dragHandle[that._outerSize]() / 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 CHANGE,\n SLIDE,\n MOVE_SELECTION\n ], function (e) {\n moveSelection(parseFloat(e.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 = that.tooltipDiv.outerWidth(), height = that.tooltipDiv.outerHeight(), 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 = dragHandles.eq(0).outerWidth() + 2 * margin;\n } else {\n top = offset.top;\n left = offset.left;\n anchorSize = element.outerWidth() + 2 * margin;\n }\n if (owner._isHorizontal) {\n left -= parseInt((width - element[owner._outerSize]()) / 2, 10);\n top -= height + callout.height() + margin;\n } else {\n top -= parseInt((height - element[owner._outerSize]()) / 2, 10);\n left -= width + callout.width() + margin;\n }\n if (owner._isHorizontal) {\n diff = that._flip(top, height, anchorSize, viewport.outerHeight() + that._scrollOffset.top);\n top += diff;\n left += that._fit(left, width, viewport.outerWidth() + that._scrollOffset.left);\n } else {\n diff = that._flip(left, width, anchorSize, viewport.outerWidth() + that._scrollOffset.left);\n top += that._fit(top, height, viewport.outerHeight() + 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(dragHandles.eq(0)[that._outerSize]() / 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 ], 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 ]\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', APPLY_CANCEL = {\n apply: 'Apply',\n cancel: 'Cancel'\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 this.wrapper.focus();\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 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 that._select(that._getHSV());\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 autoupdate: true,\n messages: APPLY_CANCEL\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;\n function hueChange(e) {\n that._updateUI(that._getHSV(e.value, null, null, null));\n }\n that._hueSlider = element.find('.k-hue-slider').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 that._opacitySlider = element.find('.k-transparency-slider').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.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 (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: APPLY_CANCEL,\n opacity: false,\n buttons: true,\n preview: true,\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 this._getPopup().close();\n },\n toggle: function () {\n if (!this.element.prop('disabled')) {\n this._getPopup().toggle();\n }\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() : 'transparent');\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.bind({\n select: function (ev) {\n that._updateUI(parseColor(ev.value));\n },\n change: function () {\n that._select(selector.color());\n that.close();\n },\n cancel: function () {\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 if (!color) {\n setTimeout(function () {\n if (that.wrapper) {\n that.wrapper.focus();\n }\n });\n that._updateUI(that.color());\n } else {\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 = '.', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', 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._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).attr('aria-valuemax', 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 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('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).attr(ARIA_READONLY, 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('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).attr(ARIA_READONLY, readonly);\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('.k-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 _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;\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 },\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,\n 'aria-valuemax': 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 e.preventDefault();\n }\n that._key = 0;\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 var isValid = that._numericRegex(numberFormat).test(element.value);\n if (result === NULL || that._adjust(result) !== result || !isValid) {\n that._update(value);\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 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, 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 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 = '';\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 input.attr('aria-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' ? 'n' : 's');\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, [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file]), select').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 = { name: options.field };\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 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 _keepInTrap: function (e) {\n if (e.which !== 9) {\n return;\n }\n var target = e.target;\n var focusableItems = this.element.find(focusableNodesSelector).filter(':visible[tabindex!=-1]');\n var focusableItemsCount = focusableItems.length;\n var lastIndex = focusableItemsCount - 1;\n var focusedItemIndex = focusableItems.index(target);\n if (e.shiftKey) {\n if (focusedItemIndex === 0) {\n focusableItems.get(lastIndex).focus();\n e.preventDefault();\n }\n } else {\n if (focusedItemIndex === lastIndex) {\n focusableItems.get(0).focus();\n e.preventDefault();\n }\n }\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', ['kendo.draganddrop'], 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: ['draganddrop']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, 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', 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', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-minimize,.k-window-actions .k-i-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', 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, 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 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 (options.pinned) {\n that.pin(true);\n }\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));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n this._resizable();\n this._draggable();\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 },\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 (width.toString().indexOf('%') > 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 (height.toString().indexOf('%') > 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 actions = this.options.actions;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n actions = $.map(actions, function (action) {\n return { name: action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\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, newWidth, newHeight, w, h;\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (keyCode == keys.ESC && that._closable()) {\n that._close(false);\n }\n if (options.draggable && !e.ctrlKey && !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) {\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-maximize': 'maximize',\n 'k-i-minimize': 'minimize',\n 'k-i-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 instanceof Window) {\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) {\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(text);\n }\n titleBarHeight = titleBar.outerHeight();\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 }\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 $('html, body').css(OVERFLOW, HIDDEN);\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);\n if (wrapper.is(VISIBLE) && !that.trigger(CLOSE, { userTriggered: !systemTriggered })) {\n if (that._closing) {\n return;\n }\n that._closing = true;\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 $('html, body').css(OVERFLOW, '');\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 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 that.element.focus();\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-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n $('html, body').css(OVERFLOW, '');\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 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: 'Restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\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 $('html, body').css(OVERFLOW, HIDDEN);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\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 return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function (force) {\n var that = this, win = $(window), wrapper = that.wrapper, top = parseInt(wrapper.css('top'), 10), left = parseInt(wrapper.css('left'), 10);\n if (force || !that.options.pinned && !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.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.pinned && !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.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 w = wnd.width() / zoomLevel;\n h = wnd.height() / zoomLevel - parseInt(wrapper.css('padding-top'), 10);\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 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', wrapper.find('.k-window-actions').outerWidth() + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('
              '),\n action: template('' + '' + ''),\n titlebar: template('
               ' + '#= title #' + '
              ' + '
              '),\n overlay: '
              ',\n contentFrame: template(''),\n resizeHandle: template('
              ')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.width(),\n height: wrapper.height()\n };\n that.containerOffset = kendo.getOffset(wnd.appendTo, 'position');\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,\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,\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);\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 = actions.outerWidth() + parseInt(actions.css('right'), 10) - element.outerWidth();\n } else {\n wnd.minLeftPosition = 20 - element.outerWidth();\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.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 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: 'fixed header template',\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 this._selectedIndexes.push(undefined);\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 take = this.itemCount;\n var skip = this._getSkip(index, take);\n var view = this._getRange(skip, take);\n return this._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex);\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 : valueGetter(dataView[i].item) === valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return 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 this.header[0].innerHTML = firstVisibleGroup || '';\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.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 = 'km-state-active', DISABLE = 'km-state-disabled', SELECT = 'select', SELECTOR = 'li:not(.' + ACTIVE + ')';\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').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(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('.' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.' + DISABLE)) {\n return;\n }\n that.current().removeClass(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(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 var wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n wrapper.removeClass(DISABLE);\n } else {\n wrapper.addClass(DISABLE);\n }\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass('km-button'), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass('km-image');\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass('km-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, 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 = this.element.outerHeight(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 = this.element.outerHeight(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 = listView.wrapper.children().not(listView.element).outerHeight() || 0;\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.scroller.bind('scroll', function (e) {\n binder.list.update(e.scrollTop);\n });\n this.scroller.bind('scrollEnd', function (e) {\n binder.list.batchUpdate(e.scrollTop);\n });\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\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 = 'km-current-page', VIRTUAL_PAGE_CLASS = 'km-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 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(CURRENT_PAGE_CLASS);\n },\n _change: function (e) {\n this.items().removeClass(CURRENT_PAGE_CLASS).eq(e.page).addClass(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 -= pager.outerHeight(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 -= pager.outerHeight(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('km-scrollview');\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass('km-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('.' + 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, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'km-switch-on', SWITCHOFF = 'km-switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'km-state-active', DISABLED_STATE = 'km-state-disabled', DISABLED = 'disabled', TRANSFORMSTYLE = support.transitions.css + 'transform', proxy = $.proxy;\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 = that.handle.outerWidth(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(SWITCHON, check).toggleClass(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(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 - that.handle.outerWidth(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(ACTIVE_STATE);\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(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(SWITCHON, checked).toggleClass(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: '$PLAIN',\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 }\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) {\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 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.AutoComplete', '$angular_getLogicValue', function () {\n var options = this.self.options;\n var values = this.self.value().split(options.separator);\n var valuePrimitive = options.valuePrimitive;\n var data = this.self.listView.selectedDataItems();\n var dataItems = [];\n for (var idx = 0, length = data.length; idx < length; idx++) {\n var item = data[idx];\n var dataValue = options.dataTextField ? item[options.dataTextField] : item;\n for (var j = 0; j < values.length; j++) {\n if (dataValue === values[j]) {\n if (valuePrimitive) {\n dataItems.push(dataValue);\n } else {\n dataItems.push(item.toJSON());\n }\n break;\n }\n }\n }\n return dataItems;\n });\n defadvice('ui.AutoComplete', '$angular_setLogicValue', function (value) {\n if (value == null) {\n value = [];\n }\n var self = this.self, dataTextField = self.options.dataTextField;\n if (dataTextField && !self.options.valuePrimitive) {\n if (value.length !== undefined) {\n value = $.map(value, function (item) {\n return item[dataTextField];\n });\n } else {\n value = value[dataTextField];\n }\n }\n self.value(value);\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 ], '$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 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 '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.webcomponents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'webcomponents',\n name: 'Web Components',\n category: 'framework',\n description: 'Adds Kendo UI custom elements for Web Components',\n depends: ['core']\n };\n (function ($, angular, undefined) {\n if (!kendo.support.customElements || kendo.webComponents.length) {\n return;\n }\n if (angular && (angular.version.major == 1 || angular.injector)) {\n return;\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 dropdownlist: 'select',\n multiselect: 'select',\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 treeview: 'ul',\n menu: 'ul',\n contextmenu: 'ul',\n actionsheet: 'ul'\n };\n var EVENT_PREFIX = 'on-';\n var registered = [];\n kendo.onWidgetRegistered(function (entry) {\n var elementName = entry.prefix + entry.widget.prototype.options.name.toLowerCase();\n if (registered.indexOf(elementName) === -1) {\n registered.push(elementName);\n registerElement(elementName, entry.widget);\n }\n });\n var jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/;\n var jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/;\n var numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/;\n function parseOption(element, option) {\n var value = element.getAttribute(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 = {};\n Object.keys(options).concat('dataSource').forEach(function (name) {\n if (element.hasAttribute(kendo.toHyphens(name))) {\n result[name] = parseOption(element, kendo.toHyphens(name));\n }\n });\n return result;\n }\n function cloneEvent(e) {\n var result = {};\n Object.keys(e).forEach(function (key) {\n if (key[0] != '_') {\n result[key] = e[key];\n }\n });\n return result;\n }\n function eventHandler(eventName, e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, false, true, cloneEvent(e));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n e.preventDefault();\n }\n }\n function expose(component, obj) {\n var props = Object.keys(obj);\n for (var idx = 0; idx <= props.length; idx++) {\n if (typeof obj[props[idx]] === 'function') {\n if (!component[props[idx]]) {\n component[props[idx]] = obj[props[idx]].bind(component.widget);\n }\n } else {\n if (props[idx] === 'options') {\n continue;\n }\n component[props[idx]] = component[props[idx]] || obj[props[idx]];\n }\n }\n }\n function registerElement(name, widget) {\n var options = widget.prototype.options;\n var prototype = Object.create(HTMLElement.prototype);\n Object.defineProperty(prototype, 'options', {\n get: function () {\n return this.widget.options;\n },\n set: function (options) {\n var instance = this.widget;\n options = $.extend(true, {}, instance.options, options);\n var _wrapper = $(instance.wrapper)[0];\n var _element = $(instance.element)[0];\n instance._destroy();\n var newElement = document.createElement(TAGNAMES[name] || 'div');\n if (_wrapper && _element) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n $(_element).replaceWith(newElement);\n }\n if (instance.value) {\n options.value = instance.value();\n }\n instance.init(newElement, options);\n this.bindEvents();\n }\n });\n prototype.bindEvents = function () {\n if (widget.prototype.events.indexOf('init') < 0) {\n widget.prototype.events.push('init');\n }\n widget.prototype.events.forEach(function (eventName) {\n this.widget.bind(eventName, eventHandler.bind(this, eventName));\n if (this.hasAttribute(EVENT_PREFIX + eventName)) {\n this.bind(eventName, function (e) {\n window[this.getAttribute(EVENT_PREFIX + eventName)].call(this, e);\n }.bind(this));\n }\n }.bind(this));\n };\n prototype.attachedCallback = function () {\n var that = this;\n var element = document.createElement(TAGNAMES[name] || 'div');\n $(element).append(that.childNodes);\n $(element).attr('class', $(that).attr('class'));\n $(element).attr('style', $(that).attr('style'));\n that.appendChild(element);\n that.widget = new widget(element, parseOptions(that, options));\n var obj = that.widget;\n do {\n expose(that, obj);\n } while (obj = Object.getPrototypeOf(obj));\n this.bindEvents();\n that.widget.trigger('init');\n };\n prototype.detachedCallback = function () {\n kendo.destroy(this.element);\n };\n kendo.webComponents.push('kendo-' + name);\n document.registerElement('kendo-' + name, { prototype: prototype });\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.angular2', [\n 'kendo.core',\n 'kendo.webcomponents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'angular2',\n name: 'Angular 2',\n category: 'framework',\n description: 'Supports angular2 value accessors',\n depends: ['core']\n };\n (function (kendo, System) {\n if (!System || !System.register) {\n return;\n }\n var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') {\n return Reflect.decorate(decorators, target, key, desc);\n }\n switch (arguments.length) {\n case 2:\n return decorators.reduceRight(function (o, d) {\n return d && d(o) || o;\n }, target);\n case 3:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key), void 0;\n }, void 0);\n case 4:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key, o) || o;\n }, desc);\n }\n };\n var __metadata = this && this.__metadata || function (k, v) {\n if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') {\n return Reflect.metadata(k, v);\n }\n };\n System.register('kendo/angular2', ['angular2/angular2'], function (exports_1) {\n var angular2_1;\n var KendoValueAccessor;\n return {\n setters: [function (_angular2_1) {\n angular2_1 = _angular2_1;\n }],\n execute: function () {\n KendoValueAccessor = function () {\n function KendoValueAccessor(cd, elementRef) {\n var _this = this;\n this.elementRef = elementRef;\n this.onChange = function (_) {\n };\n this.onTouched = function () {\n };\n this.element = elementRef.nativeElement;\n this.element.addEventListener('change', function () {\n _this.onChange(_this.element.value());\n });\n this.element.addEventListener('spin', function () {\n _this.onChange(_this.element.value());\n });\n cd.valueAccessor = this;\n this.cd = cd;\n cd.valueAccessor = this;\n }\n KendoValueAccessor.prototype.writeValue = function (value) {\n this.element.value(value);\n };\n KendoValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = fn;\n };\n KendoValueAccessor.prototype.registerOnTouched = function (fn) {\n this.onTouched = fn;\n };\n KendoValueAccessor = __decorate([\n angular2_1.Directive({ selector: kendo.webComponents.join(',') }),\n __metadata('design:paramtypes', [\n angular2_1.NgControl,\n angular2_1.ElementRef\n ])\n ], KendoValueAccessor);\n return KendoValueAccessor;\n }();\n exports_1('KendoValueAccessor', KendoValueAccessor);\n }\n };\n });\n }(window.kendo, window.System));\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.datepicker',\n 'kendo.autocomplete',\n 'kendo.dropdownlist',\n 'kendo.combobox',\n 'kendo.multiselect',\n 'kendo.colorpicker',\n 'kendo.listview',\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 'kendo.webcomponents',\n 'kendo.angular2'\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}));"],"sourceRoot":"/source/"}