{"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","shadows","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","isRtl","parent","hasClass","style","is","show","percentRegExp","test","outerWidth","outerHeight","boxSizing","mozBoxSizing","webkitBoxSizing","opera","addClass","marginLeft","paddingLeft","paddingRight","paddingBottom","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","sign","mobileOS","android","top","scrollY","scrollX","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","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","offset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","transforms","elementProto","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","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","toUtcTime","isInTimeRange","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","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","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","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","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","onChange","currentVal","$render","$viewValue","$modelValue","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.914'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, isRtl = element.css('direction') == 'rtl';\n if (!element.parent().hasClass('k-animation-container')) {\n var shadows = getShadows(element), width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n if (browser.opera) {\n shadows.left = shadows.right = shadows.bottom = 5;\n }\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = element.outerWidth();\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = element.outerHeight();\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height,\n marginLeft: shadows.left * (isRtl ? 1 : -1),\n paddingLeft: shadows.left,\n paddingRight: shadows.right,\n paddingBottom: shadows.bottom\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: element.outerWidth(),\n height: element.outerHeight(),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n support.msPointers = window.MSPointerEvent;\n support.pointers = window.PointerEvent;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in document.documentElement.style || 'msPerspective' in document.documentElement.style;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var result = element[type]();\n if (support.mobileOS.android) {\n result.top -= window.scrollY;\n result.left -= window.scrollX;\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, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? element.outerHeight() : element.outerWidth()), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = element.outerWidth();\n result.height = element.outerHeight();\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, newLineRegExp = /(\\r+|\\n+)/g, quoteRegExp = /(?=['\\\\])/g;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n }\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(value) {\n return value.replace(quoteRegExp, '\\\\').replace(newLineRegExp, '');\n }\n function operator(op, a, b, ignore) {\n var date;\n if (b != null) {\n if (typeof b === STRING) {\n b = quote(b);\n date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = '\\'' + b.toLowerCase() + '\\'';\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = '\\'' + b + '\\'';\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n if (typeof value == 'string') {\n return '\\'' + quote(value) + '\\'';\n }\n return '' + value;\n },\n eq: function (a, b, ignore) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == 0';\n },\n doesnotstartwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == -1';\n },\n endswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') >= 0';\n },\n doesnotendwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') < 0';\n },\n contains: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') >= 0';\n },\n doesnotcontain: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') == -1';\n },\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' === null || ' + a + ' === undefined)';\n },\n isnotnull: function (a) {\n return '(' + a + ' !== null && ' + a + ' !== undefined)';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) });\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n var idx, length, data = this._flatData(this._data);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n return model;\n },\n pushCreate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.add(item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n that._accept(arguments[idx]);\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n that._data = that._observe(data);\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this._readData(state);\n }\n }\n },\n _addRange: function (data) {\n var that = this, start = that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n return Query.process(data, options);\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length) {\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _removeModelFromRanges: function (model) {\n var result, found, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n that.hasChildren = !!hasChildren.call(that, that);\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 || 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), minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - element.outerWidth(true), maxY = minY + container.height() - element.outerHeight(true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, support = kendo.support, getOffset = kendo.getOffset, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);\n }\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n viewportWidth -= kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, wrapper.outerHeight() + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, wrapper.outerWidth() + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = element.outerHeight();\n var wrapperHeight = wrapper.outerHeight();\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = element.outerWidth(), height = element.outerHeight(), anchorWidth = anchor.outerWidth(), anchorHeight = anchor.outerHeight(), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
    ', GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '), WRAPPER = '
    ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
    ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = this.element.outerHeight(true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = this.element.outerHeight(true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = listView.wrapper.children().not(listView.element).outerHeight() || 0;\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this.scroller.bind('scroll', function (e) {\n binder.list.update(e.scrollTop);\n });\n this.scroller.bind('scrollEnd', function (e) {\n binder.list.batchUpdate(e.scrollTop);\n });\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'km-current-page', VIRTUAL_PAGE_CLASS = 'km-virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('
      ');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '
    1. ';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(CURRENT_PAGE_CLASS);\n },\n _change: function (e) {\n this.items().removeClass(CURRENT_PAGE_CLASS).eq(e.page).addClass(CURRENT_PAGE_CLASS);\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= pager.outerHeight(true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= pager.outerHeight(true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
      ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
      ').addClass('km-scrollview');\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass('km-scrollview-overlay');\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'km-switch-on', SWITCHOFF = 'km-switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'km-state-active', DISABLED_STATE = 'km-state-disabled', DISABLED = 'disabled', TRANSFORMSTYLE = support.transitions.css + 'transform', proxy = $.proxy;\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = that.handle.outerWidth(true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(SWITCHON, check).toggleClass(SWITCHOFF, !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(DISABLED_STATE, !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - that.handle.outerWidth(true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(ACTIVE_STATE);\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(ACTIVE_STATE);\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(SWITCHON, checked).toggleClass(SWITCHOFF, !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: '$PLAIN',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n ngModel.$render = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n 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'))(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/"}