{"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","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","sign","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","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","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","formatsSequence",2,3,4,"parseDate","formats","tzoffset","timezone","convert","concat","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","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","min","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","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","_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","pressed","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","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","ObservableObject","wrapAll","json","object","howMany","reduce","reduceRight","every","some","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","parsers","boolean","default","defaultValues","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","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","__state__","_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","decode","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","_lastEvent","_processMovement","_cursorElement","_scrollableParent","_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","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","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","viewportOffset","origins","positions","isWindow","viewportWidth","viewportHeight","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","KNOTIFICATION","KICLOSE","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","mapChangedItems","itemsToMatch","itemsLength","selectedLength","changed","unchanged","removeFiltersForField","STATIC_LIST_NS","StaticList","ID","FOCUSED","HOVER","LOADING","CASCADE","isIE8","quotRegExp","alternativeNames","ComboBox","List","_isSelect","ul","tabIndex","aria-hidden","_listMousedown","_header","_accessors","_initValue","headerTemplate","_focused","_editable","_listOptions","currentOptions","listBoundHandler","_listBound","_listChange","_activateItem","_deactivateItem","listBound","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_filterSource","removed","_cascading","setDSFilter","header","_accessor","_old","_ignoreCase","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_value","_aria","suggest","_oldIndex","_typing","typing","_enable","_dataValue","_offsetHeight","prevAll","_height","offsetTop","popups","_adjustListWidth","borderLeftWidth","borderRightWidth","_openHandler","_closeHandler","_focusItem","focusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","groupHeader","padding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","userTriggered","_userTriggered","_triggerChange","_valueBeforeCascade","_requestStartHandler","_requestEndHandler","_errorHandler","_initial","_initialIndex","_parentWidget","_cascadeSelect","_typingTimeout","minLength","_state","_open","_accessorInput","_accessorSelect","_custom","custom","_customOption","_hideBusy","_busy","_arrow","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","_fetch","_focusElement","focusout","_fetchData","hasItems","_options","optionLabel","dataText","dataValue","formId","parentElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromField","_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","_footer","footer","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","ARIA_READONLY","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","words","placeholderSupported","AutoComplete","_loader","_keypress","_search","_prev","autocomplete","aria-haspopup","_resetFocusItemHandler","_resetFocusItem","_progressHandler","_mute","_last","wordIndex","isActive","_touchScroller","_muted","_selectValue","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","_allowOpening","_optionLabelDataItem","loweredText","_valueSetter","_optionLabelText","_assignInstance","_buildOptions","initialIndex","_presetValue","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isInputActive","isPopupVisible","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","dataLength","isInLoop","fromCharCode","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","additionalClass","keepState","SELECTOR","accesskey","unselectable","getElements","STATE_REBIND","_input","_setText","_arrowClick","_inputFocus","_inputFocusout","_updateSelection","hasInitialIndex","_updateItemFocus","isFirstPage","accessKey","maxLength","LI","ACCEPT","FILTER","REBIND","FOCUSEDCLASS","HIDDENCLASS","HOVERCLASS","_optionsMap","_customOptions","_tagList","_textContainer","_tagID","tagList","_tagTemplate","tagMode","autoClose","maxSelectedItems","itemTemplate","tagTemplate","currentTag","_currentTag","_selectedItemChange","_initialValues","tagTextTemplate","notInput","closeButton","_removeTag","tag","customIndex","_close","_tagListClick","_retrieveData","inputValue","clearFilters","_normalizeValues","_setOption","isEmptyArray","_showBusyHandler","skipCaret","textWidth","wrapperWidth","optionsMap","selectedItems","_buildSelectedItems","_selectedItemIndex","valueGetter","_angularTagItems","removedItem","addedItem","_maxTotal","maxTotal","currentTotal","_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","INPUT","SPIN","TOUCHEND","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_toggleText","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_paste","adjusted","_adjust","_focusin","arrows","_spinning","_focusing","groupRegExp","extractRegExp","_format","caretPosition","_culture","CLASSNAME","_key","_step","isNumPadDecimal","_numericRegex","_separator","_floatRegExp","isNotNull","DOMElement","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","editors","kendoNumericTextBox","kendoDatePicker","Editable","$angular","_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","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","_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","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","_marker","_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","executableScript","WindowResizing","_draggable","KWINDOWRESIZEHANDLES","addOverlay","removeOverlay","WindowDragging","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","Window","windowContent","suppressActions","actions","_createWindow","_dimensions","toFront","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","aria-labelledby","_onDocumentResize","minWidth","maxWidth","_animationOptions","basicAnimation","toggleMaximization","resizeHandle","dragging","_actions","titlebar","fade","autoFocus","_closable","newWidth","newHeight","w","isMaximized","overlay","_actionForIcon","k-i-close","k-i-maximize","k-i-minimize","k-i-restore","k-i-refresh","k-i-pin","k-i-unpin","_modals","zStack","_object","newTop","newLeft","documentWindow","titleBarHeight","titleBar","overlayFx","showOptions","doc","Fade","fadeIn","_activate","_documentScrollTop","_documentScrollLeft","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","_deactivate","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","restoreOptions","isMinimized","_sizingAction","actionId","maximize","minimize","unpin","initOptions","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","contentTemplate","_showLoading","iframeSrcAttributes","contentHtml","elementPadding","initialPosition","resizeDirection","initialSize","containerOffset","windowBottom","windowRight","initialWindowPosition","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","VIRTUALLIST","LIST","HEADER","VIRTUALITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_activeDeferred","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","valueMapper","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_createList","_forcePrefetch","_prefetchByValue","dataView","_dataView","forSelection","indexes","deferredRange","itemCount","defs","pages","existingRange","isEmptyList","rangeStart","_findDataItem","_getElementByIndex","_focusedIndex","_getElementLocation","heightContainer","isAlreadySelected","prefetchStarted","_getIndecies","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","_screenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","currentHeight","padHeight","lastRequestedRange","lastRangeStart","flatGroups","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","_currentGroup","_range","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","selectedIndexes","removedindexesCounter","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","loading","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","_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","clearButton","_dataSourceChange","_refreshInput","appliedFilters","_applyFilter","_clearFilter","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","widgetOptions","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","$log","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","onChange","currentVal","$render","$viewValue","$modelValue","formPristine","$pristine","$setViewValue","$setPristine","digest","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","attributeName","cls","rebindAttr","templateOptions","isUpload","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","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","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","PivotGrid","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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jK,iBAAmB,SAAU3mK,GACtDjE,KAAK0gK,SAAWz8J,GAEpBimK,EAAmBnjK,UAAU8jK,kBAAoB,SAAU5mK,GACvDjE,KAAKwqK,UAAYvmK,GAErBimK,EAAqBP,GACjBM,EAAWa,WAAY/mK,SAAU9L,EAAM0qB,cAAc1rB,KAAK,OAC1D2yK,EAAW,qBACPK,EAAWc,UACXd,EAAWe,cAEhBd,MAGPF,EAAU,qBAAsBE,SAI9CxzK,OAAOuB,MAAOvB,OAAOgzK,SACP,kBAAVlzK,SAAwBA,OAAOghC,IAAMhhC,OAAS,SAAUihC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAUnhC,EAAGC,QACVA,OAAO,iBACH,aACA,eACA,cACA,aACA,WACA,mBACA,iBACA,aACA,qBACA,eACA,kBACA,mBACA,oBACA,wBACA,kBACA,iBACA,mBACA,eACA,cACA,cACA,qBACA,gBACA,gBACA,aACA,iBACA,mBACA,qBACA,qBACA,iBACA,oBACA,oBACA,iBACA,uBACA,sBACA,aACA,iBACA,iBACA,oBACA,wBACA,iBACA,mBACA,uBACA,eACA,iBACA,eACA,oBACA,uBACA,sBACA,wBACA,oBACA,oBACA,yBACA,sBACA,yBACA,oBACA,2BACA,2BACA,sBACA,2BACA,2BACA,wBACA,sBACA,0BACA,sBACA,wBACA,gBACA,sBACA,kBACDD,IACL,WACE,YACA,OAAOG,QAAOuB,OACE,kBAAVzB,SAAwBA,OAAOghC,IAAMhhC,OAAS,SAAUihC,EAAIC,EAAIC,IACrEA,GAAMD","file":"kendo.ui.core.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2016.1.406'.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, end, 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(precision);\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*/, formatsSequence = [\n 'G',\n 'g',\n 'd',\n 'F',\n 'D',\n 'y',\n 'm',\n 'T',\n 't'\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 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, patterns;\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 = [];\n patterns = culture.calendar.patterns;\n length = formatsSequence.length;\n for (; idx < length; idx++) {\n formats[idx] = patterns[formatsSequence[idx]];\n }\n idx = 0;\n formats = [\n 'yyyy/MM/dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm',\n 'yyyy/MM/dd',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy-MM-dd HH:mm',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ].concat(formats);\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 && support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\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 result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset - 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 = $('
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 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 }\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, { url: to })) {\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) {\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 for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back);\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 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)) {\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, document = window.document, 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 ? $(document.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', 'pan-y');\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 _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 } 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 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 }\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 } 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.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 } 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 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') {\n item.dirty = true;\n }\n }\n });\n }\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 element.removeChild(child);\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 values.push(this._parseValue(value, this.dataType()));\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 = this._parseValue(source[idx].get(field), this.dataType());\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'), children = element.children, 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 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-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([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])))$/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 || 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 this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\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 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(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,a.k-button>.k-icon,button.k-button>.k-icon,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().not('span.k-sprite').not('span.k-icon').not('img.k-image').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('#=text#');\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 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 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 }\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), viewportOffset = viewport.offset(), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, zoomLevel = support.zoomLevel(), siblingContainer, parents, parentZIndex, zIndex = 10002, isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), idx = 0, docEl = document.documentElement, length, viewportWidth, viewportHeight;\n viewportWidth = isWindow ? window.innerWidth : viewport.width();\n viewportHeight = isWindow ? window.innerHeight : viewport.height();\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 if (viewport[0] === window) {\n offset.top -= window.pageYOffset || document.documentElement.scrollTop || 0;\n offset.left -= window.pageXOffset || document.documentElement.scrollLeft || 0;\n } else {\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n }\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', 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(.k-hiding)').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('k-hiding');\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);\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().not('span.k-sprite,span.' + ICON + ',img.k-image').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(options, 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 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 });\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.toolbar.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-loading', 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, isIE8 = browser.msie && 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._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n headerTemplate: ''\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 },\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 that._angularItems('cleanup');\n },\n dataBound: listBoundHandler,\n listBound: 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 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._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 _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 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 if (!force) {\n dataSource.filter(expression);\n } else {\n dataSource.read({ filter: expression });\n }\n },\n _header: function () {\n var that = this;\n var template = that.options.headerTemplate;\n var header;\n if ($.isFunction(template)) {\n template = template({});\n }\n if (template) {\n that.list.prepend(template);\n header = that.ul.prev();\n that.header = header[0] ? header : null;\n if (that.header) {\n that.angular('compile', function () {\n return { elements: that.header };\n });\n }\n }\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 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 if (length) {\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 if (offsetTop) {\n height -= offsetTop;\n }\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: 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 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 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 });\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 that._select(candidate);\n that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n }\n },\n search: function (word) {\n word = typeof word === 'string' ? word : this.text();\n var that = this;\n var length = word.length;\n var options = that.options;\n var ignoreCase = options.ignoreCase;\n var field = options.dataTextField;\n clearTimeout(that._typingTimeout);\n if (!length || length >= options.minLength) {\n that._state = 'filter';\n if (!that._isFilterEnabled()) {\n that._filter(word);\n } else {\n that._open = true;\n that._filterSource({\n value: ignoreCase ? word.toLowerCase() : word,\n field: field,\n operator: options.filter,\n ignoreCase: ignoreCase\n });\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 selectedIndex = element.selectedIndex;\n var option;\n if (value === undefined) {\n if (selectedIndex > -1) {\n option = element.options[selectedIndex];\n }\n if (option) {\n value = option.value;\n }\n return value || '';\n } else {\n if (selectedIndex > -1) {\n element.options[selectedIndex].removeAttribute(SELECTED);\n element.options[selectedIndex].selected = false;\n }\n if (idx === undefined) {\n idx = -1;\n }\n if (value !== null && value !== '' && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n if (element.selectedIndex > -1) {\n option = element.options[element.selectedIndex];\n }\n if (option) {\n option.setAttribute(SELECTED, SELECTED);\n }\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 scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\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(this.element[0].children[this.element[0].children.length - 1]);\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 = that._get(candidate);\n candidate = candidate[candidate.length - 1];\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 filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return;\n }\n if (singleSelection && !filtered && $.inArray(indices[indices.length - 1], selectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [indices[indices.length - 1]];\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 },\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 (indices[indices.length - 1] !== -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 _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = $(candidate).data('offset-index');\n if (candidate === undefined) {\n candidate = -1;\n }\n candidate = [candidate];\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 templates = {\n template: this.options.template,\n groupTemplate: this.options.groupTemplate,\n fixedGroupTemplate: this.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._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.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 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 if (!options.dates[0]) {\n options.dates = that.options.dates;\n }\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 (!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) {\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.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', ARIA_READONLY = 'aria-readonly', 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).attr(ARIA_READONLY, 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).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 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 = +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 = $('select').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) {\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(date ? kendo.toString(date, options.format, options.culture) : value);\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) {\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(separator);\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._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._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 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 },\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.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 = options.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 (!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 }\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.options.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 element = this.element;\n e.preventDefault();\n this._active = true;\n if (this.trigger('select', { item: item })) {\n this.close();\n return;\n }\n this._oldText = element.val();\n this._select(item);\n this._blur();\n caret(element, element.val().length);\n },\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._angularItems('compile');\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 = length ? '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.options.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);\n }\n this._prev = text;\n this._accessor(text);\n this._placeholder();\n },\n _change: function () {\n var that = this;\n var value = that.value();\n var trigger = value !== List.unifyType(that._old, typeof value);\n var valueUpdated = trigger && !that._typing;\n var itemSelected = that._oldText !== value;\n if (valueUpdated || itemSelected) {\n that.element.trigger(CHANGE);\n }\n if (trigger) {\n that._old = value;\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 visible = that.popup.visible();\n var current = this.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 if (that.trigger('select', { item: current })) {\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 {\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 },\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 }, 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 _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 this._active = true;\n this.listView.select(candidate);\n this._active = false;\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.element);\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', ARIA_READONLY = 'aria-readonly', 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._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 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 that._filterSource();\n } else if (that._allowOpening()) {\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || this.dataSource.view().length;\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 dataItem, loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text === 'string') {\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 });\n dataItem = that.dataItem();\n if (dataItem) {\n text = dataItem;\n }\n }\n that._textAccessor(text);\n } else {\n return that._textAccessor();\n }\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 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 listView.bound(false);\n that._filterSource();\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 if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\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._angularItems('compile');\n that._presetValue = false;\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 _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 if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (filtered && focusedItem && !that.trigger('select', { item: focusedItem })) {\n that._select(focusedItem, !that.dataSource.view().length);\n }\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._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).attr(ARIA_READONLY, 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));\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).attr(ARIA_READONLY, readonly);\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 (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 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 that._select(that._focus());\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength));\n if (that.trigger('select', { item: that._focus() })) {\n that._select(oldFocusedItem);\n }\n if (!that.popup.visible()) {\n that._change();\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 _click: function (e) {\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (this.trigger('select', { item: item })) {\n this.close();\n return;\n }\n this._userTriggered = true;\n this._select(item);\n this._focusElement(this.wrapper);\n this._blur();\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 _filter: function (word) {\n if (word) {\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 },\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 }\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 that.listView.select(candidate);\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\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 = 'select';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\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(' select').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 element.hide();\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 },\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 options = this.options;\n var optionLabel = options.optionLabel;\n var span = this.span;\n if (text !== undefined) {\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabel && this._optionLabelText() === text) {\n dataItem = optionLabel;\n template = this.optionLabelTemplate;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\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 } else {\n return span.text();\n }\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', ARIA_READONLY = 'aria-readonly', 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._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._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: 0,\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 },\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 that._arrow.parent().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 if (value !== that.value() && that.trigger('select', { item: that._focus() })) {\n that.value(value);\n return;\n }\n that._placeholder();\n that._blur();\n that.element.blur();\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.parent().off(CLICK + ' ' + MOUSEDOWN);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false);\n arrow.on(CLICK, proxy(that._arrowClick, 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));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n input.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\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 that._filterSource();\n } else {\n that.popup.open();\n that._focusItem();\n }\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._angularItems('compile');\n that._presetValue = false;\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(!!data.length);\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 candidate = this._get(candidate);\n if (candidate === -1) {\n this.input[0].value = '';\n this._accessor('');\n }\n this.listView.select(candidate);\n if (!keepState && this._state === STATE_FILTER) {\n this._state = STATE_ACCEPT;\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) {\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 });\n if (that.selectedIndex < 0) {\n that._accessor(text);\n input.value = text;\n that._triggerCascade();\n }\n that._prev = input.value;\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.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 listView.bound(false);\n that._filterSource();\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 item = e.item;\n e.preventDefault();\n if (this.trigger('select', { item: item })) {\n this.close();\n return;\n }\n this._userTriggered = true;\n this._select(item);\n this._blur();\n },\n _filter: 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;\n if (name) {\n name = 'name=\"' + name + '_input\" ';\n }\n input = wrapper.find(SELECTOR);\n if (!input[0]) {\n wrapper.append('select').append(that.element);\n input = wrapper.find(SELECTOR);\n }\n input[0].style.cssText = element.style.cssText;\n input[0].title = element.title;\n if (element.maxLength > -1) {\n input[0].maxLength = element.maxLength;\n }\n input.addClass(element.className).val(this.options.text || element.value).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-icon').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 _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', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', 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._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._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: 0,\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 },\n events: [\n OPEN,\n CLOSE,\n CHANGE,\n SELECT,\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 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 if (this._state === REBIND) {\n this._state = '';\n e.added = [];\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 === 0) {\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 customIndex = that._customOptions[value];\n var option;\n if (customIndex === undefined && (state === ACCEPT || state === FILTER)) {\n customIndex = that._optionsMap[value];\n }\n if (customIndex !== undefined) {\n option = that.element[0].children[customIndex];\n option.removeAttribute('selected');\n option.selected = false;\n listView.removeAt(position);\n tag.remove();\n } else {\n listView.select(listView.select()[position]);\n }\n that.currentTag(null);\n that._change();\n that._close();\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 _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 input.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, 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).attr(ARIA_READONLY, readonly);\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._allowSelection()) {\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 _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataSource.flatView(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n },\n _listBound: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var skip = that.listView.skip();\n var length = data.length;\n that._angularItems('compile');\n that._render(data);\n that._resizePopup();\n if (that._open) {\n that._open = false;\n that.toggle(length);\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 search: function (word) {\n var that = this;\n var options = that.options;\n var ignoreCase = options.ignoreCase;\n var field = options.dataTextField;\n var inputValue = that.input.val();\n var expression;\n var length;\n if (options.placeholder === inputValue) {\n inputValue = '';\n }\n clearTimeout(that._typingTimeout);\n word = typeof word === 'string' ? word : inputValue;\n length = word.length;\n if (!length || length >= options.minLength) {\n that._state = FILTER;\n that._open = true;\n expression = {\n value: ignoreCase ? word.toLowerCase() : word,\n field: field,\n operator: options.filter,\n ignoreCase: ignoreCase\n };\n that._filterSource(expression);\n }\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 value = that._normalizeValues(value);\n if (maxSelectedItems !== null && value.length > maxSelectedItems) {\n value = value.slice(0, maxSelectedItems);\n }\n if (clearFilters) {\n listView.bound(false);\n that._filterSource();\n }\n listView.value(value);\n that._old = 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 if (selected) {\n option.setAttribute('selected', 'selected');\n } else {\n option.removeAttribute('selected');\n }\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 }\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 item = e.item;\n e.preventDefault();\n if (this.trigger(SELECT, { item: item })) {\n this._close();\n return;\n }\n this._select(item);\n this._change();\n this._close();\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var tag = that._currentTag;\n var current = that.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 this.listView.focusFirst();\n }\n return;\n }\n if (current) {\n this.listView.focusNext();\n if (!this.listView.focus()) {\n this.listView.focusLast();\n }\n } else {\n this.listView.focusFirst();\n }\n } else if (key === keys.UP) {\n if (visible) {\n if (current) {\n this.listView.focusPrev();\n }\n if (!this.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 if (current) {\n if (that.trigger(SELECT, { item: current })) {\n that._close();\n return;\n }\n that._select(current);\n }\n that._change();\n that._close();\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 this.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 this.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 (key === keys.BACKSPACE && !tag) {\n tag = $(that.tagList[0].lastChild);\n }\n if (tag && tag[0]) {\n that._removeTag(tag);\n }\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 },\n _showBusyHandler: function () {\n this.input.attr('aria-busy', true);\n this._loading.removeClass(HIDDENCLASS);\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, input = that.input, active = activeElement();\n if (show === undefined) {\n show = false;\n if (input[0] !== active) {\n show = !that.listView.selectedDataItems()[0];\n }\n }\n that._prev = '';\n input.toggleClass('k-readonly', show).val(show ? that.options.placeholder : '');\n if (input[0] === active && !skipCaret) {\n kendo.caret(input[0], 0, 0);\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 that = this;\n if (that._state === REBIND) {\n that._state = '';\n }\n if (!that._allowSelection()) {\n return;\n }\n this.listView.select(candidate);\n that._placeholder();\n if (that._state === FILTER) {\n that._state = ACCEPT;\n that.listView.skipUpdate(true);\n }\n },\n _input: function () {\n var that = this, accessKey = that.element[0].accessKey, input = that._innerWrapper.children('input.k-input');\n if (!input[0]) {\n input = $('').appendTo(that._innerWrapper);\n }\n that.element.removeAttr('accesskey');\n that._focused = that.input = input.attr({\n 'accesskey': accessKey,\n 'autocomplete': 'off',\n 'role': 'listbox',\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) + '' + (isMultiple ? 'delete' : 'open') + '
            • ';\n };\n },\n _loader: function () {\n this._loading = $('').insertAfter(this.input);\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 '' + options[type + 'ButtonTitle'] + '';\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: 359,\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'), icon = 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 icon.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 }\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 this._getPopup().open();\n },\n close: function () {\n this._getPopup().close();\n },\n toggle: function () {\n this._getPopup().toggle();\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 that.wrapper.focus();\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, round = kendo._round, 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 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 that._toggleText(false);\n element.focus();\n });\n }\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 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 min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\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('n', options.upArrowText) + buttonHtml('s', 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, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text[0].title = element.title;\n text.prop('placeholder', that.options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className);\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 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._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d*)?)|(' + separator + '\\\\d*)))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this, element = e.target, value = element.value;\n setTimeout(function () {\n if (that._parse(element.value) === NULL) {\n that._update(value);\n }\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 = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n that.element.attr('aria-value' + option, value).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 _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(round(value, decimals));\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 = round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = '';\n }\n that.element.val(value).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n this._text.val(value);\n if (!placeholderSupported && !value) {\n this._text.val(this.options.placeholder);\n }\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(className, text) {\n return '' + text + '';\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 $('Clear
              '), 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 scroller.bind('scroll', function (e) {\n headerFixer._fixHeader(e);\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 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 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 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 ngModel.$render = 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 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 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 = scope[form.attr('name')];\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 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 widget.first('change', 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 }\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 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 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 var that = this;\n that.template = function (key, value) {\n $attrs[key] = kendo.stringify(value);\n };\n $scope.$on('$destroy', function () {\n that.template = null;\n that = null;\n });\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.dataSource.data();\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 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 };\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.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/"}