{"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","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","Notification","_compileTemplates","templates","_guid","_isRtl","_compileStacking","stacking","pinned","hideOnClick","allowHideAfter","autoHideAfter","kendoTemplate","_compiled","templateId","_defaultCompiled","_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","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","showText","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","splitContainer","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","_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","cascadeHandler","cascade","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","disabledDates","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","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","filterEnalbed","SELECTOR","accesskey","unselectable","getElements","STATE_REBIND","_input","_setText","_arrowClick","_inputFocus","_inputFocusout","_buildOptions","hasChild","_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","ulScrollTop","ulOffsetHeight","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","_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","sizingAction","actionId","isMaximized","isMinimized","restoreOptions","KWINDOWRESIZEHANDLES","KWINDOWTITLEBAR","MINIMIZE_MAXIMIZE","PIN_UNPIN","executableScript","WindowResizing","_draggable","addOverlay","removeOverlay","WindowDragging","KWINDOW","KWINDOWTITLE","KWINDOWCONTENT","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","KPIN","KUNPIN","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","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","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","kendoWidgetInstance","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","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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","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.112'.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) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console.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 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, 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 if (!that.trigger('set', {\n field: field,\n value: value\n })) {\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 },\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 if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n ObservableObject.fn.set.call(that, field, value, initiator);\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 = 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] && !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));\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' + '
      ';\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 },\n _getCompiled: function (type) {\n var that = this;\n var defaultCompiled = that._defaultCompiled;\n return type ? that._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) {\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)(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 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 item.toolbar.hide();\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.getParentGroup().refresh();\n }\n }\n if (item.overflow) {\n item.overflow.hide();\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.overflow.getParentGroup().refresh();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.show();\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.getParentGroup().refresh();\n }\n } else if (item.overflow) {\n item.overflow.show();\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.overflow.getParentGroup().refresh();\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 if (this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0) {\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;\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 window.location.href = item.options.url;\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.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 _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', !options.filter || options.filter === 'none' ? '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 filter = options.filter;\n var field = options.dataTextField;\n clearTimeout(that._typingTimeout);\n if (!length || length >= options.minLength) {\n that._state = 'filter';\n if (filter === 'none') {\n that._filter(word);\n } else {\n that._open = true;\n that._filterSource({\n value: ignoreCase ? word.toLowerCase() : word,\n field: field,\n operator: 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)) {\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)) {\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 createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ];\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].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;' + 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\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 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, 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 ],\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) {\n that._initialIndex = null;\n }\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 (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 { elements: that.optionLabel };\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 _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var optionLabel = that.options.optionLabel;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var length = data.length;\n var dataItem;\n var value;\n that._angularItems('compile');\n that._presetValue = false;\n that._resizePopup(true);\n that.popup.position();\n if (that._isSelect) {\n value = that.value();\n if (length) {\n if (optionLabel) {\n optionLabel = that._option('', that._optionLabelText());\n }\n } else if (value) {\n optionLabel = that._option(value, that.text());\n }\n that._options(data, optionLabel, value);\n }\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 (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 _option: function (value, text) {\n return '';\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().toJSON();\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 = 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.options.filter !== 'none') {\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 var options = this.options;\n var filterEnalbed = options.filter !== 'none';\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (filterEnalbed) {\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()) {\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 ],\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 var hasChild = that.element[0].children[0];\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 } else if (!hasChild) {\n that._custom('');\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 that._custom(that._value(dataItem) || '');\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 if (value === options.value && that.input.val() === options.text) {\n return;\n }\n that._accessor(value);\n if (listView.bound() && listView.isFiltered()) {\n listView.bound(false);\n that._filterSource();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._selectValue(listView.selectedDataItems()[0]);\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.value('');\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._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 _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 filter = options.filter;\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: 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 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 setTimeout(function () {\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 var haveChangeOnElement = false;\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 if (widget.element) {\n widget = kendoWidgetInstance(widget.element);\n if (widget) {\n widget.destroy();\n }\n }\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}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}