{"version":3,"sources":["kendo.mobile.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","show","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","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","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","transforms","elementProto","mobileOS","documentMode","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","MSPointerEvent","PointerEvent","HTMLElement","hasHW3D","WebKitCSSMatrix","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","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","direction","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","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","then","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","opacity","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","removeClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","toOdataFilter","useOdataFour","operator","ignoreCase","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","$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","CHANGE","_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","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","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","newLineRegExp","wrapAll","json","object","howMany","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","path","composite","isSetPrevented","change","isObservableArray","isDataSource","boolean","default","defaults","_initializers","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","op","ignore","doesnotstartwith","doesnotendwith","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","orderBy","orderByDescending","compiled","predicate","allData","groupBy","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","error","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_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","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","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","status","reject","_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","prev","_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","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","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","hub","signalr","fail","callbacks","_crud","server","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","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","newLength","j","old","same","removeIndex","newValue","oldValues","newValues","selectedValue","_isBound","scheduler","arr","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","resolveRules","resolvers","validator","ruleResolvers","decode","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","containers","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","replaceWith","insertAfter","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","customMessage","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","_checkUrl","navigatingInExisting","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","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","methodName","getElementById","contents","Layout","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","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","isMoved","startTime","xDelta","yDelta","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","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","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","SCROLL","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","animation","open","close","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","parentsUntil","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","_tap","lastTap","_dragstart","_swipestart","_swipemove","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","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","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","$angular","_overlay","_layout","_scroller","_model","layout","getLayout","reload","stretch","modelScope","scroller","overlay","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","paddingBottom","contentElement","scrollerContent","idAttrValue","contentSelector","header","footer","controller","$apply","_callController","$scope","_locate","platform","previousView","currentView","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","abort","always","_xhrComplete","responseText","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","_loading","changeMessage","transitionDone","EXTERNAL","HREF","DUMMY_HREF","NAVIGATE","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","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","link","rel","delayedTouchEnd","openFor","paneContainer","WRAPPER","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","DIMENSIONS","REVERSE","popupOptions","containerPopup","activate","_activate","deactivate","arrow","elementOffset","offsetAmount","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","align","shim","prevented","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","_update","leftPositioned","swipeToOpenViews","_show","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","currentOffset","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","panes","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","orientation","getOrientationClass","HORIZONTAL","VERTICAL","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","icon","hideBar","_initialHeight","defaultTitle","_hideBar","COMMAND","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_closeProxy","_shimHideProxy","actionData","_close","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","CLICK","DISABLED","DISABLEDSTATE","Button","useTap","clickOn","_userEvents","release","_timeoutDeactivate","badge","badgeElement","button","iconSpan","span","image","iconElement","BackButton","DetailButton","DISABLE","SELECTOR","ButtonGroup","_button","selectOn","_enable","li","buttongroup","COLLAPSIBLE","HEADER","CONTENT","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","not","collapsed","inset","collapseIcon","expandIcon","iconPosition","expand","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","ListView","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABOUND","DATABINDING","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","headers","currentHeader","_","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","setDataSource","pull","_pulled","_first","VirtualList","itemConstructor","prevItem","endReached","below","itemCount","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","firstItem","lastItem","padding","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scroll","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","_refreshHandler","_progressHandler","_unbindDataSource","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","before","autoFilter","searchInput","_oldFilter","_filterChange","clearButton","_dataSourceChange","_refreshInput","appliedFilters","_search","_applyFilter","_clearFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_templates","_itemBinder","_pullToRefreshHandler","_enhanceItems","headerTemplate","emptyDataSource","unwrap","_scrollerInstance","triggerChange","_renderItems","groupTemplate","replaceItem","newItem","_dim","_toggle","_highlight","clicked","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","groupHeader","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","prevAll","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","REFRESH","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","Pager","scrollView","_changeProxy","_refreshProxy","_refresh","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pager","pageElements","_paged","pages","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_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","eventData","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","constrain","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","isDisabled","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","PanelBar","Menu","$log","warn","oldValue","kendoWidget","$parse","assign","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","w","attributeName","cls","ComboBox","rebindAttr","templateOptions","_wrapper","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","isMobile","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","tag","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","self","$injector","$defaultCompile","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","$element","roleattr","Editor","NumericTextBox","DatePicker","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","dataValue","separator","selectedDataItems","$angular_makeEventHandler","kendoEvent","elems","columns","colIdx","locals","isString","selectable","angularDataItem","templateSettings","col","encoded","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templates","templateName","attrName","outerHTML","cloneEvent","initCustomEvent","defaultPrevented","expose","component","props","registerElement","newElement","bindEvents","EVENT_PREFIX","attachedCallback","getPrototypeOf","detachedCallback","registered","major","editor","numerictextbox","datepicker","datetimepicker","timepicker","autocomplete","colorpicker","maskedtextbox","dropdownlist","upload","mobilebutton","mobilebackbutton","mobiledetailbutton","listview","mobilelistview","treeview","menu","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.mobile.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2016.3.1118'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n support.msPointers = window.MSPointerEvent;\n support.pointers = window.PointerEvent;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in document.documentElement.style || 'msPerspective' in document.documentElement.style;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset + sign * document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n value = kendo.template($('#' + value).html());\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $('
' + kendo.ui.progress.messages.loading + '
').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return date.getTime() - getDate(date);\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n element.setSelectionRange(start, end);\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, newLineRegExp = /(\\r+|\\n+)/g, quoteRegExp = /(?=['\\\\])/g;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n }\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(value) {\n return value.replace(quoteRegExp, '\\\\').replace(newLineRegExp, '');\n }\n function operator(op, a, b, ignore) {\n var date;\n if (b != null) {\n if (typeof b === STRING) {\n b = quote(b);\n date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = '\\'' + b.toLowerCase() + '\\'';\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = '\\'' + b + '\\'';\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n if (typeof value == 'string') {\n return '\\'' + quote(value) + '\\'';\n }\n return '' + value;\n },\n eq: function (a, b, ignore) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == 0';\n },\n doesnotstartwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == -1';\n },\n endswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') >= 0';\n },\n doesnotendwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') < 0';\n },\n contains: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') >= 0';\n },\n doesnotcontain: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') == -1';\n },\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' === null || ' + a + ' === undefined)';\n },\n isnotnull: function (a) {\n return '(' + a + ' !== null && ' + a + ' !== undefined)';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) });\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n var idx, length, data = this._flatData(this._data);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n return model;\n },\n pushCreate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.add(item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n that._data = that._observe(data);\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this._readData(state);\n }\n }\n },\n _addRange: function (data) {\n var that = this, start = that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n return Query.process(data, options);\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length) {\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _removeModelFromRanges: function (model) {\n var result, found, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n that.hasChildren = !!hasChildren.call(that, that);\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio' && value != null) {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n });\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n 'validate',\n 'change'\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger('change');\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger('validate', { valid: result });\n if (isValid !== result) {\n this.trigger('change');\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText;\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = typeof e.decode === 'undefined';\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);\n }\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n viewportWidth -= kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n filter: null,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n destroy: function () {\n this.events.destroy();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.view', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.mobile.scroller',\n 'kendo.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.view',\n name: 'View',\n category: 'mobile',\n description: 'Mobile View',\n depends: [\n 'core',\n 'fx',\n 'mobile.scroller',\n 'view'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, attr = kendo.attr, Widget = ui.Widget, ViewClone = kendo.ViewClone, INIT = 'init', UI_OVERLAY = '
    ', BEFORE_SHOW = 'beforeShow', SHOW = 'show', AFTER_SHOW = 'afterShow', BEFORE_HIDE = 'beforeHide', TRANSITION_END = 'transitionEnd', TRANSITION_START = 'transitionStart', HIDE = 'hide', DESTROY = 'destroy', attrValue = kendo.attrValue, roleSelector = kendo.roleSelector, directiveSelector = kendo.directiveSelector, compileMobileDirective = kendo.compileMobileDirective;\n function initPopOvers(element) {\n var popovers = element.find(roleSelector('popover')), idx, length, roles = ui.roles;\n for (idx = 0, length = popovers.length; idx < length; idx++) {\n kendo.initWidget(popovers[idx], {}, roles);\n }\n }\n function preventScrollIfNotInput(e) {\n if (!kendo.triggeredByInput(e)) {\n e.preventDefault();\n }\n }\n var View = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.params = {};\n $.extend(this, options);\n this.transition = this.transition || this.defaultTransition;\n this._id();\n if (!this.options.$angular) {\n this._layout();\n this._overlay();\n this._scroller();\n this._model();\n } else {\n this._overlay();\n }\n },\n events: [\n INIT,\n BEFORE_SHOW,\n SHOW,\n AFTER_SHOW,\n BEFORE_HIDE,\n HIDE,\n DESTROY,\n TRANSITION_START,\n TRANSITION_END\n ],\n options: {\n name: 'View',\n title: '',\n layout: null,\n getLayout: $.noop,\n reload: false,\n transition: '',\n defaultTransition: '',\n useNativeScrolling: false,\n stretch: false,\n zoom: false,\n model: null,\n modelScope: window,\n scroller: {},\n initWidgets: true\n },\n enable: function (enable) {\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n this.overlay.hide();\n } else {\n this.overlay.show();\n }\n },\n destroy: function () {\n if (this.layout) {\n this.layout.detach(this);\n }\n this.trigger(DESTROY);\n Widget.fn.destroy.call(this);\n if (this.scroller) {\n this.scroller.destroy();\n }\n if (this.options.$angular) {\n this.element.scope().$destroy();\n }\n kendo.destroy(this.element);\n },\n purge: function () {\n this.destroy();\n this.element.remove();\n },\n triggerBeforeShow: function () {\n if (this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n return true;\n },\n triggerBeforeHide: function () {\n if (this.trigger(BEFORE_HIDE, { view: this })) {\n return false;\n }\n return true;\n },\n showStart: function () {\n var element = this.element;\n element.css('display', '');\n if (!this.inited) {\n this.inited = true;\n this.trigger(INIT, { view: this });\n } else {\n this._invokeNgController();\n }\n if (this.layout) {\n this.layout.attach(this);\n }\n this._padIfNativeScrolling();\n this.trigger(SHOW, { view: this });\n kendo.resize(element);\n },\n showEnd: function () {\n this.trigger(AFTER_SHOW, { view: this });\n this._padIfNativeScrolling();\n },\n hideEnd: function () {\n var that = this;\n that.element.hide();\n that.trigger(HIDE, { view: that });\n if (that.layout) {\n that.layout.trigger(HIDE, {\n view: that,\n layout: that.layout\n });\n }\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n _padIfNativeScrolling: function () {\n if (mobile.appLevelNativeScrolling()) {\n var isAndroid = kendo.support.mobileOS && kendo.support.mobileOS.android, skin = mobile.application.skin() || '', isAndroidForced = mobile.application.os.android || skin.indexOf('android') > -1, hasPlatformIndependentSkin = skin === 'flat' || skin.indexOf('material') > -1, topContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'footer' : 'header', bottomContainer = (isAndroid || isAndroidForced) && !hasPlatformIndependentSkin ? 'header' : 'footer';\n this.content.css({\n paddingTop: this[topContainer].height(),\n paddingBottom: this[bottomContainer].height()\n });\n }\n },\n contentElement: function () {\n var that = this;\n return that.options.stretch ? that.content : that.scrollerContent;\n },\n clone: function () {\n return new ViewClone(this);\n },\n _scroller: function () {\n var that = this;\n if (mobile.appLevelNativeScrolling()) {\n return;\n }\n if (that.options.stretch) {\n that.content.addClass('km-stretched-view');\n } else {\n that.content.kendoMobileScroller($.extend(that.options.scroller, {\n zoom: that.options.zoom,\n useNative: that.options.useNativeScrolling\n }));\n that.scroller = that.content.data('kendoMobileScroller');\n that.scrollerContent = that.scroller.scrollElement;\n }\n if (kendo.support.kineticScrollNeeded) {\n $(that.element).on('touchmove', '.km-header', preventScrollIfNotInput);\n if (!that.options.useNativeScrolling && !that.options.stretch) {\n $(that.element).on('touchmove', '.km-content', preventScrollIfNotInput);\n }\n }\n },\n _model: function () {\n var that = this, element = that.element, model = that.options.model;\n if (typeof model === 'string') {\n model = kendo.getter(model)(that.options.modelScope);\n }\n that.model = model;\n initPopOvers(element);\n that.element.css('display', '');\n if (that.options.initWidgets) {\n if (model) {\n kendo.bind(element, model, ui, kendo.ui, kendo.dataviz.ui);\n } else {\n mobile.init(element.children());\n }\n }\n that.element.css('display', 'none');\n },\n _id: function () {\n var element = this.element, idAttrValue = element.attr('id') || '';\n this.id = attrValue(element, 'url') || '#' + idAttrValue;\n if (this.id == '#') {\n this.id = kendo.guid();\n element.attr('id', this.id);\n }\n },\n _layout: function () {\n var contentSelector = roleSelector('content'), element = this.element;\n element.addClass('km-view');\n this.header = element.children(roleSelector('header')).addClass('km-header');\n this.footer = element.children(roleSelector('footer')).addClass('km-footer');\n if (!element.children(contentSelector)[0]) {\n element.wrapInner('
    ');\n }\n this.content = element.children(roleSelector('content')).addClass('km-content');\n this.element.prepend(this.header).append(this.footer);\n this.layout = this.options.getLayout(this.layout);\n if (this.layout) {\n this.layout.setup(this);\n }\n },\n _overlay: function () {\n this.overlay = $(UI_OVERLAY).appendTo(this.element);\n },\n _invokeNgController: function () {\n var controller, scope;\n if (this.options.$angular) {\n controller = this.element.controller();\n scope = this.options.$angular[0];\n if (controller) {\n var callback = $.proxy(this, '_callController', controller, scope);\n if (/^\\$(digest|apply)$/.test(scope.$$phase)) {\n callback();\n } else {\n scope.$apply(callback);\n }\n }\n }\n },\n _callController: function (controller, scope) {\n this.element.injector().invoke(controller.constructor, controller, { $scope: scope });\n }\n });\n function initWidgets(collection) {\n collection.each(function () {\n kendo.initWidget($(this), {}, ui.roles);\n });\n }\n var Layout = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n element = this.element;\n this.header = element.children(this._locate('header')).addClass('km-header');\n this.footer = element.children(this._locate('footer')).addClass('km-footer');\n this.elements = this.header.add(this.footer);\n initPopOvers(element);\n if (!this.options.$angular) {\n kendo.mobile.init(this.element.children());\n }\n this.element.detach();\n this.trigger(INIT, { layout: this });\n },\n _locate: function (selectors) {\n return this.options.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n options: {\n name: 'Layout',\n id: null,\n platform: null\n },\n events: [\n INIT,\n SHOW,\n HIDE\n ],\n setup: function (view) {\n if (!view.header[0]) {\n view.header = this.header;\n }\n if (!view.footer[0]) {\n view.footer = this.footer;\n }\n },\n detach: function (view) {\n var that = this;\n if (view.header === that.header && that.header[0]) {\n view.element.prepend(that.header.detach()[0].cloneNode(true));\n }\n if (view.footer === that.footer && that.footer.length) {\n view.element.append(that.footer.detach()[0].cloneNode(true));\n }\n },\n attach: function (view) {\n var that = this, previousView = that.currentView;\n if (previousView) {\n that.detach(previousView);\n }\n if (view.header === that.header) {\n that.header.detach();\n view.element.children(roleSelector('header')).remove();\n view.element.prepend(that.header);\n }\n if (view.footer === that.footer) {\n that.footer.detach();\n view.element.children(roleSelector('footer')).remove();\n view.element.append(that.footer);\n }\n that.trigger(SHOW, {\n layout: that,\n view: view\n });\n that.currentView = view;\n }\n });\n var Observable = kendo.Observable, bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i, LOAD_START = 'loadStart', LOAD_COMPLETE = 'loadComplete', SHOW_START = 'showStart', SAME_VIEW_REQUESTED = 'sameViewRequested', VIEW_SHOW = 'viewShow', VIEW_TYPE_DETERMINED = 'viewTypeDetermined', AFTER = 'after';\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, errorMessage, container, collection;\n Observable.fn.init.call(that);\n $.extend(that, options);\n that.sandbox = $('
    ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n if (!that.rootView[0] && options.rootNeeded) {\n if (container[0] == kendo.mobile.application.element[0]) {\n errorMessage = 'Your kendo mobile application element does not contain any direct child elements with data-role=\"view\" attribute set. Make sure that you instantiate the mobile application using the correct container.';\n } else {\n errorMessage = 'Your pane element does not contain any direct child elements with data-role=\"view\" attribute set.';\n }\n throw new Error(errorMessage);\n }\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.getLayoutProxy = $.proxy(this, '_getLayout');\n that._setupLayouts(container);\n collection = container.children(that._locate('modalview drawer'));\n if (that.$angular) {\n that.$angular[0].viewOptions = {\n defaultTransition: that.transition,\n loader: that.loader,\n container: that.container,\n getLayout: that.getLayoutProxy\n };\n collection.each(function (idx, element) {\n compileMobileDirective($(element), options.$angular[0]);\n });\n } else {\n initWidgets(collection);\n }\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n kendo.destroy(this.container);\n for (var id in this.layouts) {\n this.layouts[id].destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, showClosure = function (view) {\n return that.viewContainer.show(view, transition, url);\n }, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return showClosure(view);\n } else {\n if (this.serverNavigation) {\n location.href = url;\n } else {\n that._loadView(url, showClosure);\n }\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, modalViews, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
    ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n this._setupLayouts(sandbox);\n modalViews = sandbox.children(this._locate('modalview drawer'));\n container.append(sandbox.children(this._locate('layout modalview drawer')).add(views));\n initWidgets(modalViews);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n return element;\n },\n _createView: function (element) {\n if (this.$angular) {\n return compileMobileDirective(element, this.$angular[0]);\n } else {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n }\n },\n _getLayout: function (name) {\n if (name === '') {\n return null;\n }\n return name ? this.layouts[name] : this.layouts[this.layout];\n },\n _loadView: function (url, callback) {\n if (this._xhr) {\n this._xhr.abort();\n }\n this.trigger(LOAD_START);\n this._xhr = $.get(kendo.absoluteURL(url, this.remoteViewURLPrefix), 'html').always($.proxy(this, '_xhrComplete', callback, url));\n },\n _xhrComplete: function (callback, url, response) {\n var success = true;\n if (typeof response === 'object') {\n if (response.status === 0) {\n if (response.responseText && response.responseText.length > 0) {\n success = true;\n response = response.responseText;\n } else {\n return;\n }\n }\n }\n this.trigger(LOAD_COMPLETE);\n if (success) {\n callback(this.append(response, url));\n }\n },\n _hideViews: function (container) {\n return container.children(this._locate('view splitview')).hide();\n },\n _setupLayouts: function (element) {\n var that = this, layout;\n element.children(that._locate('layout')).each(function () {\n if (that.$angular) {\n layout = compileMobileDirective($(this), that.$angular[0]);\n } else {\n layout = kendo.initWidget($(this), {}, ui.roles);\n }\n var platform = layout.options.platform;\n if (!platform || platform === mobile.application.os.name) {\n that.layouts[layout.options.id] = layout;\n } else {\n layout.destroy();\n }\n });\n }\n });\n kendo.mobile.ViewEngine = ViewEngine;\n ui.plugin(View);\n ui.plugin(Layout);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.loader', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.loader',\n name: 'Loader',\n category: 'mobile',\n description: 'Mobile Loader',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, CAPTURE_EVENTS = $.map(kendo.eventMap, function (value) {\n return value;\n }).join(' ').split(' ');\n var Loader = Widget.extend({\n init: function (container, options) {\n var that = this, element = $('
    ');\n Widget.fn.init.call(that, element, options);\n that.container = container;\n that.captureEvents = false;\n that._attachCapture();\n element.append(that.options.loading).hide().appendTo(container);\n },\n options: {\n name: 'Loader',\n loading: '

    Loading...

    ',\n timeout: 100\n },\n show: function () {\n var that = this;\n clearTimeout(that._loading);\n if (that.options.loading === false) {\n return;\n }\n that.captureEvents = true;\n that._loading = setTimeout(function () {\n that.element.show();\n }, that.options.timeout);\n },\n hide: function () {\n this.captureEvents = false;\n clearTimeout(this._loading);\n this.element.hide();\n },\n changeMessage: function (message) {\n this.options.loading = message;\n this.element.find('>h1').html(message);\n },\n transition: function () {\n this.captureEvents = true;\n this.container.css('pointer-events', 'none');\n },\n transitionDone: function () {\n this.captureEvents = false;\n this.container.css('pointer-events', '');\n },\n _attachCapture: function () {\n var that = this;\n that.captureEvents = false;\n function capture(e) {\n if (that.captureEvents) {\n e.preventDefault();\n }\n }\n for (var i = 0; i < CAPTURE_EVENTS.length; i++) {\n that.container[0].addEventListener(CAPTURE_EVENTS[i], capture, true);\n }\n }\n });\n ui.plugin(Loader);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.pane', [\n 'kendo.mobile.view',\n 'kendo.mobile.loader'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.pane',\n name: 'Pane',\n category: 'mobile',\n description: 'Mobile Pane',\n depends: [\n 'mobile.view',\n 'mobile.loader'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, roleSelector = kendo.roleSelector, ui = mobile.ui, Widget = ui.Widget, ViewEngine = mobile.ViewEngine, View = ui.View, Loader = mobile.ui.Loader, EXTERNAL = 'external', HREF = 'href', DUMMY_HREF = '#!', NAVIGATE = 'navigate', VIEW_SHOW = 'viewShow', SAME_VIEW_REQUESTED = 'sameViewRequested', OS = kendo.support.mobileOS, SKIP_TRANSITION_ON_BACK_BUTTON = OS.ios && !OS.appMode && OS.flatVersion >= 700, WIDGET_RELS = /popover|actionsheet|modalview|drawer/, BACK = '#:back', attrValue = kendo.attrValue;\n var Pane = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n element.addClass('km-pane');\n if (that.options.collapsible) {\n element.addClass('km-collapsible-pane');\n }\n this.history = [];\n this.historyCallback = function (url, params, backButtonPressed) {\n var transition = that.transition;\n that.transition = null;\n if (SKIP_TRANSITION_ON_BACK_BUTTON && backButtonPressed) {\n transition = 'none';\n }\n return that.viewEngine.showView(url, transition, params);\n };\n this._historyNavigate = function (url) {\n if (url === BACK) {\n if (that.history.length === 1) {\n return;\n }\n that.history.pop();\n url = that.history[that.history.length - 1];\n } else {\n that.history.push(url);\n }\n that.historyCallback(url, kendo.parseQueryStringParams(url));\n };\n this._historyReplace = function (url) {\n var params = kendo.parseQueryStringParams(url);\n that.history[that.history.length - 1] = url;\n that.historyCallback(url, params);\n };\n that.loader = new Loader(element, { loading: that.options.loading });\n that.viewEngine = new ViewEngine({\n container: element,\n transition: options.transition,\n modelScope: options.modelScope,\n rootNeeded: !options.initial,\n serverNavigation: options.serverNavigation,\n remoteViewURLPrefix: options.root || '',\n layout: options.layout,\n $angular: options.$angular,\n loader: that.loader,\n showStart: function () {\n that.loader.transition();\n that.closeActiveDialogs();\n },\n after: function () {\n that.loader.transitionDone();\n },\n viewShow: function (e) {\n that.trigger(VIEW_SHOW, e);\n },\n loadStart: function () {\n that.loader.show();\n },\n loadComplete: function () {\n that.loader.hide();\n },\n sameViewRequested: function () {\n that.trigger(SAME_VIEW_REQUESTED);\n },\n viewTypeDetermined: function (e) {\n if (!e.remote || !that.options.serverNavigation) {\n that.trigger(NAVIGATE, { url: e.url });\n }\n }\n });\n this._setPortraitWidth();\n kendo.onResize(function () {\n that._setPortraitWidth();\n });\n that._setupAppLinks();\n },\n closeActiveDialogs: function () {\n var dialogs = this.element.find(roleSelector('actionsheet popover modalview')).filter(':visible');\n dialogs.each(function () {\n kendo.widgetInstance($(this), ui).close();\n });\n },\n navigateToInitial: function () {\n var initial = this.options.initial;\n if (initial) {\n this.navigate(initial);\n }\n return initial;\n },\n options: {\n name: 'Pane',\n portraitWidth: '',\n transition: '',\n layout: '',\n collapsible: false,\n initial: null,\n modelScope: window,\n loading: '

    Loading...

    '\n },\n events: [\n NAVIGATE,\n VIEW_SHOW,\n SAME_VIEW_REQUESTED\n ],\n append: function (html) {\n return this.viewEngine.append(html);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.viewEngine.destroy();\n this.userEvents.destroy();\n },\n navigate: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyNavigate(url);\n },\n replace: function (url, transition) {\n if (url instanceof View) {\n url = url.id;\n }\n this.transition = transition;\n this._historyReplace(url);\n },\n bindToRouter: function (router) {\n var that = this, history = this.history, viewEngine = this.viewEngine;\n router.bind('init', function (e) {\n var url = e.url, attrUrl = router.pushState ? url : '/';\n viewEngine.rootView.attr(kendo.attr('url'), attrUrl);\n var length = history.length;\n if (url === '/' && length) {\n router.navigate(history[length - 1], true);\n e.preventDefault();\n }\n });\n router.bind('routeMissing', function (e) {\n if (!that.historyCallback(e.url, e.params, e.backButtonPressed)) {\n e.preventDefault();\n }\n });\n router.bind('same', function () {\n that.trigger(SAME_VIEW_REQUESTED);\n });\n that._historyNavigate = function (url) {\n router.navigate(url);\n };\n that._historyReplace = function (url) {\n router.replace(url);\n };\n },\n hideLoading: function () {\n this.loader.hide();\n },\n showLoading: function () {\n this.loader.show();\n },\n changeLoadingMessage: function (message) {\n this.loader.changeMessage(message);\n },\n view: function () {\n return this.viewEngine.view();\n },\n _setPortraitWidth: function () {\n var width, portraitWidth = this.options.portraitWidth;\n if (portraitWidth) {\n width = kendo.mobile.application.element.is('.km-vertical') ? portraitWidth : 'auto';\n this.element.css('width', width);\n }\n },\n _setupAppLinks: function () {\n var that = this, linkRoles = 'tab', pressedButtonSelector = '[data-' + kendo.ns + 'navigate-on-press]', buttonSelectors = $.map([\n 'button',\n 'backbutton',\n 'detailbutton',\n 'listview-link'\n ], function (role) {\n return roleSelector(role) + ':not(' + pressedButtonSelector + ')';\n }).join(',');\n this.element.handler(this).on('down', roleSelector(linkRoles) + ',' + pressedButtonSelector, '_mouseup').on('click', roleSelector(linkRoles) + ',' + buttonSelectors + ',' + pressedButtonSelector, '_appLinkClick');\n this.userEvents = new kendo.UserEvents(this.element, {\n fastTap: true,\n filter: buttonSelectors,\n tap: function (e) {\n e.event.currentTarget = e.touch.currentTarget;\n that._mouseup(e.event);\n }\n });\n this.element.css('-ms-touch-action', '');\n },\n _appLinkClick: function (e) {\n var href = $(e.currentTarget).attr('href');\n var remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (!remote && attrValue($(e.currentTarget), 'rel') != EXTERNAL) {\n e.preventDefault();\n }\n },\n _mouseup: function (e) {\n if (e.which > 1 || e.isDefaultPrevented()) {\n return;\n }\n var pane = this, link = $(e.currentTarget), transition = attrValue(link, 'transition'), rel = attrValue(link, 'rel') || '', target = attrValue(link, 'target'), href = link.attr(HREF), delayedTouchEnd = SKIP_TRANSITION_ON_BACK_BUTTON && link[0].offsetHeight === 0, remote = href && href[0] !== '#' && this.options.serverNavigation;\n if (delayedTouchEnd || remote || rel === EXTERNAL || typeof href === 'undefined' || href === DUMMY_HREF) {\n return;\n }\n link.attr(HREF, DUMMY_HREF);\n setTimeout(function () {\n link.attr(HREF, href);\n });\n if (rel.match(WIDGET_RELS)) {\n kendo.widgetInstance($(href), ui).openFor(link);\n if (rel === 'actionsheet' || rel === 'drawer') {\n e.stopPropagation();\n }\n } else {\n if (target === '_top') {\n pane = mobile.application.pane;\n } else if (target) {\n pane = $('#' + target).data('kendoMobilePane');\n }\n pane.navigate(href, transition);\n }\n e.preventDefault();\n }\n });\n Pane.wrap = function (element) {\n if (!element.is(roleSelector('view'))) {\n element = element.wrap('
    ').parent();\n }\n var paneContainer = element.wrap('
    ').parent(), pane = new Pane(paneContainer);\n pane.navigate('');\n return pane;\n };\n ui.plugin(Pane);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.popover', [\n 'kendo.popup',\n 'kendo.mobile.pane'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.popover',\n name: 'PopOver',\n category: 'mobile',\n description: 'The mobile PopOver widget represents a transient view which is displayed when the user taps on a navigational widget or area on the screen. ',\n depends: [\n 'popup',\n 'mobile.pane'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, HIDE = 'hide', OPEN = 'open', CLOSE = 'close', WRAPPER = '
    ', ARROW = '
    ', OVERLAY = '
    ', DIRECTION_CLASSES = 'km-up km-down km-left km-right', Widget = ui.Widget, DIRECTIONS = {\n 'down': {\n origin: 'bottom center',\n position: 'top center'\n },\n 'up': {\n origin: 'top center',\n position: 'bottom center'\n },\n 'left': {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n 'right': {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n }\n }, ANIMATION = {\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n effects: 'fade:out',\n duration: 400\n }\n }\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'height'\n },\n 'vertical': {\n offset: 'left',\n size: 'width'\n }\n }, REVERSE = {\n 'up': 'down',\n 'down': 'up',\n 'left': 'right',\n 'right': 'left'\n };\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, containerPopup = element.closest('.km-modalview-wrapper'), viewport = element.closest('.km-root').children('.km-pane').first(), container = containerPopup[0] ? containerPopup : viewport, popupOptions, axis;\n if (options.viewport) {\n viewport = options.viewport;\n } else if (!viewport[0]) {\n viewport = window;\n }\n if (options.container) {\n container = options.container;\n } else if (!container[0]) {\n container = document.body;\n }\n popupOptions = {\n viewport: viewport,\n copyAnchorStyles: false,\n autosize: true,\n open: function () {\n that.overlay.show();\n },\n activate: $.proxy(that._activate, that),\n deactivate: function () {\n that.overlay.hide();\n if (!that._apiCall) {\n that.trigger(HIDE);\n }\n that._apiCall = false;\n }\n };\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n element.wrap(WRAPPER).addClass('km-popup').show();\n axis = that.options.direction.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that.wrapper = element.parent().css({\n width: options.width,\n height: options.height\n }).addClass('km-popup-wrapper km-' + options.direction).hide();\n that.arrow = $(ARROW).prependTo(that.wrapper).hide();\n that.overlay = $(OVERLAY).appendTo(container).hide();\n popupOptions.appendTo = that.overlay;\n if (options.className) {\n that.overlay.addClass(options.className);\n }\n that.popup = new kendo.ui.Popup(that.wrapper, $.extend(true, popupOptions, ANIMATION, DIRECTIONS[options.direction]));\n },\n options: {\n name: 'Popup',\n width: 240,\n height: '',\n direction: 'down',\n container: null,\n viewport: null\n },\n events: [HIDE],\n show: function (target) {\n this.popup.options.anchor = $(target);\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.popup.destroy();\n this.overlay.remove();\n },\n target: function () {\n return this.popup.options.anchor;\n },\n _activate: function () {\n var that = this, direction = that.options.direction, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = popup.flipped ? REVERSE[direction] : direction, min = that.arrow[dimensions.size]() * 2, max = that.element[dimensions.size]() - that.arrow[dimensions.size](), size = $(anchor)[dimensions.size](), offsetAmount = anchorOffset[offset] - elementOffset[offset] + size / 2;\n if (offsetAmount < min) {\n offsetAmount = min;\n }\n if (offsetAmount > max) {\n offsetAmount = max;\n }\n that.wrapper.removeClass(DIRECTION_CLASSES).addClass('km-' + cssClass);\n that.arrow.css(offset, offsetAmount).show();\n }\n });\n var PopOver = Widget.extend({\n init: function (element, options) {\n var that = this, popupOptions;\n that.initialOpen = false;\n Widget.fn.init.call(that, element, options);\n popupOptions = $.extend({\n className: 'km-popover-root',\n hide: function () {\n that.trigger(CLOSE);\n }\n }, this.options.popup);\n that.popup = new Popup(that.element, popupOptions);\n that.popup.overlay.on('move', function (e) {\n if (e.target == that.popup.overlay[0]) {\n e.preventDefault();\n }\n });\n that.pane = new ui.Pane(that.element, $.extend(this.options.pane, { $angular: this.options.$angular }));\n kendo.notify(that, ui);\n },\n options: {\n name: 'PopOver',\n popup: {},\n pane: {}\n },\n events: [\n OPEN,\n CLOSE\n ],\n open: function (target) {\n this.popup.show(target);\n if (!this.initialOpen) {\n if (!this.pane.navigateToInitial()) {\n this.pane.navigate('');\n }\n this.popup.popup._position();\n this.initialOpen = true;\n } else {\n this.pane.view()._invokeNgController();\n }\n },\n openFor: function (target) {\n this.open(target);\n this.trigger(OPEN, { target: this.popup.target() });\n },\n close: function () {\n this.popup.hide();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n this.popup.destroy();\n kendo.destroy(this.element);\n }\n });\n ui.plugin(Popup);\n ui.plugin(PopOver);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.shim', ['kendo.popup'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.shim',\n name: 'Shim',\n category: 'mobile',\n description: 'Mobile Shim',\n depends: ['popup'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Popup = kendo.ui.Popup, SHIM = '
    ', HIDE = 'hide', Widget = ui.Widget;\n var Shim = Widget.extend({\n init: function (element, options) {\n var that = this, app = kendo.mobile.application, os = kendo.support.mobileOS, osname = app ? app.os.name : os ? os.name : 'ios', ioswp = osname === 'ios' || osname === 'wp' || (app ? app.os.skin : false), bb = osname === 'blackberry', align = options.align || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), position = options.position || (ioswp ? 'bottom center' : bb ? 'center right' : 'center center'), effect = options.effect || (ioswp ? 'slideIn:up' : bb ? 'slideIn:left' : 'fade:in'), shim = $(SHIM).handler(that).hide();\n Widget.fn.init.call(that, element, options);\n that.shim = shim;\n element = that.element;\n options = that.options;\n if (options.className) {\n that.shim.addClass(options.className);\n }\n if (!options.modal) {\n that.shim.on('down', '_hide');\n }\n (app ? app.element : $(document.body)).append(shim);\n that.popup = new Popup(that.element, {\n anchor: shim,\n modal: true,\n appendTo: shim,\n origin: align,\n position: position,\n animation: {\n open: {\n effects: effect,\n duration: options.duration\n },\n close: { duration: options.duration }\n },\n close: function (e) {\n var prevented = false;\n if (!that._apiCall) {\n prevented = that.trigger(HIDE);\n }\n if (prevented) {\n e.preventDefault();\n }\n that._apiCall = false;\n },\n deactivate: function () {\n shim.hide();\n },\n open: function () {\n shim.show();\n }\n });\n kendo.notify(that);\n },\n events: [HIDE],\n options: {\n name: 'Shim',\n modal: false,\n align: undefined,\n position: undefined,\n effect: undefined,\n duration: 200\n },\n show: function () {\n this.popup.open();\n },\n hide: function () {\n this._apiCall = true;\n this.popup.close();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.kendoDestroy();\n this.popup.destroy();\n this.shim.remove();\n },\n _hide: function (e) {\n if (!e || !$.contains(this.shim.children().children('.k-popup')[0], e.target)) {\n this.popup.close();\n }\n }\n });\n ui.plugin(Shim);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.modalview', [\n 'kendo.mobile.shim',\n 'kendo.mobile.view'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.modalview',\n name: 'ModalView',\n category: 'mobile',\n description: 'The Kendo ModalView is used to present self-contained functionality in the context of the current task.',\n depends: [\n 'mobile.shim',\n 'mobile.view'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Shim = ui.Shim, Widget = ui.Widget, BEFORE_OPEN = 'beforeOpen', OPEN = 'open', CLOSE = 'close', INIT = 'init', WRAP = '
    ';\n var ModalView = ui.View.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._id();\n that._wrap();\n that._shim();\n if (!this.options.$angular) {\n that._layout();\n that._scroller();\n that._model();\n }\n that.element.css('display', '');\n that.trigger(INIT);\n },\n events: [\n INIT,\n BEFORE_OPEN,\n OPEN,\n CLOSE\n ],\n options: {\n name: 'ModalView',\n modal: true,\n width: null,\n height: null\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.shim.destroy();\n },\n open: function (target) {\n var that = this;\n that.target = $(target);\n that.shim.show();\n that._invokeNgController();\n that.trigger('show', { view: that });\n },\n openFor: function (target) {\n if (!this.trigger(BEFORE_OPEN, { target: target })) {\n this.open(target);\n this.trigger(OPEN, { target: target });\n }\n },\n close: function () {\n if (this.element.is(':visible') && !this.trigger(CLOSE)) {\n this.shim.hide();\n }\n },\n _wrap: function () {\n var that = this, element = that.element, options = that.options, width, height;\n width = element[0].style.width || 'auto';\n height = element[0].style.height || 'auto';\n element.addClass('km-modalview').wrap(WRAP);\n that.wrapper = element.parent().css({\n width: options.width || width || 300,\n height: options.height || height || 300\n }).addClass(height == 'auto' ? ' km-auto-height' : '');\n element.css({\n width: '',\n height: ''\n });\n },\n _shim: function () {\n var that = this;\n that.shim = new Shim(that.wrapper, {\n modal: that.options.modal,\n position: 'center center',\n align: 'center center',\n effect: 'fade:in',\n className: 'km-modalview-root',\n hide: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n }\n }\n });\n }\n });\n ui.plugin(ModalView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.drawer', [\n 'kendo.mobile.view',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.drawer',\n name: 'Drawer',\n category: 'mobile',\n description: 'The Kendo Mobile Drawer widget provides slide to reveal global application toolbox',\n depends: [\n 'mobile.view',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, os = kendo.support.mobileOS, Transition = kendo.effects.Transition, roleSelector = kendo.roleSelector, AXIS = 'x', ui = mobile.ui, SWIPE_TO_OPEN = !(os.ios && os.majorVersion == 7 && !os.appMode), BEFORE_SHOW = 'beforeShow', INIT = 'init', SHOW = 'show', HIDE = 'hide', AFTER_HIDE = 'afterHide', NULL_VIEW = { enable: $.noop };\n var Drawer = ui.View.extend({\n init: function (element, options) {\n $(element).parent().prepend(element);\n mobile.ui.Widget.fn.init.call(this, element, options);\n if (!this.options.$angular) {\n this._layout();\n this._scroller();\n }\n this._model();\n var pane = this.element.closest(roleSelector('pane')).data('kendoMobilePane'), userEvents;\n if (pane) {\n this.pane = pane;\n this.pane.bind('viewShow', function (e) {\n drawer._viewShow(e);\n });\n this.pane.bind('sameViewRequested', function () {\n drawer.hide();\n });\n userEvents = this.userEvents = new kendo.UserEvents(pane.element, {\n fastTap: true,\n filter: roleSelector('view splitview'),\n allowSelection: true\n });\n } else {\n this.currentView = NULL_VIEW;\n var container = $(this.options.container);\n if (!container) {\n throw new Error('The drawer needs a container configuration option set.');\n }\n userEvents = this.userEvents = new kendo.UserEvents(container, {\n fastTap: true,\n allowSelection: true\n });\n this._attachTransition(container);\n }\n var drawer = this;\n var hide = function (e) {\n if (drawer.visible) {\n drawer.hide();\n e.preventDefault();\n }\n };\n if (this.options.swipeToOpen && SWIPE_TO_OPEN) {\n userEvents.bind('press', function () {\n drawer.transition.cancel();\n });\n userEvents.bind('start', function (e) {\n drawer._start(e);\n });\n userEvents.bind('move', function (e) {\n drawer._update(e);\n });\n userEvents.bind('end', function (e) {\n drawer._end(e);\n });\n userEvents.bind('tap', hide);\n } else {\n userEvents.bind('press', hide);\n }\n this.leftPositioned = this.options.position === 'left';\n this.visible = false;\n this.element.hide().addClass('km-drawer').addClass(this.leftPositioned ? 'km-left-drawer' : 'km-right-drawer');\n this.trigger(INIT);\n },\n options: {\n name: 'Drawer',\n position: 'left',\n views: [],\n swipeToOpenViews: [],\n swipeToOpen: true,\n title: '',\n container: null\n },\n events: [\n BEFORE_SHOW,\n HIDE,\n AFTER_HIDE,\n INIT,\n SHOW\n ],\n show: function () {\n if (this._activate()) {\n this._show();\n }\n },\n hide: function () {\n if (!this.currentView) {\n return;\n }\n this.currentView.enable();\n Drawer.current = null;\n this._moveViewTo(0);\n this.trigger(HIDE, { view: this });\n },\n openFor: function () {\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n destroy: function () {\n ui.View.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n _activate: function () {\n if (this.visible) {\n return true;\n }\n var visibleOnCurrentView = this._currentViewIncludedIn(this.options.views);\n if (!visibleOnCurrentView || this.trigger(BEFORE_SHOW, { view: this })) {\n return false;\n }\n this._setAsCurrent();\n this.element.show();\n this.trigger(SHOW, { view: this });\n this._invokeNgController();\n return true;\n },\n _currentViewIncludedIn: function (views) {\n if (!this.pane || !views.length) {\n return true;\n }\n var view = this.pane.view();\n return $.inArray(view.id.replace('#', ''), views) > -1 || $.inArray(view.element.attr('id'), views) > -1;\n },\n _show: function () {\n this.currentView.enable(false);\n this.visible = true;\n var offset = this.element.width();\n if (!this.leftPositioned) {\n offset = -offset;\n }\n this._moveViewTo(offset);\n },\n _setAsCurrent: function () {\n if (Drawer.last !== this) {\n if (Drawer.last) {\n Drawer.last.element.hide();\n }\n this.element.show();\n }\n Drawer.last = this;\n Drawer.current = this;\n },\n _moveViewTo: function (offset) {\n this.userEvents.cancel();\n this.transition.moveTo({\n location: offset,\n duration: 400,\n ease: Transition.easeOutExpo\n });\n },\n _viewShow: function (e) {\n if (this.currentView) {\n this.currentView.enable();\n }\n if (this.currentView === e.view) {\n this.hide();\n return;\n }\n this.currentView = e.view;\n this._attachTransition(e.view.element);\n },\n _attachTransition: function (element) {\n var that = this, movable = this.movable, currentOffset = movable && movable.x;\n if (this.transition) {\n this.transition.cancel();\n this.movable.moveAxis('x', 0);\n }\n movable = this.movable = new kendo.ui.Movable(element);\n this.transition = new Transition({\n axis: AXIS,\n movable: this.movable,\n onEnd: function () {\n if (movable[AXIS] === 0) {\n element[0].style.cssText = '';\n that.element.hide();\n that.trigger(AFTER_HIDE);\n that.visible = false;\n }\n }\n });\n if (currentOffset) {\n element.addClass('k-fx-hidden');\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden');\n that.movable.moveAxis(AXIS, currentOffset);\n that.hide();\n });\n }\n },\n _start: function (e) {\n var userEvents = e.sender;\n if (Math.abs(e.x.velocity) < Math.abs(e.y.velocity) || kendo.triggeredByInput(e.event) || !this._currentViewIncludedIn(this.options.swipeToOpenViews)) {\n userEvents.cancel();\n return;\n }\n var leftPositioned = this.leftPositioned, visible = this.visible, canMoveLeft = leftPositioned && visible || !leftPositioned && !Drawer.current, canMoveRight = !leftPositioned && visible || leftPositioned && !Drawer.current, leftSwipe = e.x.velocity < 0;\n if (canMoveLeft && leftSwipe || canMoveRight && !leftSwipe) {\n if (this._activate()) {\n userEvents.capture();\n return;\n }\n }\n userEvents.cancel();\n },\n _update: function (e) {\n var movable = this.movable, newPosition = movable.x + e.x.delta, limitedPosition;\n if (this.leftPositioned) {\n limitedPosition = Math.min(Math.max(0, newPosition), this.element.width());\n } else {\n limitedPosition = Math.max(Math.min(0, newPosition), -this.element.width());\n }\n this.movable.moveAxis(AXIS, limitedPosition);\n e.event.preventDefault();\n e.event.stopPropagation();\n },\n _end: function (e) {\n var velocity = e.x.velocity, pastHalf = Math.abs(this.movable.x) > this.element.width() / 2, velocityThreshold = 0.8, shouldShow;\n if (this.leftPositioned) {\n shouldShow = velocity > -velocityThreshold && (velocity > velocityThreshold || pastHalf);\n } else {\n shouldShow = velocity < velocityThreshold && (velocity < -velocityThreshold || pastHalf);\n }\n if (shouldShow) {\n this._show();\n } else {\n this.hide();\n }\n }\n });\n ui.plugin(Drawer);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.splitview', ['kendo.mobile.pane'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.splitview',\n name: 'SplitView',\n category: 'mobile',\n description: 'The mobile SplitView is a tablet-specific view that consists of two or more mobile Pane widgets.',\n depends: ['mobile.pane']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, EXPANED_PANE_SHIM = '
    ', View = ui.View;\n var SplitView = View.extend({\n init: function (element, options) {\n var that = this, pane, modalViews;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n $.extend(that, options);\n that._id();\n if (!that.options.$angular) {\n that._layout();\n that._overlay();\n } else {\n that._overlay();\n }\n that._style();\n modalViews = element.children(that._locate('modalview'));\n if (!that.options.$angular) {\n kendo.mobile.init(modalViews);\n } else {\n modalViews.each(function (idx, element) {\n kendo.compileMobileDirective($(element), options.$angular[0]);\n });\n }\n that.panes = [];\n that._paramsHistory = [];\n if (!that.options.$angular) {\n that.content.children(kendo.roleSelector('pane')).each(function () {\n pane = kendo.initWidget(this, {}, ui.roles);\n that.panes.push(pane);\n });\n } else {\n that.element.children(kendo.directiveSelector('pane')).each(function () {\n pane = kendo.compileMobileDirective($(this), options.$angular[0]);\n that.panes.push(pane);\n });\n that.element.children(kendo.directiveSelector('header footer')).each(function () {\n kendo.compileMobileDirective($(this), options.$angular[0]);\n });\n }\n that.expandedPaneShim = $(EXPANED_PANE_SHIM).appendTo(that.element);\n that._shimUserEvents = new kendo.UserEvents(that.expandedPaneShim, {\n fastTap: true,\n tap: function () {\n that.collapsePanes();\n }\n });\n },\n _locate: function (selectors) {\n return this.options.$angular ? kendo.directiveSelector(selectors) : kendo.roleSelector(selectors);\n },\n options: {\n name: 'SplitView',\n style: 'horizontal'\n },\n expandPanes: function () {\n this.element.addClass('km-expanded-splitview');\n },\n collapsePanes: function () {\n this.element.removeClass('km-expanded-splitview');\n },\n _layout: function () {\n var that = this, element = that.element;\n that.transition = kendo.attrValue(element, 'transition');\n kendo.mobile.ui.View.prototype._layout.call(this);\n kendo.mobile.init(this.header.add(this.footer));\n that.element.addClass('km-splitview');\n that.content.addClass('km-split-content');\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-split-' + this);\n });\n }\n },\n showStart: function () {\n var that = this;\n that.element.css('display', '');\n if (!that.inited) {\n that.inited = true;\n $.each(that.panes, function () {\n if (this.options.initial) {\n this.navigateToInitial();\n } else {\n this.navigate('');\n }\n });\n that.trigger('init', { view: that });\n } else {\n this._invokeNgController();\n }\n that.trigger('show', { view: that });\n }\n });\n ui.plugin(SplitView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.application', [\n 'kendo.mobile.pane',\n 'kendo.router'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.application',\n name: 'Application',\n category: 'mobile',\n description: 'The Mobile application provides a framework to build native looking web applications on mobile devices.',\n depends: [\n 'mobile.pane',\n 'router'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, support = kendo.support, Widget = mobile.ui.Widget, Pane = mobile.ui.Pane, DEFAULT_OS = 'ios7', OS = support.mobileOS, BERRYPHONEGAP = OS.device == 'blackberry' && OS.flatVersion >= 600 && OS.flatVersion < 1000 && OS.appMode, FONT_SIZE_COEF = 0.93, VERTICAL = 'km-vertical', CHROME = OS.browser === 'chrome', BROKEN_WEBVIEW_RESIZE = OS.ios && OS.flatVersion >= 700 && OS.flatVersion < 800 && (OS.appMode || CHROME), INITIALLY_HORIZONTAL = Math.abs(window.orientation) / 90 == 1, HORIZONTAL = 'km-horizontal', MOBILE_PLATFORMS = {\n ios7: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '700',\n majorVersion: '7',\n minorVersion: '0.0',\n name: 'ios',\n tablet: false\n },\n ios: {\n ios: true,\n browser: 'default',\n device: 'iphone',\n flatVersion: '612',\n majorVersion: '6',\n minorVersion: '1.2',\n name: 'ios',\n tablet: false\n },\n android: {\n android: true,\n browser: 'default',\n device: 'android',\n flatVersion: '442',\n majorVersion: '4',\n minorVersion: '4.2',\n name: 'android',\n tablet: false\n },\n blackberry: {\n blackberry: true,\n browser: 'default',\n device: 'blackberry',\n flatVersion: '710',\n majorVersion: '7',\n minorVersion: '1.0',\n name: 'blackberry',\n tablet: false\n },\n meego: {\n meego: true,\n browser: 'default',\n device: 'meego',\n flatVersion: '850',\n majorVersion: '8',\n minorVersion: '5.0',\n name: 'meego',\n tablet: false\n },\n wp: {\n wp: true,\n browser: 'default',\n device: 'wp',\n flatVersion: '800',\n majorVersion: '8',\n minorVersion: '0.0',\n name: 'wp',\n tablet: false\n }\n }, viewportTemplate = kendo.template('', { usedWithBlock: false }), systemMeta = kendo.template(' ' + ' ' + ' ', { usedWithBlock: false }), clipTemplate = kendo.template('', { usedWithBlock: false }), ENABLE_CLIP = OS.android && OS.browser != 'chrome' || OS.blackberry, iconMeta = kendo.template('', { usedWithBlock: false }), HIDEBAR = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion < 7, SUPPORT_SWIPE_TO_GO_BACK = (OS.device == 'iphone' || OS.device == 'ipod') && OS.majorVersion >= 7, HISTORY_TRANSITION = SUPPORT_SWIPE_TO_GO_BACK ? 'none' : null, BARCOMPENSATION = OS.browser == 'mobilesafari' ? 60 : 0, STATUS_BAR_HEIGHT = 20, WINDOW = $(window), SCREEN = window.screen, HEAD = $('head'), INIT = 'init', proxy = $.proxy;\n function osCssClass(os, options) {\n var classes = [];\n if (OS) {\n classes.push('km-on-' + OS.name);\n }\n if (os.skin) {\n classes.push('km-' + os.skin);\n } else {\n if (os.name == 'ios' && os.majorVersion > 6) {\n classes.push('km-ios7');\n } else {\n classes.push('km-' + os.name);\n }\n }\n if (os.name == 'ios' && os.majorVersion < 7 || os.name != 'ios') {\n classes.push('km-' + os.name + os.majorVersion);\n }\n classes.push('km-' + os.majorVersion);\n classes.push('km-m' + (os.minorVersion ? os.minorVersion[0] : 0));\n if (os.variant && (os.skin && os.skin === os.name || !os.skin || os.setDefaultPlatform === false)) {\n classes.push('km-' + (os.skin ? os.skin : os.name) + '-' + os.variant);\n }\n if (os.cordova) {\n classes.push('km-cordova');\n }\n if (os.appMode) {\n classes.push('km-app');\n } else {\n classes.push('km-web');\n }\n if (options && options.statusBarStyle) {\n classes.push('km-' + options.statusBarStyle + '-status-bar');\n }\n return classes.join(' ');\n }\n function wp8Background(os) {\n return 'km-wp-' + (os.noVariantSet ? parseInt($('
    ').css('background-color').split(',')[1], 10) === 0 ? 'dark' : 'light' : os.variant + ' km-wp-' + os.variant + '-force');\n }\n function isOrientationHorizontal(element) {\n return OS.wp ? element.css('animation-name') == '-kendo-landscape' : Math.abs(window.orientation) / 90 == 1;\n }\n function getOrientationClass(element) {\n return isOrientationHorizontal(element) ? HORIZONTAL : VERTICAL;\n }\n function setMinimumHeight(pane) {\n pane.parent().addBack().css('min-height', window.innerHeight);\n }\n function applyViewportHeight() {\n $('meta[name=viewport]').remove();\n HEAD.append(viewportTemplate({ height: ', width=device-width' + (isOrientationHorizontal() ? ', height=' + window.innerHeight + 'px' : support.mobileOS.flatVersion >= 600 && support.mobileOS.flatVersion < 700 ? ', height=' + window.innerWidth + 'px' : ', height=device-height') }));\n }\n var Application = Widget.extend({\n init: function (element, options) {\n mobile.application = this;\n $($.proxy(this, 'bootstrap', element, options));\n },\n bootstrap: function (element, options) {\n element = $(element);\n if (!element[0]) {\n element = $(document.body);\n }\n Widget.fn.init.call(this, element, options);\n this.element.removeAttr('data-' + kendo.ns + 'role');\n this._setupPlatform();\n this._attachMeta();\n this._setupElementClass();\n this._attachHideBarHandlers();\n var paneOptions = $.extend({}, this.options);\n delete paneOptions.name;\n var that = this, startHistory = function () {\n that.pane = new Pane(that.element, paneOptions);\n that.pane.navigateToInitial();\n if (that.options.updateDocumentTitle) {\n that._setupDocumentTitle();\n }\n that._startHistory();\n that.trigger(INIT);\n };\n if (this.options.$angular) {\n setTimeout(startHistory);\n } else {\n startHistory();\n }\n },\n options: {\n name: 'Application',\n hideAddressBar: true,\n browserHistory: true,\n historyTransition: HISTORY_TRANSITION,\n modelScope: window,\n statusBarStyle: 'black',\n transition: '',\n retina: false,\n platform: null,\n skin: null,\n updateDocumentTitle: true,\n useNativeScrolling: false\n },\n events: [INIT],\n navigate: function (url, transition) {\n this.pane.navigate(url, transition);\n },\n replace: function (url, transition) {\n this.pane.replace(url, transition);\n },\n scroller: function () {\n return this.view().scroller;\n },\n hideLoading: function () {\n if (this.pane) {\n this.pane.hideLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n showLoading: function () {\n if (this.pane) {\n this.pane.showLoading();\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider activating loading in the application init event handler.');\n }\n },\n changeLoadingMessage: function (message) {\n if (this.pane) {\n this.pane.changeLoadingMessage(message);\n } else {\n throw new Error('The mobile application instance is not fully instantiated. Please consider changing the message in the application init event handler.');\n }\n },\n view: function () {\n return this.pane.view();\n },\n skin: function (skin) {\n var that = this;\n if (!arguments.length) {\n return that.options.skin;\n }\n that.options.skin = skin || '';\n that.element[0].className = 'km-pane';\n that._setupPlatform();\n that._setupElementClass();\n return that.options.skin;\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.pane.destroy();\n if (this.options.browserHistory) {\n this.router.destroy();\n }\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '
    ', cancelTemplate = kendo.template('
  • #:cancel#
  • ');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = ''));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'km-state-active', DISABLE = 'km-state-disabled', SELECT = 'select', SELECTOR = 'li:not(.' + ACTIVE + ')';\n function createBadge(value) {\n return $('' + value + '');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(DISABLE);\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.' + DISABLE)) {\n return;\n }\n that.current().removeClass(ACTIVE);\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(ACTIVE);\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n wrapper.removeClass(DISABLE);\n } else {\n wrapper.addClass(DISABLE);\n }\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass('km-button'), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass('km-image');\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass('km-text');\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
    ', CONTENT_WRAPPER = '
    ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
    ', GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '), WRAPPER = '
    ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
    ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = '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 -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
      ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
      ').addClass('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, outerWidth = kendo._outerWidth, 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 = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(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 - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(ACTIVE_STATE);\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(ACTIVE_STATE);\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(SWITCHON, checked).toggleClass(SWITCHOFF, !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: '$PLAIN',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('form');\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.AutoComplete', '$angular_getLogicValue', function () {\n var options = this.self.options;\n var values = this.self.value().split(options.separator);\n var valuePrimitive = options.valuePrimitive;\n var data = this.self.listView.selectedDataItems();\n var dataItems = [];\n for (var idx = 0, length = data.length; idx < length; idx++) {\n var item = data[idx];\n var dataValue = options.dataTextField ? item[options.dataTextField] : item;\n for (var j = 0; j < values.length; j++) {\n if (dataValue === values[j]) {\n if (valuePrimitive) {\n dataItems.push(dataValue);\n } else {\n dataItems.push(item.toJSON());\n }\n break;\n }\n }\n }\n return dataItems;\n });\n defadvice('ui.AutoComplete', '$angular_setLogicValue', function (value) {\n if (value == null) {\n value = [];\n }\n var self = this.self, dataTextField = self.options.dataTextField;\n if (dataTextField && !self.options.valuePrimitive) {\n if (value.length !== undefined) {\n value = $.map(value, function (item) {\n return item[dataTextField];\n });\n } else {\n value = value[dataTextField];\n }\n }\n self.value(value);\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
      ' + element.html() + '
      ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.webcomponents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'webcomponents',\n name: 'Web Components',\n category: 'framework',\n description: 'Adds Kendo UI custom elements for Web Components',\n depends: ['core']\n };\n (function ($, angular, undefined) {\n if (!kendo.support.customElements || kendo.webComponents.length) {\n return;\n }\n if (angular && (angular.version.major == 1 || angular.injector)) {\n return;\n }\n var TAGNAMES = {\n editor: 'textarea',\n numerictextbox: 'input',\n datepicker: 'input',\n datetimepicker: 'input',\n timepicker: 'input',\n autocomplete: 'input',\n colorpicker: 'input',\n maskedtextbox: 'input',\n dropdownlist: 'select',\n multiselect: 'select',\n upload: 'input',\n validator: 'form',\n button: 'button',\n mobilebutton: 'a',\n mobilebackbutton: 'a',\n mobiledetailbutton: 'a',\n listview: 'ul',\n mobilelistview: 'ul',\n treeview: 'ul',\n menu: 'ul',\n contextmenu: 'ul',\n actionsheet: 'ul'\n };\n var EVENT_PREFIX = 'on-';\n var registered = [];\n kendo.onWidgetRegistered(function (entry) {\n var elementName = entry.prefix + entry.widget.prototype.options.name.toLowerCase();\n if (registered.indexOf(elementName) === -1) {\n registered.push(elementName);\n registerElement(elementName, entry.widget);\n }\n });\n var jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/;\n var jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/;\n var numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/;\n function parseOption(element, option) {\n var value = element.getAttribute(option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {};\n Object.keys(options).concat('dataSource').forEach(function (name) {\n if (element.hasAttribute(kendo.toHyphens(name))) {\n result[name] = parseOption(element, kendo.toHyphens(name));\n }\n });\n return result;\n }\n function cloneEvent(e) {\n var result = {};\n Object.keys(e).forEach(function (key) {\n if (key[0] != '_') {\n result[key] = e[key];\n }\n });\n return result;\n }\n function eventHandler(eventName, e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, false, true, cloneEvent(e));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n e.preventDefault();\n }\n }\n function expose(component, obj) {\n var props = Object.keys(obj);\n for (var idx = 0; idx <= props.length; idx++) {\n if (typeof obj[props[idx]] === 'function') {\n if (!component[props[idx]]) {\n component[props[idx]] = obj[props[idx]].bind(component.widget);\n }\n } else {\n if (props[idx] === 'options') {\n continue;\n }\n component[props[idx]] = component[props[idx]] || obj[props[idx]];\n }\n }\n }\n function registerElement(name, widget) {\n var options = widget.prototype.options;\n var prototype = Object.create(HTMLElement.prototype);\n Object.defineProperty(prototype, 'options', {\n get: function () {\n return this.widget.options;\n },\n set: function (options) {\n var instance = this.widget;\n options = $.extend(true, {}, instance.options, options);\n var _wrapper = $(instance.wrapper)[0];\n var _element = $(instance.element)[0];\n instance._destroy();\n var newElement = document.createElement(TAGNAMES[name] || 'div');\n if (_wrapper && _element) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n $(_element).replaceWith(newElement);\n }\n if (instance.value) {\n options.value = instance.value();\n }\n instance.init(newElement, options);\n this.bindEvents();\n }\n });\n prototype.bindEvents = function () {\n if (widget.prototype.events.indexOf('init') < 0) {\n widget.prototype.events.push('init');\n }\n widget.prototype.events.forEach(function (eventName) {\n this.widget.bind(eventName, eventHandler.bind(this, eventName));\n if (this.hasAttribute(EVENT_PREFIX + eventName)) {\n this.bind(eventName, function (e) {\n window[this.getAttribute(EVENT_PREFIX + eventName)].call(this, e);\n }.bind(this));\n }\n }.bind(this));\n };\n prototype.attachedCallback = function () {\n var that = this;\n var element = document.createElement(TAGNAMES[name] || 'div');\n $(element).append(that.childNodes);\n $(element).attr('class', $(that).attr('class'));\n $(element).attr('style', $(that).attr('style'));\n that.appendChild(element);\n that.widget = new widget(element, parseOptions(that, options));\n var obj = that.widget;\n do {\n expose(that, obj);\n } while (obj = Object.getPrototypeOf(obj));\n this.bindEvents();\n that.widget.trigger('init');\n };\n prototype.detachedCallback = function () {\n kendo.destroy(this.element);\n };\n kendo.webComponents.push('kendo-' + name);\n document.registerElement('kendo-' + name, { prototype: prototype });\n }\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular2', [\n 'kendo.core',\n 'kendo.webcomponents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'angular2',\n name: 'Angular 2',\n category: 'framework',\n description: 'Supports angular2 value accessors',\n depends: ['core']\n };\n (function (kendo, System) {\n if (!System || !System.register) {\n return;\n }\n var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') {\n return Reflect.decorate(decorators, target, key, desc);\n }\n switch (arguments.length) {\n case 2:\n return decorators.reduceRight(function (o, d) {\n return d && d(o) || o;\n }, target);\n case 3:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key), void 0;\n }, void 0);\n case 4:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key, o) || o;\n }, desc);\n }\n };\n var __metadata = this && this.__metadata || function (k, v) {\n if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') {\n return Reflect.metadata(k, v);\n }\n };\n System.register('kendo/angular2', ['angular2/angular2'], function (exports_1) {\n var angular2_1;\n var KendoValueAccessor;\n return {\n setters: [function (_angular2_1) {\n angular2_1 = _angular2_1;\n }],\n execute: function () {\n KendoValueAccessor = function () {\n function KendoValueAccessor(cd, elementRef) {\n var _this = this;\n this.elementRef = elementRef;\n this.onChange = function (_) {\n };\n this.onTouched = function () {\n };\n this.element = elementRef.nativeElement;\n this.element.addEventListener('change', function () {\n _this.onChange(_this.element.value());\n });\n this.element.addEventListener('spin', function () {\n _this.onChange(_this.element.value());\n });\n cd.valueAccessor = this;\n this.cd = cd;\n cd.valueAccessor = this;\n }\n KendoValueAccessor.prototype.writeValue = function (value) {\n this.element.value(value);\n };\n KendoValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = fn;\n };\n KendoValueAccessor.prototype.registerOnTouched = function (fn) {\n this.onTouched = fn;\n };\n KendoValueAccessor = __decorate([\n angular2_1.Directive({ selector: kendo.webComponents.join(',') }),\n __metadata('design:paramtypes', [\n angular2_1.NgControl,\n angular2_1.ElementRef\n ])\n ], KendoValueAccessor);\n return KendoValueAccessor;\n }();\n exports_1('KendoValueAccessor', KendoValueAccessor);\n }\n };\n });\n }(window.kendo, window.System));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile', [\n 'kendo.core',\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.router',\n 'kendo.view',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.popup',\n 'kendo.touch',\n 'kendo.mobile.popover',\n 'kendo.mobile.loader',\n 'kendo.mobile.scroller',\n 'kendo.mobile.shim',\n 'kendo.mobile.view',\n 'kendo.mobile.modalview',\n 'kendo.mobile.drawer',\n 'kendo.mobile.splitview',\n 'kendo.mobile.pane',\n 'kendo.mobile.application',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.button',\n 'kendo.mobile.buttongroup',\n 'kendo.mobile.collapsible',\n 'kendo.mobile.listview',\n 'kendo.mobile.navbar',\n 'kendo.mobile.scrollview',\n 'kendo.mobile.switch',\n 'kendo.mobile.tabstrip',\n 'kendo.angular',\n 'kendo.webcomponents',\n 'kendo.angular2'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}