{"version":3,"sources":["kendo.mobile.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","show","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","2","3","4","parseDate","tzoffset","timezone","convert","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","MSPointerEvent","PointerEvent","kineticScrollNeeded","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","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","then","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","opacity","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","removeClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","toOdataFilter","useOdataFour","operator","ignoreCase","logic","odataFilters","odataFiltersVersionFour","stripMetadata","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","isPlainObject","XmlDataReader","idField","xmlParse","model","parse","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","CHANGE","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","item","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","collection","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","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","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","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","pushInsert","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","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_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","VALIDATE","VALIDATE_INPUT","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","wasValid","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","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","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","_location","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","trap","_keepInTrap","removeTrap","shouldTrap","focusableItems","focusableItemsCount","focusedItemIndex","prevEl","nextEl","tabIndex","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","_tap","lastTap","_dragstart","_swipestart","_swipemove","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","wrapInner","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","$angular","_overlay","_layout","_scroller","_model","layout","getLayout","reload","stretch","modelScope","scroller","overlay","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","paddingBottom","contentElement","scrollerContent","idAttrValue","contentSelector","header","footer","controller","$apply","_callController","$scope","_locate","platform","previousView","currentView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_getLayout","_xhr","abort","always","_xhrComplete","responseText","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","_loading","changeMessage","transitionDone","EXTERNAL","HREF","DUMMY_HREF","NAVIGATE","SKIP_TRANSITION_ON_BACK_BUTTON","WIDGET_RELS","collapsible","historyCallback","viewEngine","_historyNavigate","_historyReplace","closeActiveDialogs","viewShow","loadStart","loadComplete","sameViewRequested","viewTypeDetermined","_setPortraitWidth","_setupAppLinks","dialogs","navigateToInitial","portraitWidth","bindToRouter","router","attrUrl","hideLoading","showLoading","changeLoadingMessage","linkRoles","pressedButtonSelector","buttonSelectors","_mouseup","_appLinkClick","link","rel","delayedTouchEnd","openFor","paneContainer","WRAPPER","ARROW","OVERLAY","DIRECTION_CLASSES","DIRECTIONS","ANIMATION","DIMENSIONS","REVERSE","popupOptions","containerPopup","activate","_activate","deactivate","arrow","elementOffset","offsetAmount","PopOver","initialOpen","SHIM","Shim","app","osname","ioswp","bb","align","shim","prevented","_hide","BEFORE_OPEN","WRAP","ModalView","_shim","AXIS","SWIPE_TO_OPEN","AFTER_HIDE","NULL_VIEW","Drawer","drawer","_viewShow","_attachTransition","swipeToOpen","_update","leftPositioned","swipeToOpenViews","_show","_moveViewTo","visibleOnCurrentView","_currentViewIncludedIn","_setAsCurrent","currentOffset","canMoveLeft","canMoveRight","leftSwipe","limitedPosition","newPosition","shouldShow","pastHalf","velocityThreshold","EXPANED_PANE_SHIM","SplitView","_style","panes","_paramsHistory","expandedPaneShim","_shimUserEvents","collapsePanes","expandPanes","osCssClass","variant","setDefaultPlatform","statusBarStyle","wp8Background","noVariantSet","isOrientationHorizontal","orientation","getOrientationClass","HORIZONTAL","VERTICAL","setMinimumHeight","applyViewportHeight","HEAD","viewportTemplate","DEFAULT_OS","BERRYPHONEGAP","FONT_SIZE_COEF","CHROME","BROKEN_WEBVIEW_RESIZE","INITIALLY_HORIZONTAL","MOBILE_PLATFORMS","ios7","usedWithBlock","systemMeta","clipTemplate","ENABLE_CLIP","iconMeta","HIDEBAR","SUPPORT_SWIPE_TO_GO_BACK","HISTORY_TRANSITION","BARCOMPENSATION","STATUS_BAR_HEIGHT","SCREEN","Application","bootstrap","paneOptions","startHistory","_setupPlatform","_attachMeta","_setupElementClass","_attachHideBarHandlers","updateDocumentTitle","_setupDocumentTitle","_startHistory","hideAddressBar","browserHistory","historyTransition","retina","refreshBackgroundColorProxy","_resizeToScreenHeight","includeStatusBar","_clearExistingMeta","icon","hideBar","_initialHeight","defaultTitle","_hideBar","COMMAND","BUTTONS","CONTEXT_DATA","cancelTemplate","ActionSheet","ShimClass","_closeProxy","_shimHideProxy","actionData","_close","_shimHide","highlightButton","highlight","ANDROID3UP","deactivateTimeoutID","createBadge","CLICK","DISABLED","DISABLEDSTATE","Button","useTap","clickOn","_userEvents","release","_timeoutDeactivate","badge","badgeElement","button","iconSpan","span","image","iconElement","BackButton","DetailButton","DISABLE","SELECTOR","ButtonGroup","_button","selectOn","_enable","li","buttongroup","COLLAPSIBLE","HEADER","CONTENT","INSET","HEADER_WRAPPER","CONTENT_WRAPPER","COLLAPSED","EXPANDED","ANIMATED","EXAPND","COLLAPSE","Collapsible","_buildHeader","not","collapsed","inset","collapseIcon","expandIcon","iconPosition","expand","instant","_getContentHeight","isCollapsed","whitespace","TEXT_NODE","whitespaceRegExp","addIcon","querySelector","enhanceItem","ICON_SELECTOR","enhanceLinkItem","itemAndDetailButtons","otherNodes","enhanceCheckBoxItem","putAt","VirtualListViewItem","LOAD_ICON","VirtualListViewLoadingIndicator","VirtualListViewPressToLoadMore","VirtualListViewItemBinder","ListViewItemBinder","ListViewFilter","ListView","ITEM_SELECTOR","HIGHLIGHT_SELECTOR","GROUP_CLASS","ACTIVE_CLASS","GROUP_WRAPPER","GROUP_TEMPLATE","SEARCH_TEMPLATE","STYLED","DATABOUND","DATABINDING","ITEM_CHANGE","buttonRegExp","HeaderFixer","headerFixer","cacheHeaders","_shouldFixHeaders","_cacheHeaders","_scrollHandler","_fixHeader","fixedHeaders","headerPair","headers","currentHeader","_","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","setDataSource","pull","_pulled","_first","VirtualList","itemConstructor","prevItem","endReached","below","itemCount","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","firstItem","lastItem","padding","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","_scroll","_scrollEnd","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","_refreshHandler","_progressHandler","_unbindDataSource","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","before","autoFilter","searchInput","_oldFilter","_filterChange","clearButton","_dataSourceChange","_refreshInput","appliedFilters","_search","_applyFilter","_clearFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_templates","_itemBinder","_pullToRefreshHandler","_enhanceItems","headerTemplate","emptyDataSource","unwrap","_scrollerInstance","triggerChange","_renderItems","groupTemplate","replaceItem","newItem","_dim","_toggle","_highlight","clicked","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","groupHeader","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","prevAll","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","REFRESH","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","Pager","scrollView","_changeProxy","_refreshProxy","_refresh","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pager","pageElements","_paged","pages","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","_content","viewInit","bounceVelocityThreshold","prevPage","eventData","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","constrain","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","isDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","addOption","scopeValue","widgetOptions","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","oldValue","kendoWidget","$parse","assign","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","w","attributeName","cls","ComboBox","rebindAttr","templateOptions","_wrapper","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","isMobile","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","tag","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","self","$injector","$defaultCompile","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","ds","mew","factory","kendoRenderedTimeout","RENDERED","require","$attrs","$element","roleattr","Editor","NumericTextBox","DatePicker","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","MobileListView","entry","arg","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","dataValue","separator","selectedDataItems","$angular_makeEventHandler","kendoEvent","elems","columns","colIdx","locals","isString","selectable","angularDataItem","templateSettings","col","encoded","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","templateDirectives","templates","templateName","attrName","outerHTML"],"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 = '2017.2.504'.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 && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\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 var docStyle = document.documentElement.style;\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 docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\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.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 docStyle.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 if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\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 var chrome = support.browser.chrome;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset + sign * document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n if (typeof value === 'string') {\n value = kendo.template($('#' + value).html());\n } else {\n value = element.getAttribute(option);\n }\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 moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\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 weekInYear: weekInYear,\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 var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\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(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = quote(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 function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(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: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\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)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\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 pushInsert: function (index, items) {\n if (!items) {\n items = index;\n index = 0;\n }\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.insert(index, 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 index++;\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 pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\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.trigger(PROGRESS);\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 if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\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 if (options.filter) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\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 read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n this.filter(this._hierarchicalFilter);\n }\n return result;\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 filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering) {\n this._markHierarchicalQuery(val);\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var 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 this._updateHierarchicalFilter(filter);\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\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', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', 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 VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\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 if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = typeof e.decode === 'undefined';\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n this.element.css('display', '');\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n }\n });\n var ViewClone = kendo.Class.extend({\n init: function (view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\n };\n }\n var ViewContainer = Observable.extend({\n init: function (container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n show: function (view, transition, locationID) {\n if (!view.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) {\n this.trigger('after');\n return false;\n }\n locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n }\n });\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && 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, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, 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] || document.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 _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\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 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._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n viewportWidth -= kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap()) {\n return;\n }\n var target = e.target;\n var elements = this.element.find(focusableNodesSelector).filter(':visible[tabindex!=-1]');\n var focusableItems = elements.sort(function (prevEl, nextEl) {\n return prevEl.tabIndex - nextEl.tabIndex;\n });\n var focusableItemsCount = focusableItems.length;\n var lastIndex = focusableItemsCount - 1;\n var focusedItemIndex = focusableItems.index(target);\n if (e.shiftKey) {\n if (focusedItemIndex === 0) {\n focusableItems.get(lastIndex).focus();\n } else {\n focusableItems.get(focusedItemIndex - 1).focus();\n }\n } else {\n if (focusedItemIndex === lastIndex) {\n focusableItems.get(0).focus();\n } else {\n focusableItems.get(focusedItemIndex + 1).focus();\n }\n }\n e.preventDefault();\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\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 = 'state-active', DISABLE = 'state-disabled', SELECT = 'select', SELECTOR = 'li:not(.km-' + ACTIVE + ')';\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\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 k-widget k-button-group').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(className(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('.km-' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.km-' + DISABLE)) {\n return;\n }\n that.current().removeClass(className(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(className(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 if (typeof enable == 'undefined') {\n enable = true;\n }\n this.wrapper.toggleClass(className(DISABLE), !enable);\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass(className('button')), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass(className('image'));\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass(className('text'));\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
    ', CONTENT_WRAPPER = '
    ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, outerHeight = kendo._outerHeight, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
    ', GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '), WRAPPER = '
    ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n this._scrollHandler = function (e) {\n headerFixer._fixHeader(e);\n };\n scroller.bind('scroll', this._scrollHandler);\n },\n destroy: function () {\n var that = this;\n if (that.scroller) {\n that.scroller.unbind('scroll', that._scrollHandler);\n }\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
    ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = outerHeight(this.element, true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = outerHeight(this.element, true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = outerHeight(listView.wrapper.children().not(listView.element));\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this._scroll = function (e) {\n binder.list.update(e.scrollTop);\n };\n this.scroller.bind('scroll', this._scroll);\n this._scrollEnd = function (e) {\n binder.list.batchUpdate(e.scrollTop);\n };\n this.scroller.bind('scrollEnd', this._scrollEnd);\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n this.scroller.unbind('scroll', this._scroll);\n this.scroller.unbind('scrollEnd', this._scrollEnd);\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n if (this._headerFixer) {\n this._headerFixer.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n kendo.destroy(this.element.children());\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'current-page', VIRTUAL_PAGE_CLASS = '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 function className(name) {\n return 'k-' + name + ' km-' + name;\n }\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(className(CURRENT_PAGE_CLASS));\n },\n _change: function (e) {\n this.items().removeClass(className(CURRENT_PAGE_CLASS)).eq(e.page).addClass(className(CURRENT_PAGE_CLASS));\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= kendo._outerHeight(pager, true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
      ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
      ').addClass('k-widget ' + className('scrollview'));\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass(className('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('.km-' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, outerWidth = kendo._outerWidth, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'switch-on', SWITCHOFF = 'switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'state-active', DISABLED_STATE = 'state-disabled', DISABLED = 'disabled', TRANSFORMSTYLE = support.transitions.css + 'transform', proxy = $.proxy;\n function className(name) {\n return 'k-' + name + ' km-' + name;\n }\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = outerWidth(that.handle, true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(className(SWITCHON), check).toggleClass(className(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(className(DISABLED_STATE), !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - outerWidth(that.handle, true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(className(ACTIVE_STATE));\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(className(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(className(SWITCHON), checked).toggleClass(className(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: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('form');\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n PanelBar: '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 'ui.PanelBar'\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 'PanelBar': ['Template'],\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.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 ], 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}));"]}