{"version":3,"sources":["kendo.mobile.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","shadows","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","isRtl","parent","hasClass","style","is","show","percentRegExp","test","outerWidth","outerHeight","boxSizing","mozBoxSizing","webkitBoxSizing","opera","addClass","marginLeft","paddingLeft","paddingRight","paddingBottom","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","pointers","msPointers","top","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","templateRegExp","template","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","sign","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","RegExp","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","offset","nonBreakingSpaceRegExp","exponentRegExp","dateRegExp","offsetRegExp","formatsSequence",2,3,4,"parseDate","formats","tzoffset","timezone","convert","concat","percentSymbol","table","transforms","elementProto","mobileOS","documentMode","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","MSPointerEvent","PointerEvent","HTMLElement","hasHW3D","WebKitCSSMatrix","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","kineticScrollNeeded","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","pushState","history","hashChange","customElements","down","up","in","out","enabled","display","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","keys","INSERT","DELETE","BACKSPACE","TAB","ENTER","ESC","LEFT","UP","RIGHT","DOWN","END","HOME","SPACEBAR","PAGEUP","PAGEDOWN","F2","F10","F12","NUMPAD_PLUS","NUMPAD_MINUS","NUMPAD_DOT","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","fromLocalOffset","toLocalOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","toUtcTime","isInTimeRange","min","msValue","msMin","msMax","MS_PER_DAY","isInDateRange","addDays","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","toInvariantTime","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","then","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","multiple","single","position","isFixed","originalPosition","dX","dY","currentValue","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","opacity","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","removeClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","toOdataFilter","useOdataFour","operator","ignoreCase","logic","odataFilters","odataFiltersVersionFour","stripMetadata","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","isPlainObject","XmlDataReader","idField","xmlParse","model","parse","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","CHANGE","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","item","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","collection","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ajax","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","newLineRegExp","ObservableObject","wrapAll","json","object","howMany","reduce","reduceRight","every","some","_parent","_handlers","shouldSerialize","_set","paths","path","composite","change","isObservableArray","isDataSource","parsers","boolean","default","defaultValues","defaults","_initializers","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","op","ignore","doesnotstartwith","doesnotendwith","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","orderBy","orderByDescending","compiled","predicate","allData","groupBy","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","success","error","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","transport","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","batch","online","sync","offlineData","_isServerGrouped","_push","_readData","_flatData","getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","_updateRangesLength","created","updated","promises","_sendSubmit","_send","when","_accept","_change","cancelChanges","_cancelModel","hasChanges","models","response","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","__state__","_submit","status","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","itemIds","_aggregateResult","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_changeHandler","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","remote","fetch","_query","next","totalPages","prev","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","pageSkip","paging","sorting","filtering","_currentRequestTimeStamp","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","rangeLength","startOffset","transportOptions","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","loaded","level","_childrenLoaded","load","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","useRanges","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","hub","signalr","fail","callbacks","_crud","server","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","deep","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","gantt","newLength","j","old","same","removeIndex","newValue","oldValues","newValues","selectedValue","_isBound","scheduler","arr","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","resolveRules","resolvers","validator","ruleResolvers","decode","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","containers","invalidMsgRegExp","Validator","NS","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","INPUTSELECTOR","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","BLUR","NAME","FORM","NOVALIDATE","patternMatcher","matcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_attachEvents","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","validate","stopImmediatePropagation","_checkElement","validateInput","inputs","invalid","isValid","valid","lbl","messageText","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","replaceWith","insertAfter","hideMessages","locators","messageLocators","getElementsByTagName","locate","decorate","ruleKey","customMessage","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","_checkUrl","navigatingInExisting","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","parseTransition","transitionRegExp","SCRIPT","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","content","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","methodName","getElementById","contents","Layout","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_trigger","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","pressed","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","_lastEvent","_processMovement","_cursorElement","_scrollableParent","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","SCROLL","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","animation","open","close","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","parentsUntil","siblingContainer","parentZIndex","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","viewportOffset","origins","positions","isWindow","viewportWidth","viewportHeight","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","MAX_DOUBLE_TAP_DISTANCE","eventProxy","_triggerTouch","gestureEventProxy","tap","gestureend","enableSwipe","minXDelta","maxYDelta","maxDuration","doubleTapTimeout","_tap","lastTap","_dragstart","_swipestart","_swipemove","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","wrapInner","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","initPopOvers","popovers","preventScrollIfNotInput","initWidgets","UI_OVERLAY","BEFORE_SHOW","AFTER_SHOW","BEFORE_HIDE","defaultTransition","$angular","_overlay","_layout","_scroller","_model","layout","getLayout","reload","stretch","modelScope","scroller","overlay","$destroy","purge","inited","_invokeNgController","_padIfNativeScrolling","isAndroid","skin","isAndroidForced","hasPlatformIndependentSkin","topContainer","bottomContainer","paddingTop","contentElement","scrollerContent","idAttrValue","contentSelector","header","footer","controller","$apply","_callController","$scope","_locate","platform","previousView","currentView","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","ViewEngine","errorMessage","sandbox","_hideViews","rootView","rootNeeded","layouts","viewContainer","getLayoutProxy","_setupLayouts","viewOptions","loader","showView","remoteViewURLPrefix","showClosure","_findViewElement","_createView","serverNavigation","_loadView","modalViews","urlPath","_getLayout","_xhr","abort","always","_xhrComplete","responseText","CAPTURE_EVENTS","Loader","captureEvents","_attachCapture","loading","_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","_fixHeader","fixedHeaders","headerPair","headers","currentHeader","_","DEFAULT_PULL_PARAMETERS","RefreshHandler","pullParameters","setDataSource","pull","_pulled","_first","VirtualList","itemConstructor","prevItem","endReached","below","itemCount","totalHeight","averageItemHeight","remainingItemsCount","batchUpdate","nextIndex","initialOffset","lastDirection","above","firstItem","lastItem","padding","lastTop","topBorder","bottomBorder","setDataItem","_loadIcon","_loadButton","loadMoreText","loadMore","kendoMobileButton","_hideShowButton","_showLoadButton","chromeHeight","pressToLoadMore","virtualViewSize","updateScrollerSize","updateSize","itemBinder","_refreshHandler","_progressHandler","_unbindDataSource","adding","removing","prependOnRefresh","appendOnRefresh","groupedMode","findByDataItem","_shouldShowLoading","replaceGrouped","insertAt","endlessScroll","filterable","before","autoFilter","searchInput","_oldFilter","_filterChange","clearButton","_dataSourceChange","_refreshInput","appliedFilters","_search","_applyFilter","_clearFilter","scrollTreshold","scrollThreshold","_headerFixer","_itemsCache","_templates","_itemBinder","_pullToRefreshHandler","_enhanceItems","headerTemplate","emptyDataSource","unwrap","_scrollerInstance","triggerChange","_renderItems","groupTemplate","replaceItem","newItem","_dim","_toggle","_highlight","clicked","plainItem","dataIDAttribute","templateProxy","groupTemplateProxy","_headerTemplate","buttonElement","_styleGroups","rootItems","groupHeader","grouped","enhanced","createContainer","toggleTitle","centerElement","noTitle","showTitle","prevAll","NavBar","leftElement","rightElement","DRAG_START","DRAG_END","ElasticPane","ScrollViewContent","VirtualScrollViewContent","Page","ScrollView","CHANGING","REFRESH","CURRENT_PAGE_CLASS","VIRTUAL_PAGE_CLASS","CLEANUP","VIRTUAL_PAGE_COUNT","LEFT_PAGE","CETER_PAGE","RIGHT_PAGE","LEFT_SWIPE","NUDGE","RIGHT_SWIPE","Pager","scrollView","_changeProxy","_refreshProxy","_refresh","pageHTML","pageCount","ScrollViewPager","updateDimension","transitionTo","ScrollViewElasticPane","_getPages","contentHeight","enablePager","pagerOverlay","paneMoved","swipeType","bounce","snap","nextPage","approx","minSnap","maxSnap","currentPage","updatePage","forcePageUpdate","resizeTo","containerHeight","pager","pageElements","_paged","pages","_initPages","_buffer","_pendingPageRefresh","_pendingWidgetRefresh","_resetPages","itemsPerPage","_resetProxy","_endReachedProxy","emptyTemplate","emptyTemplateProxy","setWidth","_repositionPages","_updatePagesContent","thresholdPassed","isEndReached","_cancelMove","_moveBackward","_moveForward","setPageContent","_resetMovable","_onResize","_onReset","_onEndReached","theContent","VirtualPage","mobileContainer","transitionEnd","dragStart","dragEnd","_syncWithContent","_content","viewInit","bounceVelocityThreshold","prevPage","eventData","_dragStart","_transitionEnd","limitValue","minLimit","maxLimit","SWITCHON","SWITCHOFF","MARGINLEFT","ACTIVE_STATE","DISABLED_STATE","TRANSFORMSTYLE","SWITCH_MARKUP","Switch","onLabel","offLabel","background","constrain","snapPoint","_animateBackground","handleWidth","_stop","ACTIVE_STATE_CLASS","TabStrip","_buildButton","switchTo","tab","tabs","_setActiveItem","switchByFullUrl","currentItem","tabstrip","withoutTimeout","$timeout","createWidget","attrs","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","isDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","addOption","scopeValue","widgetOptions","widgetEvents","optionsPath","kOptions","optionsValue","defaultOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","oldValue","kendoWidget","$parse","assign","formValue","isForm","formRegExp","haveChangeOnElement","onChange","currentVal","$render","$viewValue","$modelValue","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","kendoWidgetInstance","suspend","mo","disconnect","resume","observe","prevClassList","MutationObserver","classList","changes","chg","currClassList","w","attributeName","cls","ComboBox","rebindAttr","templateOptions","_wrapper","isUpload","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","createDirectives","klass","isMobile","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","restrict","tag","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","isDigesting","destroyScope","defadvice","origMethod","pendingPatches","self","$injector","$defaultCompile","TreeList","TreeView","Scheduler","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","$angular_makeEventHandler","kendoEvent","elems","columns","colIdx","locals","isString","selectable","angularDataItem","templateSettings","col","encoded","terminal","pre","_instance","post","kAttr","priority","TreeMap","MobileScrollView","Grid","PivotGrid","templateDirectives","templates","templateName","attrName","outerHTML","cloneEvent","initCustomEvent","defaultPrevented","expose","component","props","registerElement","newElement","bindEvents","EVENT_PREFIX","attachedCallback","getPrototypeOf","detachedCallback","registered","major","editor","numerictextbox","datepicker","datetimepicker","timepicker","autocomplete","colorpicker","maskedtextbox","dropdownlist","upload","mobilebutton","mobilebackbutton","mobiledetailbutton","listview","mobilelistview","treeview","menu","contextmenu","actionsheet","elementName","System","__decorate","__metadata","decorators","Reflect","metadata","exports_1","angular2_1","KendoValueAccessor","_angular2_1","execute","cd","elementRef","_this","onTouched","nativeElement","valueAccessor","writeValue","registerOnChange","registerOnTouched","Directive","NgControl","ElementRef"],"mappings":"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","file":"kendo.mobile.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2016.1.112'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start, end, numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n parts.push(integer.substring(0, idx));\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(precision);\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, formatsSequence = [\n 'G',\n 'g',\n 'd',\n 'F',\n 'D',\n 'y',\n 'm',\n 'T',\n 't'\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n kendo.parseDate = function (value, formats, culture) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length, patterns;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = [];\n patterns = culture.calendar.patterns;\n length = formatsSequence.length;\n for (; idx < length; idx++) {\n formats[idx] = patterns[formatsSequence[idx]];\n }\n idx = 0;\n formats = [\n 'yyyy/MM/dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm',\n 'yyyy/MM/dd',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy-MM-dd HH:mm',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ].concat(formats);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture);\n if (date) {\n return date;\n }\n }\n return date;\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, isRtl = element.css('direction') == 'rtl';\n if (!element.parent().hasClass('k-animation-container')) {\n var shadows = getShadows(element), width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n if (browser.opera) {\n shadows.left = shadows.right = shadows.bottom = 5;\n }\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = element.outerWidth();\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = element.outerHeight();\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height,\n marginLeft: shadows.left * (isRtl ? 1 : -1),\n paddingLeft: shadows.left,\n paddingRight: shadows.right,\n paddingBottom: shadows.bottom\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.show();\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: element.outerWidth(),\n height: element.outerHeight(),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n support.msPointers = window.MSPointerEvent;\n support.pointers = window.PointerEvent;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in document.documentElement.style || 'msPerspective' in document.documentElement.style;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome && support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof document.documentElement.style.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var result = element[type]();\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset - document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console.log(message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n value = kendo.template($('#' + value).html());\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft;\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $('
Loading...
').width('100%').height('100%').css('top', container.scrollTop()).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return date.getTime() - getDate(date);\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n element.setSelectionRange(start, end);\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? element.outerHeight() : element.outerWidth()), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = element.outerWidth();\n result.height = element.outerHeight();\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, newLineRegExp = /(\\r+|\\n+)/g, quoteRegExp = /(?=['\\\\])/g;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback) {\n var idx = 0, length = this.length;\n for (; idx < length; idx++) {\n callback(this[idx], idx, this);\n }\n },\n map: function (callback) {\n var idx = 0, result = [], length = this.length;\n for (; idx < length; idx++) {\n result[idx] = callback(this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback) {\n var idx = 0, result = [], item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback(item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback) {\n var idx = 0, item, length = this.length;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback(item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n if (!that.trigger('set', {\n field: field,\n value: value\n })) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n return value.toLowerCase() === 'true';\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n ObservableObject.fn.set.call(that, field, value, initiator);\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(value) {\n return value.replace(quoteRegExp, '\\\\').replace(newLineRegExp, '');\n }\n function operator(op, a, b, ignore) {\n var date;\n if (b != null) {\n if (typeof b === STRING) {\n b = quote(b);\n date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = '\\'' + b.toLowerCase() + '\\'';\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = '\\'' + b + '\\'';\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n if (typeof value == 'string') {\n return '\\'' + quote(value) + '\\'';\n }\n return '' + value;\n },\n eq: function (a, b, ignore) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == 0';\n },\n doesnotstartwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.lastIndexOf(\\'' + b + '\\', 0) == -1';\n },\n endswith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') >= 0';\n },\n doesnotendwith: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\', ' + a + '.length - ' + (b || '').length + ') < 0';\n },\n contains: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') >= 0';\n },\n doesnotcontain: function (a, b, ignore) {\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n if (b) {\n b = b.toLowerCase();\n }\n }\n if (b) {\n b = quote(b);\n }\n return a + '.indexOf(\\'' + b + '\\') == -1';\n },\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return a + ' === null || ' + a + ' === undefined';\n },\n isnotnull: function (a) {\n return a + ' !== null && ' + a + ' !== undefined';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector) {\n return this.order(selector, 'asc');\n },\n orderByDescending: function (selector) {\n return this.order(selector, 'desc');\n },\n sort: function (field, dir, comparer) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) });\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n query = query.sort(sort);\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var dataItem = data.at(idx);\n if (dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n var idx, length, data = this._flatData(this._data);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n return model;\n },\n pushCreate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.add(item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n this._updateRangesLength();\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n that._accept(arguments[idx]);\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data);\n that._change();\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n } else {\n items.splice(idx, 1);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n that._data = that._observe(data);\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update') {\n item.dirty = true;\n }\n }\n });\n }\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = state;\n }\n }\n },\n _addRange: function (data) {\n var that = this, start = that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n return Query.process(data, options);\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length) {\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n } else {\n that.range(skip, take);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _removeModelFromRanges: function (model) {\n var result, found, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n },\n _updateRangesLength: function () {\n var startOffset = 0, range, rangeLength;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n range.start = range.start - startOffset;\n rangeLength = this._flatData(range.data, true).length;\n startOffset = range.end - rangeLength;\n range.end = range.start + rangeLength;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (kendo.data.transports[options.type] && !isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n that.hasChildren = !!hasChildren.call(that, that);\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 element.removeChild(child);\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio' && value != null) {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = this._parseValue(source[idx].get(field), this.dataType());\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), children = element.children, childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n });\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n 'validate',\n 'change'\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (value === '' || !value || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger('change');\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger('validate', { valid: result });\n if (isValid !== result) {\n this.trigger('change');\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText;\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME);\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, { url: to })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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, document = window.document, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(document.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', 'pan-y');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - element.outerWidth(true), maxY = minY + container.height() - element.outerHeight(true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, support = kendo.support, getOffset = kendo.getOffset, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || BODY);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation);\n }\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true);\n wrap.css({ overflow: HIDDEN });\n that.element.kendoAnimate(animation);\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), viewportOffset = viewport.offset(), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, zoomLevel = support.zoomLevel(), siblingContainer, parents, parentZIndex, zIndex = 10002, isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), idx = 0, docEl = document.documentElement, length, viewportWidth, viewportHeight;\n viewportWidth = isWindow ? window.innerWidth : viewport.width();\n viewportHeight = isWindow ? window.innerHeight : viewport.height();\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n viewportWidth -= kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n if (viewport[0] === window) {\n offset.top -= window.pageYOffset || document.documentElement.scrollTop || 0;\n offset.left -= window.pageXOffset || document.documentElement.scrollLeft || 0;\n } else {\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n }\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, wrapper.outerHeight() + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, wrapper.outerWidth() + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = element.outerHeight();\n var wrapperHeight = wrapper.outerHeight();\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, anchor.outerHeight(), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, element.outerWidth(), anchor.outerWidth(), viewportWidth / zoomLevel, origins[1], positions[1], wrapper.outerWidth());\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = element.outerWidth(), height = element.outerHeight(), anchorWidth = anchor.outerWidth(), anchorHeight = anchor.outerHeight(), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.touch', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'touch',\n name: 'Touch',\n category: 'mobile',\n description: 'The kendo Touch widget provides a cross-platform compatible API for handling user-initiated touch events, multi-touch gestures and event sequences (drag, swipe, etc.). ',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, MAX_DOUBLE_TAP_DISTANCE = 20;\n var Touch = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n that.wrapper = element;\n function eventProxy(name) {\n return function (e) {\n that._triggerTouch(name, e);\n };\n }\n function gestureEventProxy(name) {\n return function (e) {\n that.trigger(name, {\n touches: e.touches,\n distance: e.distance,\n center: e.center,\n event: e.event\n });\n };\n }\n that.events = new kendo.UserEvents(element, {\n filter: options.filter,\n surface: options.surface,\n minHold: options.minHold,\n multiTouch: options.multiTouch,\n allowSelection: true,\n fastTap: options.fastTap,\n press: eventProxy('touchstart'),\n hold: eventProxy('hold'),\n tap: proxy(that, '_tap'),\n gesturestart: gestureEventProxy('gesturestart'),\n gesturechange: gestureEventProxy('gesturechange'),\n gestureend: gestureEventProxy('gestureend')\n });\n if (options.enableSwipe) {\n that.events.bind('start', proxy(that, '_swipestart'));\n that.events.bind('move', proxy(that, '_swipemove'));\n } else {\n that.events.bind('start', proxy(that, '_dragstart'));\n that.events.bind('move', eventProxy('drag'));\n that.events.bind('end', eventProxy('dragend'));\n }\n kendo.notify(that);\n },\n events: [\n 'touchstart',\n 'dragstart',\n 'drag',\n 'dragend',\n 'tap',\n 'doubletap',\n 'hold',\n 'swipe',\n 'gesturestart',\n 'gesturechange',\n 'gestureend'\n ],\n options: {\n name: 'Touch',\n surface: null,\n global: false,\n fastTap: false,\n multiTouch: false,\n enableSwipe: false,\n minXDelta: 30,\n maxYDelta: 20,\n maxDuration: 1000,\n minHold: 800,\n doubleTapTimeout: 800\n },\n cancel: function () {\n this.events.cancel();\n },\n _triggerTouch: function (type, e) {\n if (this.trigger(type, {\n touch: e.touch,\n event: e.event\n })) {\n e.preventDefault();\n }\n },\n _tap: function (e) {\n var that = this, lastTap = that.lastTap, touch = e.touch;\n if (lastTap && touch.endTime - lastTap.endTime < that.options.doubleTapTimeout && kendo.touchDelta(touch, lastTap).distance < MAX_DOUBLE_TAP_DISTANCE) {\n that._triggerTouch('doubletap', e);\n that.lastTap = null;\n } else {\n that._triggerTouch('tap', e);\n that.lastTap = touch;\n }\n },\n _dragstart: function (e) {\n this._triggerTouch('dragstart', e);\n },\n _swipestart: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n e.sender.capture();\n }\n },\n _swipemove: function (e) {\n var that = this, options = that.options, touch = e.touch, duration = e.event.timeStamp - touch.startTime, direction = touch.x.initialDelta > 0 ? 'right' : 'left';\n if (abs(touch.x.initialDelta) >= options.minXDelta && abs(touch.y.initialDelta) < options.maxYDelta && duration < options.maxDuration) {\n that.trigger('swipe', {\n direction: direction,\n touch: e.touch\n });\n touch.cancel();\n }\n }\n });\n kendo.ui.plugin(Touch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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 this.router.destroy();\n },\n _setupPlatform: function () {\n var that = this, platform = that.options.platform, skin = that.options.skin, split = [], os = OS || MOBILE_PLATFORMS[DEFAULT_OS];\n if (platform) {\n os.setDefaultPlatform = true;\n if (typeof platform === 'string') {\n split = platform.split('-');\n os = $.extend({ variant: split[1] }, os, MOBILE_PLATFORMS[split[0]]);\n } else {\n os = platform;\n }\n }\n if (skin) {\n split = skin.split('-');\n if (!OS) {\n os.setDefaultPlatform = false;\n }\n os = $.extend({}, os, {\n skin: split[0],\n variant: split[1]\n });\n }\n if (!os.variant) {\n os.noVariantSet = true;\n os.variant = 'dark';\n }\n that.os = os;\n that.osCssClass = osCssClass(that.os, that.options);\n if (os.name == 'wp') {\n if (!that.refreshBackgroundColorProxy) {\n that.refreshBackgroundColorProxy = $.proxy(function () {\n if (that.os.variant && (that.os.skin && that.os.skin === that.os.name) || !that.os.skin) {\n that.element.removeClass('km-wp-dark km-wp-light km-wp-dark-force km-wp-light-force').addClass(wp8Background(that.os));\n }\n }, that);\n }\n $(document).off('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).off('resume', that.refreshBackgroundColorProxy);\n if (!os.skin) {\n that.element.parent().css('overflow', 'hidden');\n $(document).on('visibilitychange', that.refreshBackgroundColorProxy);\n $(document).on('resume', that.refreshBackgroundColorProxy);\n that.refreshBackgroundColorProxy();\n }\n }\n },\n _startHistory: function () {\n if (this.options.browserHistory) {\n this.router = new kendo.Router({\n pushState: this.options.pushState,\n root: this.options.root,\n hashBang: this.options.hashBang\n });\n this.pane.bindToRouter(this.router);\n this.router.start();\n } else {\n if (!this.options.initial) {\n this.pane.navigate('');\n }\n }\n },\n _resizeToScreenHeight: function () {\n var includeStatusBar = $('meta[name=apple-mobile-web-app-status-bar-style]').attr('content').match(/black-translucent|hidden/), element = this.element, height;\n if (CHROME) {\n height = window.innerHeight;\n } else {\n if (isOrientationHorizontal(element)) {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth + STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availWidth;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availWidth;\n } else {\n height = SCREEN.availWidth - STATUS_BAR_HEIGHT;\n }\n }\n } else {\n if (includeStatusBar) {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight;\n } else {\n height = SCREEN.availHeight + STATUS_BAR_HEIGHT;\n }\n } else {\n if (INITIALLY_HORIZONTAL) {\n height = SCREEN.availHeight - STATUS_BAR_HEIGHT;\n } else {\n height = SCREEN.availHeight;\n }\n }\n }\n }\n element.height(height);\n },\n _setupElementClass: function () {\n var that = this, size, element = that.element;\n element.parent().addClass('km-root km-' + (that.os.tablet ? 'tablet' : 'phone'));\n element.addClass(that.osCssClass + ' ' + getOrientationClass(element));\n if (this.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n }\n if (CHROME) {\n element.addClass('km-ios-chrome');\n }\n if (support.wpDevicePixelRatio) {\n element.parent().css('font-size', support.wpDevicePixelRatio + 'em');\n }\n if (this.options.retina) {\n element.parent().addClass('km-retina');\n element.parent().css('font-size', support.devicePixelRatio * FONT_SIZE_COEF + 'em');\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n if (that.options.useNativeScrolling) {\n element.parent().addClass('km-native-scrolling');\n } else if (ENABLE_CLIP) {\n size = (screen.availWidth > screen.availHeight ? screen.availWidth : screen.availHeight) + 200;\n $(clipTemplate({\n width: size,\n height: size\n })).appendTo(HEAD);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n kendo.onResize(function () {\n element.removeClass('km-horizontal km-vertical').addClass(getOrientationClass(element));\n if (that.options.useNativeScrolling) {\n setMinimumHeight(element);\n }\n if (BROKEN_WEBVIEW_RESIZE) {\n that._resizeToScreenHeight();\n }\n if (BERRYPHONEGAP) {\n applyViewportHeight();\n }\n kendo.resize(element);\n });\n },\n _clearExistingMeta: function () {\n HEAD.find('meta').filter('[name|=\\'apple-mobile-web-app\\'],[name|=\\'msapplication-tap\\'],[name=\\'viewport\\']').remove();\n },\n _attachMeta: function () {\n var options = this.options, icon = options.icon, size;\n this._clearExistingMeta();\n if (!BERRYPHONEGAP) {\n HEAD.prepend(viewportTemplate({\n height: '',\n scale: this.options.retina ? 1 / support.devicePixelRatio : '1.0'\n }));\n }\n HEAD.prepend(systemMeta(options));\n if (icon) {\n if (typeof icon === 'string') {\n icon = { '': icon };\n }\n for (size in icon) {\n HEAD.prepend(iconMeta({\n icon: icon[size],\n size: size\n }));\n }\n }\n if (options.useNativeScrolling) {\n setMinimumHeight(this.element);\n }\n },\n _attachHideBarHandlers: function () {\n var that = this, hideBar = proxy(that, '_hideBar');\n if (support.mobileOS.appMode || !that.options.hideAddressBar || !HIDEBAR || that.options.useNativeScrolling) {\n return;\n }\n that._initialHeight = {};\n WINDOW.on('load', hideBar);\n kendo.onResize(function () {\n setTimeout(window.scrollTo, 0, 0, 1);\n });\n },\n _setupDocumentTitle: function () {\n var that = this, defaultTitle = document.title;\n that.pane.bind('viewShow', function (e) {\n var title = e.view.title;\n document.title = title !== undefined ? title : defaultTitle;\n });\n },\n _hideBar: function () {\n var that = this, element = that.element;\n element.height(kendo.support.transforms.css + 'calc(100% + ' + BARCOMPENSATION + 'px)');\n $(window).trigger(kendo.support.resize);\n }\n });\n kendo.mobile.Application = Application;\n kendo.ui.plugin(Application, kendo.mobile, 'Mobile');\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.actionsheet', [\n 'kendo.mobile.popover',\n 'kendo.mobile.shim'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.actionsheet',\n name: 'ActionSheet',\n category: 'mobile',\n description: 'The mobile ActionSheet widget displays a set of choices related to a task the user initiates.',\n depends: [\n 'mobile.popover',\n 'mobile.shim'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.mobile.ui, Shim = ui.Shim, Popup = ui.Popup, Widget = ui.Widget, OPEN = 'open', CLOSE = 'close', COMMAND = 'command', BUTTONS = 'li>a', CONTEXT_DATA = 'actionsheetContext', WRAP = '
    ', cancelTemplate = kendo.template('
  • #:cancel#
  • ');\n var ActionSheet = Widget.extend({\n init: function (element, options) {\n var that = this, ShimClass, tablet, type, os = support.mobileOS;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n type = options.type;\n element = that.element;\n if (type === 'auto') {\n tablet = os && os.tablet;\n } else {\n tablet = type === 'tablet';\n }\n ShimClass = tablet ? Popup : Shim;\n if (options.cancelTemplate) {\n cancelTemplate = kendo.template(options.cancelTemplate);\n }\n element.addClass('km-actionsheet').append(cancelTemplate({ cancel: that.options.cancel })).wrap(WRAP).on('up', BUTTONS, '_click').on('click', BUTTONS, kendo.preventDefault);\n that.view().bind('destroy', function () {\n that.destroy();\n });\n that.wrapper = element.parent().addClass(type ? ' km-actionsheet-' + type : '');\n that.shim = new ShimClass(that.wrapper, $.extend({\n modal: os.ios && os.majorVersion < 7,\n className: 'km-actionsheet-root'\n }, that.options.popup));\n that._closeProxy = $.proxy(that, '_close');\n that._shimHideProxy = $.proxy(that, '_shimHide');\n that.shim.bind('hide', that._shimHideProxy);\n if (tablet) {\n kendo.onResize(that._closeProxy);\n }\n kendo.notify(that, ui);\n },\n events: [\n OPEN,\n CLOSE,\n COMMAND\n ],\n options: {\n name: 'ActionSheet',\n cancel: 'Cancel',\n type: 'auto',\n popup: { height: 'auto' }\n },\n open: function (target, context) {\n var that = this;\n that.target = $(target);\n that.context = context;\n that.shim.show(target);\n },\n close: function () {\n this.context = this.target = null;\n this.shim.hide();\n },\n openFor: function (target) {\n var that = this, context = target.data(CONTEXT_DATA);\n that.open(target, context);\n that.trigger(OPEN, {\n target: target,\n context: context\n });\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.unbindResize(this._closeProxy);\n this.shim.destroy();\n },\n _click: function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n var currentTarget = $(e.currentTarget);\n var action = currentTarget.data('action');\n if (action) {\n var actionData = {\n target: this.target,\n context: this.context\n }, $angular = this.options.$angular;\n if ($angular) {\n this.element.injector().get('$parse')(action)($angular[0])(actionData);\n } else {\n kendo.getter(action)(window)(actionData);\n }\n }\n this.trigger(COMMAND, {\n target: this.target,\n context: this.context,\n currentTarget: currentTarget\n });\n e.preventDefault();\n this._close();\n },\n _shimHide: function (e) {\n if (!this.trigger(CLOSE)) {\n this.context = this.target = null;\n } else {\n e.preventDefault();\n }\n },\n _close: function (e) {\n if (!this.trigger(CLOSE)) {\n this.close();\n } else {\n e.preventDefault();\n }\n }\n });\n ui.plugin(ActionSheet);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.button', ['kendo.userevents'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.button',\n name: 'Button',\n category: 'mobile',\n description: 'The Button widget navigates between mobile Application views when pressed.',\n depends: ['userevents']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget, support = kendo.support, os = support.mobileOS, ANDROID3UP = os.android && os.flatVersion >= 300, CLICK = 'click', DISABLED = 'disabled', DISABLEDSTATE = 'km-state-disabled';\n function highlightButton(widget, event, highlight) {\n $(event.target).closest('.km-button,.km-detail').toggleClass('km-state-active', highlight);\n if (ANDROID3UP && widget.deactivateTimeoutID) {\n clearTimeout(widget.deactivateTimeoutID);\n widget.deactivateTimeoutID = 0;\n }\n }\n function createBadge(value) {\n return $('' + value + '');\n }\n var Button = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var useTap = that.options.clickOn === 'up';\n that._wrap();\n that._style();\n if (!useTap) {\n that.element.attr('data-navigate-on-press', true);\n }\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that._userEvents = new kendo.UserEvents(that.element, {\n allowSelection: !useTap,\n fastTap: true,\n press: function (e) {\n that._activate(e);\n },\n release: function (e) {\n highlightButton(that, e, false);\n if (!useTap) {\n e.event.stopPropagation();\n }\n }\n });\n that._userEvents.bind(useTap ? 'tap' : 'press', function (e) {\n that._release(e);\n });\n if (ANDROID3UP) {\n that.element.on('move', function (e) {\n that._timeoutDeactivate(e);\n });\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n events: [CLICK],\n options: {\n name: 'Button',\n icon: '',\n style: '',\n badge: '',\n clickOn: 'up',\n enable: true\n },\n badge: function (value) {\n var badge = this.badgeElement = this.badgeElement || createBadge(value).appendTo(this.element);\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n this.badgeElement = false;\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var element = this.element;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n element.toggleClass(DISABLEDSTATE, !enable);\n },\n _timeoutDeactivate: function (e) {\n if (!this.deactivateTimeoutID) {\n this.deactivateTimeoutID = setTimeout(highlightButton, 500, this, e, false);\n }\n },\n _activate: function (e) {\n var activeElement = document.activeElement, nodeName = activeElement ? activeElement.nodeName : '';\n if (this.options.enable) {\n highlightButton(this, e, true);\n if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {\n activeElement.blur();\n }\n }\n },\n _release: function (e) {\n var that = this;\n if (e.which > 1) {\n return;\n }\n if (!that.options.enable) {\n e.preventDefault();\n return;\n }\n if (that.trigger(CLICK, {\n target: $(e.target),\n button: that.element\n })) {\n e.preventDefault();\n }\n },\n _style: function () {\n var style = this.options.style, element = this.element, styles;\n if (style) {\n styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, badge = that.options.badge, iconSpan = '').children('span.km-text');\n }\n if (!image[0] && icon) {\n if (!span[0]) {\n iconSpan += ' km-notext';\n }\n that.iconElement = element.prepend($(iconSpan + '\" />'));\n }\n if (badge || badge === 0) {\n that.badgeElement = createBadge(badge).appendTo(element);\n }\n }\n });\n var BackButton = Button.extend({\n options: {\n name: 'BackButton',\n style: 'back'\n },\n init: function (element, options) {\n var that = this;\n Button.fn.init.call(that, element, options);\n if (typeof that.element.attr('href') === 'undefined') {\n that.element.attr('href', '#:back');\n }\n }\n });\n var DetailButton = Button.extend({\n options: {\n name: 'DetailButton',\n style: ''\n },\n init: function (element, options) {\n Button.fn.init.call(this, element, options);\n },\n _style: function () {\n var style = this.options.style + ' detail', element = this.element;\n if (style) {\n var styles = style.split(' ');\n $.each(styles, function () {\n element.addClass('km-' + this);\n });\n }\n },\n _wrap: function () {\n var that = this, icon = that.options.icon, iconSpan = ''));\n }\n }\n });\n ui.plugin(Button);\n ui.plugin(BackButton);\n ui.plugin(DetailButton);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.buttongroup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.buttongroup',\n name: 'ButtonGroup',\n category: 'mobile',\n description: 'The Kendo mobile ButtonGroup widget is a linear set of grouped buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE = 'km-state-active', DISABLE = 'km-state-disabled', SELECT = 'select', SELECTOR = 'li:not(.' + ACTIVE + ')';\n function createBadge(value) {\n return $('' + value + '');\n }\n var ButtonGroup = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element.addClass('km-buttongroup').find('li').each(that._button);\n that.element.on(that.options.selectOn, SELECTOR, '_select');\n that._enable = true;\n that.select(that.options.index);\n if (!that.options.enable) {\n that._enable = false;\n that.wrapper.addClass(DISABLE);\n }\n },\n events: [SELECT],\n options: {\n name: 'ButtonGroup',\n selectOn: 'down',\n index: -1,\n enable: true\n },\n current: function () {\n return this.element.find('.' + ACTIVE);\n },\n select: function (li) {\n var that = this, index = -1;\n if (li === undefined || li === -1 || !that._enable || $(li).is('.' + DISABLE)) {\n return;\n }\n that.current().removeClass(ACTIVE);\n if (typeof li === 'number') {\n index = li;\n li = $(that.element[0].children[li]);\n } else if (li.nodeType) {\n li = $(li);\n index = li.index();\n }\n li.addClass(ACTIVE);\n that.selectedIndex = index;\n },\n badge: function (item, value) {\n var buttongroup = this.element, badge;\n if (!isNaN(item)) {\n item = buttongroup.children().get(item);\n }\n item = buttongroup.find(item);\n badge = $(item.children('.km-badge')[0] || createBadge(value).appendTo(item));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n enable: function (enable) {\n var wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (enable) {\n wrapper.removeClass(DISABLE);\n } else {\n wrapper.addClass(DISABLE);\n }\n this._enable = this.options.enable = enable;\n },\n _button: function () {\n var button = $(this).addClass('km-button'), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), span = button.children('span'), image = button.find('img').addClass('km-image');\n if (!span[0]) {\n span = button.wrapInner('').children('span');\n }\n span.addClass('km-text');\n if (!image[0] && icon) {\n button.prepend($(''));\n }\n if (badge || badge === 0) {\n createBadge(badge).appendTo(button);\n }\n },\n _select: function (e) {\n if (e.which > 1 || e.isDefaultPrevented() || !this._enable) {\n return;\n }\n this.select(e.currentTarget);\n this.trigger(SELECT, { index: this.selectedIndex });\n }\n });\n ui.plugin(ButtonGroup);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.collapsible', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.collapsible',\n name: 'Collapsible',\n category: 'mobile',\n description: 'The Kendo mobile Collapsible widget provides ability for creating collapsible blocks of content.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, COLLAPSIBLE = 'km-collapsible', HEADER = 'km-collapsible-header', CONTENT = 'km-collapsible-content', INSET = 'km-collapsibleinset', HEADER_WRAPPER = '
    ', CONTENT_WRAPPER = '
    ', COLLAPSED = 'km-collapsed', EXPANDED = 'km-expanded', ANIMATED = 'km-animated', LEFT = 'left', EXAPND = 'expand', COLLAPSE = 'collapse';\n var Collapsible = Widget.extend({\n init: function (element, options) {\n var that = this, container = $(element);\n Widget.fn.init.call(that, container, options);\n container.addClass(COLLAPSIBLE);\n that._buildHeader();\n that.content = container.children().not(that.header).wrapAll(CONTENT_WRAPPER).parent();\n that._userEvents = new kendo.UserEvents(that.header, {\n fastTap: true,\n tap: function () {\n that.toggle();\n }\n });\n container.addClass(that.options.collapsed ? COLLAPSED : EXPANDED);\n if (that.options.inset) {\n container.addClass(INSET);\n }\n if (that.options.animation) {\n that.content.addClass(ANIMATED);\n that.content.height(0);\n if (that.options.collapsed) {\n that.content.hide();\n }\n } else if (that.options.collapsed) {\n that.content.hide();\n }\n },\n events: [\n EXAPND,\n COLLAPSE\n ],\n options: {\n name: 'Collapsible',\n collapsed: true,\n collapseIcon: 'arrow-n',\n expandIcon: 'arrow-s',\n iconPosition: LEFT,\n animation: true,\n inset: false\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._userEvents.destroy();\n },\n expand: function (instant) {\n var icon = this.options.collapseIcon, content = this.content, ios = kendo.support.mobileOS.ios;\n if (!this.trigger(EXAPND)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(COLLAPSED).addClass(EXPANDED);\n if (this.options.animation && !instant) {\n content.off('transitionend');\n content.show();\n if (ios) {\n content.removeClass(ANIMATED);\n }\n content.height(this._getContentHeight());\n if (ios) {\n content.addClass(ANIMATED);\n }\n kendo.resize(content);\n } else {\n content.show();\n }\n }\n },\n collapse: function (instant) {\n var icon = this.options.expandIcon, content = this.content;\n if (!this.trigger(COLLAPSE)) {\n if (icon) {\n this.header.find('.km-icon').removeClass().addClass('km-icon km-' + icon);\n }\n this.element.removeClass(EXPANDED).addClass(COLLAPSED);\n if (this.options.animation && !instant) {\n content.one('transitionend', function () {\n content.hide();\n });\n content.height(0);\n } else {\n content.hide();\n }\n }\n },\n toggle: function (instant) {\n if (this.isCollapsed()) {\n this.expand(instant);\n } else {\n this.collapse(instant);\n }\n },\n isCollapsed: function () {\n return this.element.hasClass(COLLAPSED);\n },\n resize: function () {\n if (!this.isCollapsed() && this.options.animation) {\n this.content.height(this._getContentHeight());\n }\n },\n _buildHeader: function () {\n var header = this.element.children(':header').wrapAll(HEADER_WRAPPER), iconSpan = $(''), icon = this.options.collapsed ? this.options.expandIcon : this.options.collapseIcon, iconPosition = this.options.iconPosition;\n if (icon) {\n header.prepend(iconSpan);\n iconSpan.addClass('km-' + icon);\n }\n this.header = header.parent();\n this.header.addClass('km-icon-' + iconPosition);\n },\n _getContentHeight: function () {\n var style = this.content.attr('style'), height;\n this.content.css({\n position: 'absolute',\n visibility: 'hidden',\n height: 'auto'\n });\n height = this.content.height();\n this.content.attr('style', style ? style : '');\n return height;\n }\n });\n ui.plugin(Collapsible);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.listview', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.mobile.button'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.listview',\n name: 'ListView',\n category: 'mobile',\n description: 'The Kendo Mobile ListView widget is used to display flat or grouped list of items.',\n depends: [\n 'data',\n 'userevents',\n 'mobile.button'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Node = window.Node, mobile = kendo.mobile, ui = mobile.ui, DataSource = kendo.data.DataSource, Widget = ui.DataBoundWidget, ITEM_SELECTOR = '.km-list > li, > li:not(.km-group-container)', HIGHLIGHT_SELECTOR = '.km-listview-link, .km-listview-label', ICON_SELECTOR = '[' + kendo.attr('icon') + ']', proxy = $.proxy, attrValue = kendo.attrValue, GROUP_CLASS = 'km-group-title', ACTIVE_CLASS = 'km-state-active', GROUP_WRAPPER = '
    ', GROUP_TEMPLATE = kendo.template('
  • #= this.headerTemplate(data) #
      #= kendo.render(this.template, data.items)#
  • '), WRAPPER = '
    ', SEARCH_TEMPLATE = kendo.template(''), NS = '.kendoMobileListView', STYLED = 'styled', DATABOUND = 'dataBound', DATABINDING = 'dataBinding', ITEM_CHANGE = 'itemChange', CLICK = 'click', CHANGE = 'change', PROGRESS = 'progress', FUNCTION = 'function', whitespaceRegExp = /^\\s+$/, buttonRegExp = /button/;\n function whitespace() {\n return this.nodeType === Node.TEXT_NODE && this.nodeValue.match(whitespaceRegExp);\n }\n function addIcon(item, icon) {\n if (icon && !item[0].querySelector('.km-icon')) {\n item.prepend('');\n }\n }\n function enhanceItem(item) {\n addIcon(item, attrValue(item, 'icon'));\n addIcon(item, attrValue(item.children(ICON_SELECTOR), 'icon'));\n }\n function enhanceLinkItem(item) {\n var parent = item.parent(), itemAndDetailButtons = item.add(parent.children(kendo.roleSelector('detailbutton'))), otherNodes = parent.contents().not(itemAndDetailButtons).not(whitespace);\n if (otherNodes.length) {\n return;\n }\n item.addClass('km-listview-link').attr(kendo.attr('role'), 'listview-link');\n addIcon(item, attrValue(parent, 'icon'));\n addIcon(item, attrValue(item, 'icon'));\n }\n function enhanceCheckBoxItem(label) {\n if (!label[0].querySelector('input[type=checkbox],input[type=radio]')) {\n return;\n }\n var item = label.parent();\n if (item.contents().not(label).not(function () {\n return this.nodeType == 3;\n })[0]) {\n return;\n }\n label.addClass('km-listview-label');\n label.children('[type=checkbox],[type=radio]').addClass('km-widget km-icon km-check');\n }\n function putAt(element, top) {\n $(element).css('transform', 'translate3d(0px, ' + top + 'px, 0px)');\n }\n var HeaderFixer = kendo.Class.extend({\n init: function (listView) {\n var scroller = listView.scroller();\n if (!scroller) {\n return;\n }\n this.options = listView.options;\n this.element = listView.element;\n this.scroller = listView.scroller();\n this._shouldFixHeaders();\n var headerFixer = this;\n var cacheHeaders = function () {\n headerFixer._cacheHeaders();\n };\n listView.bind('resize', cacheHeaders);\n listView.bind(STYLED, cacheHeaders);\n listView.bind(DATABOUND, cacheHeaders);\n scroller.bind('scroll', function (e) {\n headerFixer._fixHeader(e);\n });\n },\n _fixHeader: function (e) {\n if (!this.fixedHeaders) {\n return;\n }\n var i = 0, scroller = this.scroller, headers = this.headers, scrollTop = e.scrollTop, headerPair, offset, header;\n do {\n headerPair = headers[i++];\n if (!headerPair) {\n header = $('
    ');\n break;\n }\n offset = headerPair.offset;\n header = headerPair.header;\n } while (offset + 1 > scrollTop);\n if (this.currentHeader != i) {\n scroller.fixedContainer.html(header.clone());\n this.currentHeader = i;\n }\n },\n _shouldFixHeaders: function () {\n this.fixedHeaders = this.options.type === 'group' && this.options.fixedHeaders;\n },\n _cacheHeaders: function () {\n this._shouldFixHeaders();\n if (!this.fixedHeaders) {\n return;\n }\n var headers = [], offset = this.scroller.scrollTop;\n this.element.find('.' + GROUP_CLASS).each(function (_, header) {\n header = $(header);\n headers.unshift({\n offset: header.position().top + offset,\n header: header\n });\n });\n this.headers = headers;\n this._fixHeader({ scrollTop: offset });\n }\n });\n var DEFAULT_PULL_PARAMETERS = function () {\n return { page: 1 };\n };\n var RefreshHandler = kendo.Class.extend({\n init: function (listView) {\n var handler = this, options = listView.options, scroller = listView.scroller(), pullParameters = options.pullParameters || DEFAULT_PULL_PARAMETERS;\n this.listView = listView;\n this.scroller = scroller;\n listView.bind('_dataSource', function (e) {\n handler.setDataSource(e.dataSource);\n });\n scroller.setOptions({\n pullToRefresh: true,\n pull: function () {\n if (!handler._pulled) {\n handler._pulled = true;\n handler.dataSource.read(pullParameters.call(listView, handler._first));\n }\n },\n messages: {\n pullTemplate: options.messages.pullTemplate,\n releaseTemplate: options.messages.releaseTemplate,\n refreshTemplate: options.messages.refreshTemplate\n }\n });\n },\n setDataSource: function (dataSource) {\n var handler = this;\n this._first = dataSource.view()[0];\n this.dataSource = dataSource;\n dataSource.bind('change', function () {\n handler._change();\n });\n dataSource.bind('error', function () {\n handler._change();\n });\n },\n _change: function () {\n var scroller = this.scroller, dataSource = this.dataSource;\n if (this._pulled) {\n scroller.pullHandled();\n }\n if (this._pulled || !this._first) {\n var view = dataSource.view();\n if (view[0]) {\n this._first = view[0];\n }\n }\n this._pulled = false;\n }\n });\n var VirtualList = kendo.Observable.extend({\n init: function (options) {\n var list = this;\n kendo.Observable.fn.init.call(list);\n list.buffer = options.buffer;\n list.height = options.height;\n list.item = options.item;\n list.items = [];\n list.footer = options.footer;\n list.buffer.bind('reset', function () {\n list.refresh();\n });\n },\n refresh: function () {\n var buffer = this.buffer, items = this.items, endReached = false;\n while (items.length) {\n items.pop().destroy();\n }\n this.offset = buffer.offset;\n var itemConstructor = this.item, prevItem, item;\n for (var idx = 0; idx < buffer.viewSize; idx++) {\n if (idx === buffer.total()) {\n endReached = true;\n break;\n }\n item = itemConstructor(this.content(this.offset + items.length));\n item.below(prevItem);\n prevItem = item;\n items.push(item);\n }\n this.itemCount = items.length;\n this.trigger('reset');\n this._resize();\n if (endReached) {\n this.trigger('endReached');\n }\n },\n totalHeight: function () {\n if (!this.items[0]) {\n return 0;\n }\n var list = this, items = list.items, top = items[0].top, bottom = items[items.length - 1].bottom, averageItemHeight = (bottom - top) / list.itemCount, remainingItemsCount = list.buffer.length - list.offset - list.itemCount;\n return (this.footer ? this.footer.height : 0) + bottom + remainingItemsCount * averageItemHeight;\n },\n batchUpdate: function (top) {\n var height = this.height(), items = this.items, item, initialOffset = this.offset;\n if (!items[0]) {\n return;\n }\n if (this.lastDirection) {\n while (items[items.length - 1].bottom > top + height * 2) {\n if (this.offset === 0) {\n break;\n }\n this.offset--;\n item = items.pop();\n item.update(this.content(this.offset));\n item.above(items[0]);\n items.unshift(item);\n }\n } else {\n while (items[0].top < top - height) {\n var nextIndex = this.offset + this.itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n break;\n }\n if (nextIndex === this.buffer.length) {\n break;\n }\n item = items.shift();\n item.update(this.content(this.offset + this.itemCount));\n item.below(items[items.length - 1]);\n items.push(item);\n this.offset++;\n }\n }\n if (initialOffset !== this.offset) {\n this._resize();\n }\n },\n update: function (top) {\n var list = this, items = this.items, item, firstItem, lastItem, height = this.height(), itemCount = this.itemCount, padding = height / 2, up = (this.lastTop || 0) > top, topBorder = top - padding, bottomBorder = top + height + padding;\n if (!items[0]) {\n return;\n }\n this.lastTop = top;\n this.lastDirection = up;\n if (up) {\n if (items[0].top > topBorder && items[items.length - 1].bottom > bottomBorder + padding && this.offset > 0) {\n this.offset--;\n item = items.pop();\n firstItem = items[0];\n item.update(this.content(this.offset));\n items.unshift(item);\n item.above(firstItem);\n list._resize();\n }\n } else {\n if (items[items.length - 1].bottom < bottomBorder && items[0].top < topBorder - padding) {\n var nextIndex = this.offset + itemCount;\n if (nextIndex === this.buffer.total()) {\n this.trigger('endReached');\n } else if (nextIndex !== this.buffer.length) {\n item = items.shift();\n lastItem = items[items.length - 1];\n items.push(item);\n item.update(this.content(this.offset + this.itemCount));\n list.offset++;\n item.below(lastItem);\n list._resize();\n }\n }\n }\n },\n content: function (index) {\n return this.buffer.at(index);\n },\n destroy: function () {\n this.unbind();\n },\n _resize: function () {\n var items = this.items, top = 0, bottom = 0, firstItem = items[0], lastItem = items[items.length - 1];\n if (firstItem) {\n top = firstItem.top;\n bottom = lastItem.bottom;\n }\n this.trigger('resize', {\n top: top,\n bottom: bottom\n });\n if (this.footer) {\n this.footer.below(lastItem);\n }\n }\n });\n kendo.mobile.ui.VirtualList = VirtualList;\n var VirtualListViewItem = kendo.Class.extend({\n init: function (listView, dataItem) {\n var element = listView.append([dataItem], true)[0], height = element.offsetHeight;\n $.extend(this, {\n top: 0,\n element: element,\n listView: listView,\n height: height,\n bottom: height\n });\n },\n update: function (dataItem) {\n this.element = this.listView.setDataItem(this.element, dataItem);\n },\n above: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.top - this.height;\n this.bottom = item.top;\n putAt(this.element, this.top);\n }\n },\n below: function (item) {\n if (item) {\n this.height = this.element.offsetHeight;\n this.top = item.bottom;\n this.bottom = this.top + this.height;\n putAt(this.element, this.top);\n }\n },\n destroy: function () {\n kendo.destroy(this.element);\n $(this.element).remove();\n }\n });\n var LOAD_ICON = '
    ';\n var VirtualListViewLoadingIndicator = kendo.Class.extend({\n init: function (listView) {\n this.element = $('
  • ').appendTo(listView.element);\n this._loadIcon = $(LOAD_ICON).appendTo(this.element);\n },\n enable: function () {\n this.element.show();\n this.height = this.element.outerHeight(true);\n },\n disable: function () {\n this.element.hide();\n this.height = 0;\n },\n below: function (item) {\n if (item) {\n this.top = item.bottom;\n this.bottom = this.height + this.top;\n putAt(this.element, this.top);\n }\n }\n });\n var VirtualListViewPressToLoadMore = VirtualListViewLoadingIndicator.extend({\n init: function (listView, buffer) {\n this._loadIcon = $(LOAD_ICON).hide();\n this._loadButton = $('' + listView.options.messages.loadMoreText + '').hide();\n this.element = $('
  • ').append(this._loadIcon).append(this._loadButton).appendTo(listView.element);\n var loadMore = this;\n this._loadButton.kendoMobileButton().data('kendoMobileButton').bind('click', function () {\n loadMore._hideShowButton();\n buffer.next();\n });\n buffer.bind('resize', function () {\n loadMore._showLoadButton();\n });\n this.height = this.element.outerHeight(true);\n this.disable();\n },\n _hideShowButton: function () {\n this._loadButton.hide();\n this.element.addClass('km-scroller-refresh');\n this._loadIcon.css('display', 'block');\n },\n _showLoadButton: function () {\n this._loadButton.show();\n this.element.removeClass('km-scroller-refresh');\n this._loadIcon.hide();\n }\n });\n var VirtualListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.chromeHeight = listView.wrapper.children().not(listView.element).outerHeight() || 0;\n this.listView = listView;\n this.scroller = listView.scroller();\n this.options = listView.options;\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource, e.empty);\n });\n listView.bind('resize', function () {\n if (!binder.list.items.length) {\n return;\n }\n binder.scroller.reset();\n binder.buffer.range(0);\n binder.list.refresh();\n });\n this.scroller.makeVirtual();\n this.scroller.bind('scroll', function (e) {\n binder.list.update(e.scrollTop);\n });\n this.scroller.bind('scrollEnd', function (e) {\n binder.list.batchUpdate(e.scrollTop);\n });\n },\n destroy: function () {\n this.list.unbind();\n this.buffer.unbind();\n },\n setDataSource: function (dataSource, empty) {\n var binder = this, options = this.options, listView = this.listView, scroller = listView.scroller(), pressToLoadMore = options.loadMore, pageSize, buffer, footer;\n this.dataSource = dataSource;\n pageSize = dataSource.pageSize() || options.virtualViewSize;\n if (!pageSize && !empty) {\n throw new Error('the DataSource does not have page size configured. Page Size setting is mandatory for the mobile listview virtual scrolling to work as expected.');\n }\n if (this.buffer) {\n this.buffer.destroy();\n }\n buffer = new kendo.data.Buffer(dataSource, Math.floor(pageSize / 2), pressToLoadMore);\n if (pressToLoadMore) {\n footer = new VirtualListViewPressToLoadMore(listView, buffer);\n } else {\n footer = new VirtualListViewLoadingIndicator(listView);\n }\n if (this.list) {\n this.list.destroy();\n }\n var list = new VirtualList({\n buffer: buffer,\n footer: footer,\n item: function (dataItem) {\n return new VirtualListViewItem(listView, dataItem);\n },\n height: function () {\n return scroller.height();\n }\n });\n list.bind('resize', function () {\n binder.updateScrollerSize();\n listView.updateSize();\n });\n list.bind('reset', function () {\n binder.footer.enable();\n });\n list.bind('endReached', function () {\n footer.disable();\n binder.updateScrollerSize();\n });\n buffer.bind('expand', function () {\n list.lastDirection = false;\n list.batchUpdate(scroller.scrollTop);\n });\n $.extend(this, {\n buffer: buffer,\n scroller: scroller,\n list: list,\n footer: footer\n });\n },\n updateScrollerSize: function () {\n this.scroller.virtualSize(0, this.list.totalHeight() + this.chromeHeight);\n },\n refresh: function () {\n this.list.refresh();\n },\n reset: function () {\n this.buffer.range(0);\n this.list.refresh();\n }\n });\n var ListViewItemBinder = kendo.Class.extend({\n init: function (listView) {\n var binder = this;\n this.listView = listView;\n this.options = listView.options;\n var itemBinder = this;\n this._refreshHandler = function (e) {\n itemBinder.refresh(e);\n };\n this._progressHandler = function () {\n listView.showLoading();\n };\n listView.bind('_dataSource', function (e) {\n binder.setDataSource(e.dataSource);\n });\n },\n destroy: function () {\n this._unbindDataSource();\n },\n reset: function () {\n },\n refresh: function (e) {\n var action = e && e.action, dataItems = e && e.items, listView = this.listView, dataSource = this.dataSource, prependOnRefresh = this.options.appendOnRefresh, view = dataSource.view(), groups = dataSource.group(), groupedMode = groups && groups[0], item;\n if (action === 'itemchange') {\n if (!listView._hasBindingTarget()) {\n item = listView.findByDataItem(dataItems)[0];\n if (item) {\n listView.setDataItem(item, dataItems[0]);\n }\n }\n return;\n }\n var removedItems, addedItems, addedDataItems;\n var adding = action === 'add' && !groupedMode || prependOnRefresh && !listView._filter;\n var removing = action === 'remove' && !groupedMode;\n if (adding) {\n removedItems = [];\n } else if (removing) {\n removedItems = listView.findByDataItem(dataItems);\n }\n if (listView.trigger(DATABINDING, {\n action: action || 'rebind',\n items: dataItems,\n removedItems: removedItems,\n index: e && e.index\n })) {\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n return;\n }\n if (action === 'add' && !groupedMode) {\n var index = view.indexOf(dataItems[0]);\n if (index > -1) {\n addedItems = listView.insertAt(dataItems, index);\n addedDataItems = dataItems;\n }\n } else if (action === 'remove' && !groupedMode) {\n addedItems = [];\n listView.remove(dataItems);\n } else if (groupedMode) {\n listView.replaceGrouped(view);\n } else if (prependOnRefresh && !listView._filter) {\n addedItems = listView.prepend(view);\n addedDataItems = view;\n } else {\n listView.replace(view);\n }\n if (this._shouldShowLoading()) {\n listView.hideLoading();\n }\n listView.trigger(DATABOUND, {\n ns: ui,\n addedItems: addedItems,\n addedDataItems: addedDataItems\n });\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this._unbindDataSource();\n }\n this.dataSource = dataSource;\n dataSource.bind(CHANGE, this._refreshHandler);\n if (this._shouldShowLoading()) {\n this.dataSource.bind(PROGRESS, this._progressHandler);\n }\n },\n _unbindDataSource: function () {\n this.dataSource.unbind(CHANGE, this._refreshHandler).unbind(PROGRESS, this._progressHandler);\n },\n _shouldShowLoading: function () {\n var options = this.options;\n return !options.pullToRefresh && !options.loadMore && !options.endlessScroll;\n }\n });\n var ListViewFilter = kendo.Class.extend({\n init: function (listView) {\n var filter = this, filterable = listView.options.filterable, events = 'change paste', that = this;\n this.listView = listView;\n this.options = filterable;\n listView.element.before(SEARCH_TEMPLATE({ placeholder: filterable.placeholder || 'Search...' }));\n if (filterable.autoFilter !== false) {\n events += ' keyup';\n }\n this.element = listView.wrapper.find('.km-search-form');\n this.searchInput = listView.wrapper.find('input[type=search]').closest('form').on('submit' + NS, function (e) {\n e.preventDefault();\n }).end().on('focus' + NS, function () {\n filter._oldFilter = filter.searchInput.val();\n }).on(events.split(' ').join(NS + ' ') + NS, proxy(this._filterChange, this));\n this.clearButton = listView.wrapper.find('.km-filter-reset').on(CLICK, proxy(this, '_clearFilter')).hide();\n this._dataSourceChange = $.proxy(this._refreshInput, this);\n listView.bind('_dataSource', function (e) {\n e.dataSource.bind('change', that._dataSourceChange);\n });\n },\n _refreshInput: function () {\n var appliedFilters = this.listView.dataSource.filter();\n var searchInput = this.listView._filter.searchInput;\n if (!appliedFilters || appliedFilters.filters[0].field !== this.listView.options.filterable.field) {\n searchInput.val('');\n } else {\n searchInput.val(appliedFilters.filters[0].value);\n }\n },\n _search: function (expr) {\n this._filter = true;\n this.clearButton[expr ? 'show' : 'hide']();\n this.listView.dataSource.filter(expr);\n },\n _filterChange: function (e) {\n var filter = this;\n if (e.type == 'paste' && this.options.autoFilter !== false) {\n setTimeout(function () {\n filter._applyFilter();\n }, 1);\n } else {\n this._applyFilter();\n }\n },\n _applyFilter: function () {\n var options = this.options, value = this.searchInput.val(), expr = value.length ? {\n field: options.field,\n operator: options.operator || 'startswith',\n ignoreCase: options.ignoreCase,\n value: value\n } : null;\n if (value === this._oldFilter) {\n return;\n }\n this._oldFilter = value;\n this._search(expr);\n },\n _clearFilter: function (e) {\n this.searchInput.val('');\n this._search(null);\n e.preventDefault();\n }\n });\n var ListView = Widget.extend({\n init: function (element, options) {\n var listView = this;\n Widget.fn.init.call(this, element, options);\n element = this.element;\n options = this.options;\n if (options.scrollTreshold) {\n options.scrollThreshold = options.scrollTreshold;\n }\n element.on('down', HIGHLIGHT_SELECTOR, '_highlight').on('move up cancel', HIGHLIGHT_SELECTOR, '_dim');\n this._userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n filter: ITEM_SELECTOR,\n allowSelection: true,\n tap: function (e) {\n listView._click(e);\n }\n });\n element.css('-ms-touch-action', 'auto');\n element.wrap(WRAPPER);\n this.wrapper = this.element.parent();\n this._headerFixer = new HeaderFixer(this);\n this._itemsCache = {};\n this._templates();\n this.virtual = options.endlessScroll || options.loadMore;\n this._style();\n if (this.options.$angular && (this.virtual || this.options.pullToRefresh)) {\n setTimeout($.proxy(this, '_start'));\n } else {\n this._start();\n }\n },\n _start: function () {\n var options = this.options;\n if (this.options.filterable) {\n this._filter = new ListViewFilter(this);\n }\n if (this.virtual) {\n this._itemBinder = new VirtualListViewItemBinder(this);\n } else {\n this._itemBinder = new ListViewItemBinder(this);\n }\n if (this.options.pullToRefresh) {\n this._pullToRefreshHandler = new RefreshHandler(this);\n }\n this.setDataSource(options.dataSource);\n this._enhanceItems(this.items());\n kendo.notify(this, ui);\n },\n events: [\n CLICK,\n DATABINDING,\n DATABOUND,\n ITEM_CHANGE\n ],\n options: {\n name: 'ListView',\n style: '',\n type: 'flat',\n autoBind: true,\n fixedHeaders: false,\n template: '#:data#',\n headerTemplate: '#:value#',\n appendOnRefresh: false,\n loadMore: false,\n endlessScroll: false,\n scrollThreshold: 30,\n pullToRefresh: false,\n messages: {\n loadMoreText: 'Press to load more',\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n },\n pullOffset: 140,\n filterable: false,\n virtualViewSize: null\n },\n refresh: function () {\n this._itemBinder.refresh();\n },\n reset: function () {\n this._itemBinder.reset();\n },\n setDataSource: function (dataSource) {\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this.trigger('_dataSource', {\n dataSource: this.dataSource,\n empty: emptyDataSource\n });\n if (this.options.autoBind && !emptyDataSource) {\n this.items().remove();\n this.dataSource.fetch();\n }\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n this._userEvents.destroy();\n if (this._itemBinder) {\n this._itemBinder.destroy();\n }\n this.element.unwrap();\n delete this.element;\n delete this.wrapper;\n delete this._userEvents;\n },\n items: function () {\n if (this.options.type === 'group') {\n return this.element.find('.km-list').children();\n } else {\n return this.element.children().not('.km-load-more');\n }\n },\n scroller: function () {\n if (!this._scrollerInstance) {\n this._scrollerInstance = this.element.closest('.km-scroll-wrapper').data('kendoMobileScroller');\n }\n return this._scrollerInstance;\n },\n showLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.show();\n }\n },\n hideLoading: function () {\n var view = this.view();\n if (view && view.loader) {\n view.loader.hide();\n }\n },\n insertAt: function (dataItems, index, triggerChange) {\n var listView = this;\n return listView._renderItems(dataItems, function (items) {\n if (index === 0) {\n listView.element.prepend(items);\n } else if (index === -1) {\n listView.element.append(items);\n } else {\n listView.items().eq(index - 1).after(items);\n }\n if (triggerChange) {\n for (var i = 0; i < items.length; i++) {\n listView.trigger(ITEM_CHANGE, {\n item: items.eq(i),\n data: dataItems[i],\n ns: ui\n });\n }\n }\n });\n },\n append: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, -1, triggerChange);\n },\n prepend: function (dataItems, triggerChange) {\n return this.insertAt(dataItems, 0, triggerChange);\n },\n replace: function (dataItems) {\n this.options.type = 'flat';\n this._angularItems('cleanup');\n this.element.empty();\n this._userEvents.cancel();\n this._style();\n return this.insertAt(dataItems, 0);\n },\n replaceGrouped: function (groups) {\n this.options.type = 'group';\n this._angularItems('cleanup');\n this.element.empty();\n var items = $(kendo.render(this.groupTemplate, groups));\n this._enhanceItems(items.children('ul').children('li'));\n this.element.append(items);\n mobile.init(items);\n this._style();\n this._angularItems('compile');\n },\n remove: function (dataItems) {\n var items = this.findByDataItem(dataItems);\n this.angular('cleanup', function () {\n return { elements: items };\n });\n kendo.destroy(items);\n items.remove();\n },\n findByDataItem: function (dataItems) {\n var selectors = [];\n for (var idx = 0, length = dataItems.length; idx < length; idx++) {\n selectors[idx] = '[data-' + kendo.ns + 'uid=' + dataItems[idx].uid + ']';\n }\n return this.element.find(selectors.join(','));\n },\n setDataItem: function (item, dataItem) {\n var listView = this, replaceItem = function (items) {\n var newItem = $(items[0]);\n kendo.destroy(item);\n listView.angular('cleanup', function () {\n return { elements: [$(item)] };\n });\n $(item).replaceWith(newItem);\n listView.trigger(ITEM_CHANGE, {\n item: newItem,\n data: dataItem,\n ns: ui\n });\n };\n return this._renderItems([dataItem], replaceItem)[0];\n },\n updateSize: function () {\n this._size = this.getSize();\n },\n _renderItems: function (dataItems, callback) {\n var items = $(kendo.render(this.template, dataItems));\n callback(items);\n this.angular('compile', function () {\n return {\n elements: items,\n data: dataItems.map(function (data) {\n return { dataItem: data };\n })\n };\n });\n mobile.init(items);\n this._enhanceItems(items);\n return items;\n },\n _dim: function (e) {\n this._toggle(e, false);\n },\n _highlight: function (e) {\n this._toggle(e, true);\n },\n _toggle: function (e, highlight) {\n if (e.which > 1) {\n return;\n }\n var clicked = $(e.currentTarget), item = clicked.parent(), role = attrValue(clicked, 'role') || '', plainItem = !role.match(buttonRegExp), prevented = e.isDefaultPrevented();\n if (plainItem) {\n item.toggleClass(ACTIVE_CLASS, highlight && !prevented);\n }\n },\n _templates: function () {\n var template = this.options.template, headerTemplate = this.options.headerTemplate, dataIDAttribute = ' data-uid=\"#=arguments[0].uid || \"\"#\"', templateProxy = {}, groupTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template('' + template + ''), templateProxy);\n groupTemplateProxy.template = this.template;\n if (typeof headerTemplate === FUNCTION) {\n groupTemplateProxy._headerTemplate = headerTemplate;\n headerTemplate = '#=this._headerTemplate(data)#';\n }\n groupTemplateProxy.headerTemplate = kendo.template(headerTemplate);\n this.groupTemplate = proxy(GROUP_TEMPLATE, groupTemplateProxy);\n },\n _click: function (e) {\n if (e.event.which > 1 || e.event.isDefaultPrevented()) {\n return;\n }\n var dataItem, item = e.target, target = $(e.event.target), buttonElement = target.closest(kendo.roleSelector('button', 'detailbutton', 'backbutton')), button = kendo.widgetInstance(buttonElement, ui), id = item.attr(kendo.attr('uid'));\n if (id) {\n dataItem = this.dataSource.getByUid(id);\n }\n if (this.trigger(CLICK, {\n target: target,\n item: item,\n dataItem: dataItem,\n button: button\n })) {\n e.preventDefault();\n }\n },\n _styleGroups: function () {\n var rootItems = this.element.children();\n rootItems.children('ul').addClass('km-list');\n rootItems.each(function () {\n var li = $(this), groupHeader = li.contents().first();\n li.addClass('km-group-container');\n if (!groupHeader.is('ul') && !groupHeader.is('div.' + GROUP_CLASS)) {\n groupHeader.wrap(GROUP_WRAPPER);\n }\n });\n },\n _style: function () {\n var options = this.options, grouped = options.type === 'group', element = this.element, inset = options.style === 'inset';\n element.addClass('km-listview').toggleClass('km-list', !grouped).toggleClass('km-virtual-list', this.virtual).toggleClass('km-listinset', !grouped && inset).toggleClass('km-listgroup', grouped && !inset).toggleClass('km-listgroupinset', grouped && inset);\n if (!element.parents('.km-listview')[0]) {\n element.closest('.km-content').toggleClass('km-insetcontent', inset);\n }\n if (grouped) {\n this._styleGroups();\n }\n this.trigger(STYLED);\n },\n _enhanceItems: function (items) {\n items.each(function () {\n var item = $(this), child, enhanced = false;\n item.children().each(function () {\n child = $(this);\n if (child.is('a')) {\n enhanceLinkItem(child);\n enhanced = true;\n } else if (child.is('label')) {\n enhanceCheckBoxItem(child);\n enhanced = true;\n }\n });\n if (!enhanced) {\n enhanceItem(item);\n }\n });\n }\n });\n ui.plugin(ListView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.navbar', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.navbar',\n name: 'NavBar',\n category: 'mobile',\n description: 'The Kendo mobile NavBar widget is used inside a mobile View or Layout Header element to display an application navigation bar.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, Widget = ui.Widget;\n function createContainer(align, element) {\n var items = element.find('[' + kendo.attr('align') + '=' + align + ']');\n if (items[0]) {\n return $('
    ').append(items).prependTo(element);\n }\n }\n function toggleTitle(centerElement) {\n var siblings = centerElement.siblings(), noTitle = !!centerElement.children('ul')[0], showTitle = !!siblings[0] && $.trim(centerElement.text()) === '', android = !!(kendo.mobile.application && kendo.mobile.application.element.is('.km-android'));\n centerElement.prevAll().toggleClass('km-absolute', noTitle);\n centerElement.toggleClass('km-show-title', showTitle);\n centerElement.toggleClass('km-fill-title', showTitle && !$.trim(centerElement.html()));\n centerElement.toggleClass('km-no-title', noTitle);\n centerElement.toggleClass('km-hide-title', android && !siblings.children().is(':visible'));\n }\n var NavBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that.container().bind('show', $.proxy(this, 'refresh'));\n element.addClass('km-navbar').wrapInner($('
    '));\n that.leftElement = createContainer('left', element);\n that.rightElement = createContainer('right', element);\n that.centerElement = element.find('.km-view-title');\n },\n options: { name: 'NavBar' },\n title: function (value) {\n this.element.find(kendo.roleSelector('view-title')).text(value);\n toggleTitle(this.centerElement);\n },\n refresh: function (e) {\n var view = e.view;\n this.title(view.options.title);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n }\n });\n ui.plugin(NavBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scrollview', [\n 'kendo.fx',\n 'kendo.data',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scrollview',\n name: 'ScrollView',\n category: 'mobile',\n description: 'The Kendo Mobile ScrollView widget is used to scroll content wider than the device screen.',\n depends: [\n 'fx',\n 'data',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, ui = mobile.ui, proxy = $.proxy, Transition = kendo.effects.Transition, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Widget = ui.DataBoundWidget, DataSource = kendo.data.DataSource, Buffer = kendo.data.Buffer, BatchBuffer = kendo.data.BatchBuffer, math = Math, abs = math.abs, ceil = math.ceil, round = math.round, max = math.max, min = math.min, floor = math.floor, CHANGE = 'change', CHANGING = 'changing', REFRESH = 'refresh', CURRENT_PAGE_CLASS = 'km-current-page', VIRTUAL_PAGE_CLASS = 'km-virtual-page', FUNCTION = 'function', ITEM_CHANGE = 'itemChange', CLEANUP = 'cleanup', VIRTUAL_PAGE_COUNT = 3, LEFT_PAGE = -1, CETER_PAGE = 0, RIGHT_PAGE = 1, LEFT_SWIPE = -1, NUDGE = 0, RIGHT_SWIPE = 1;\n var Pager = kendo.Class.extend({\n init: function (scrollView) {\n var that = this, element = $('
      ');\n scrollView.element.append(element);\n this._changeProxy = proxy(that, '_change');\n this._refreshProxy = proxy(that, '_refresh');\n scrollView.bind(CHANGE, this._changeProxy);\n scrollView.bind(REFRESH, this._refreshProxy);\n $.extend(that, {\n element: element,\n scrollView: scrollView\n });\n },\n items: function () {\n return this.element.children();\n },\n _refresh: function (e) {\n var pageHTML = '';\n for (var idx = 0; idx < e.pageCount; idx++) {\n pageHTML += '
    1. ';\n }\n this.element.html(pageHTML);\n this.items().eq(e.page).addClass(CURRENT_PAGE_CLASS);\n },\n _change: function (e) {\n this.items().removeClass(CURRENT_PAGE_CLASS).eq(e.page).addClass(CURRENT_PAGE_CLASS);\n },\n destroy: function () {\n this.scrollView.unbind(CHANGE, this._changeProxy);\n this.scrollView.unbind(REFRESH, this._refreshProxy);\n this.element.remove();\n }\n });\n kendo.mobile.ui.ScrollViewPager = Pager;\n var TRANSITION_END = 'transitionEnd', DRAG_START = 'dragStart', DRAG_END = 'dragEnd';\n var ElasticPane = kendo.Observable.extend({\n init: function (element, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n this.element = element;\n this.container = element.parent();\n var movable, transition, userEvents, dimensions, dimension, pane;\n movable = new kendo.ui.Movable(that.element);\n transition = new Transition({\n axis: 'x',\n movable: movable,\n onEnd: function () {\n that.trigger(TRANSITION_END);\n }\n });\n userEvents = new kendo.UserEvents(element, {\n fastTap: true,\n start: function (e) {\n if (abs(e.x.velocity) * 2 >= abs(e.y.velocity)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n that.trigger(DRAG_START, e);\n transition.cancel();\n },\n allowSelection: true,\n end: function (e) {\n that.trigger(DRAG_END, e);\n }\n });\n dimensions = new PaneDimensions({\n element: that.element,\n container: that.container\n });\n dimension = dimensions.x;\n dimension.bind(CHANGE, function () {\n that.trigger(CHANGE);\n });\n pane = new Pane({\n dimensions: dimensions,\n userEvents: userEvents,\n movable: movable,\n elastic: true\n });\n $.extend(that, {\n duration: options && options.duration || 1,\n movable: movable,\n transition: transition,\n userEvents: userEvents,\n dimensions: dimensions,\n dimension: dimension,\n pane: pane\n });\n this.bind([\n TRANSITION_END,\n DRAG_START,\n DRAG_END,\n CHANGE\n ], options);\n },\n size: function () {\n return {\n width: this.dimensions.x.getSize(),\n height: this.dimensions.y.getSize()\n };\n },\n total: function () {\n return this.dimension.getTotal();\n },\n offset: function () {\n return -this.movable.x;\n },\n updateDimension: function () {\n this.dimension.update(true);\n },\n refresh: function () {\n this.dimensions.refresh();\n },\n moveTo: function (offset) {\n this.movable.moveAxis('x', -offset);\n },\n transitionTo: function (offset, ease, instant) {\n if (instant) {\n this.moveTo(-offset);\n } else {\n this.transition.moveTo({\n location: offset,\n duration: this.duration,\n ease: ease\n });\n }\n }\n });\n kendo.mobile.ui.ScrollViewElasticPane = ElasticPane;\n var ScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that._getPages();\n this.page = 0;\n this.pageSize = options.pageSize || 1;\n this.contentHeight = options.contentHeight;\n this.enablePager = options.enablePager;\n this.pagerOverlay = options.pagerOverlay;\n },\n scrollTo: function (page, instant) {\n this.page = page;\n this.pane.transitionTo(-page * this.pane.size().width, Transition.easeOutExpo, instant);\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width * that.pageSize, approx = round, ease = bounce ? Transition.easeOutBack : Transition.easeOutExpo, snap, nextPage;\n if (swipeType === LEFT_SWIPE) {\n approx = ceil;\n } else if (swipeType === RIGHT_SWIPE) {\n approx = floor;\n }\n nextPage = approx(pane.offset() / width);\n snap = max(that.minSnap, min(-nextPage * width, that.maxSnap));\n if (nextPage != that.page) {\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n snap = -that.page * pane.size().width;\n }\n }\n pane.transitionTo(snap, ease, instant);\n },\n updatePage: function () {\n var pane = this.pane, page = round(pane.offset() / pane.size().width);\n if (page != this.page) {\n this.page = page;\n return true;\n }\n return false;\n },\n forcePageUpdate: function () {\n return this.updatePage();\n },\n resizeTo: function (size) {\n var pane = this.pane, width = size.width;\n this.pageElements.width(width);\n if (this.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.pagerOverlay && pager.length) {\n containerHeight -= pager.outerHeight(true);\n }\n }\n this.element.css('height', containerHeight);\n this.pageElements.css('height', containerHeight);\n }\n pane.updateDimension();\n if (!this._paged) {\n this.page = floor(pane.offset() / width);\n }\n this.scrollTo(this.page, true);\n this.pageCount = ceil(pane.total() / width);\n this.minSnap = -(this.pageCount - 1) * width;\n this.maxSnap = 0;\n },\n _getPages: function () {\n this.pageElements = this.element.find(kendo.roleSelector('page'));\n this._paged = this.pageElements.length > 0;\n }\n });\n kendo.mobile.ui.ScrollViewContent = ScrollViewContent;\n var VirtualScrollViewContent = kendo.Observable.extend({\n init: function (element, pane, options) {\n var that = this;\n kendo.Observable.fn.init.call(this);\n that.element = element;\n that.pane = pane;\n that.options = options;\n that._templates();\n that.page = options.page || 0;\n that.pages = [];\n that._initPages();\n that.resizeTo(that.pane.size());\n that.pane.dimension.forceEnabled();\n },\n setDataSource: function (dataSource) {\n this.dataSource = DataSource.create(dataSource);\n this._buffer();\n this._pendingPageRefresh = false;\n this._pendingWidgetRefresh = false;\n },\n _viewShow: function () {\n var that = this;\n if (that._pendingWidgetRefresh) {\n setTimeout(function () {\n that._resetPages();\n }, 0);\n that._pendingWidgetRefresh = false;\n }\n },\n _buffer: function () {\n var itemsPerPage = this.options.itemsPerPage;\n if (this.buffer) {\n this.buffer.destroy();\n }\n if (itemsPerPage > 1) {\n this.buffer = new BatchBuffer(this.dataSource, itemsPerPage);\n } else {\n this.buffer = new Buffer(this.dataSource, itemsPerPage * 3);\n }\n this._resizeProxy = proxy(this, '_onResize');\n this._resetProxy = proxy(this, '_onReset');\n this._endReachedProxy = proxy(this, '_onEndReached');\n this.buffer.bind({\n 'resize': this._resizeProxy,\n 'reset': this._resetProxy,\n 'endreached': this._endReachedProxy\n });\n },\n _templates: function () {\n var template = this.options.template, emptyTemplate = this.options.emptyTemplate, templateProxy = {}, emptyTemplateProxy = {};\n if (typeof template === FUNCTION) {\n templateProxy.template = template;\n template = '#=this.template(data)#';\n }\n this.template = proxy(kendo.template(template), templateProxy);\n if (typeof emptyTemplate === FUNCTION) {\n emptyTemplateProxy.emptyTemplate = emptyTemplate;\n emptyTemplate = '#=this.emptyTemplate(data)#';\n }\n this.emptyTemplate = proxy(kendo.template(emptyTemplate), emptyTemplateProxy);\n },\n _initPages: function () {\n var pages = this.pages, element = this.element, page;\n for (var i = 0; i < VIRTUAL_PAGE_COUNT; i++) {\n page = new Page(element);\n pages.push(page);\n }\n this.pane.updateDimension();\n },\n resizeTo: function (size) {\n var pages = this.pages, pane = this.pane;\n for (var i = 0; i < pages.length; i++) {\n pages[i].setWidth(size.width);\n }\n if (this.options.contentHeight === 'auto') {\n this.element.css('height', this.pages[1].element.height());\n } else if (this.options.contentHeight === '100%') {\n var containerHeight = this.element.parent().height();\n if (this.options.enablePager === true) {\n var pager = this.element.parent().find('ol.km-pages');\n if (!this.options.pagerOverlay && pager.length) {\n containerHeight -= pager.outerHeight(true);\n }\n }\n this.element.css('height', containerHeight);\n pages[0].element.css('height', containerHeight);\n pages[1].element.css('height', containerHeight);\n pages[2].element.css('height', containerHeight);\n }\n pane.updateDimension();\n this._repositionPages();\n this.width = size.width;\n },\n scrollTo: function (page) {\n var buffer = this.buffer, dataItem;\n buffer.syncDataSource();\n dataItem = buffer.at(page);\n if (!dataItem) {\n return;\n }\n this._updatePagesContent(page);\n this.page = page;\n },\n paneMoved: function (swipeType, bounce, callback, instant) {\n var that = this, pane = that.pane, width = pane.size().width, offset = pane.offset(), thresholdPassed = Math.abs(offset) >= width / 3, ease = bounce ? kendo.effects.Transition.easeOutBack : kendo.effects.Transition.easeOutExpo, isEndReached = that.page + 2 > that.buffer.total(), nextPage, delta = 0;\n if (swipeType === RIGHT_SWIPE) {\n if (that.page !== 0) {\n delta = -1;\n }\n } else if (swipeType === LEFT_SWIPE && !isEndReached) {\n delta = 1;\n } else if (offset > 0 && (thresholdPassed && !isEndReached)) {\n delta = 1;\n } else if (offset < 0 && thresholdPassed) {\n if (that.page !== 0) {\n delta = -1;\n }\n }\n nextPage = that.page;\n if (delta) {\n nextPage = delta > 0 ? nextPage + 1 : nextPage - 1;\n }\n if (callback && callback({\n currentPage: that.page,\n nextPage: nextPage\n })) {\n delta = 0;\n }\n if (delta === 0) {\n that._cancelMove(ease, instant);\n } else if (delta === -1) {\n that._moveBackward(instant);\n } else if (delta === 1) {\n that._moveForward(instant);\n }\n },\n updatePage: function () {\n var pages = this.pages;\n if (this.pane.offset() === 0) {\n return false;\n }\n if (this.pane.offset() > 0) {\n pages.push(this.pages.shift());\n this.page++;\n this.setPageContent(pages[2], this.page + 1);\n } else {\n pages.unshift(this.pages.pop());\n this.page--;\n this.setPageContent(pages[0], this.page - 1);\n }\n this._repositionPages();\n this._resetMovable();\n return true;\n },\n forcePageUpdate: function () {\n var offset = this.pane.offset(), threshold = this.pane.size().width * 3 / 4;\n if (abs(offset) > threshold) {\n return this.updatePage();\n }\n return false;\n },\n _resetMovable: function () {\n this.pane.moveTo(0);\n },\n _moveForward: function (instant) {\n this.pane.transitionTo(-this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _moveBackward: function (instant) {\n this.pane.transitionTo(this.width, kendo.effects.Transition.easeOutExpo, instant);\n },\n _cancelMove: function (ease, instant) {\n this.pane.transitionTo(0, ease, instant);\n },\n _resetPages: function () {\n this.page = this.options.page || 0;\n this._updatePagesContent(this.page);\n this._repositionPages();\n this.trigger('reset');\n },\n _onResize: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n if (this._pendingPageRefresh) {\n this._updatePagesContent(this.page);\n this._pendingPageRefresh = false;\n }\n this.trigger('resize');\n },\n _onReset: function () {\n this.pageCount = ceil(this.dataSource.total() / this.options.itemsPerPage);\n this._resetPages();\n },\n _onEndReached: function () {\n this._pendingPageRefresh = true;\n },\n _repositionPages: function () {\n var pages = this.pages;\n pages[0].position(LEFT_PAGE);\n pages[1].position(CETER_PAGE);\n pages[2].position(RIGHT_PAGE);\n },\n _updatePagesContent: function (offset) {\n var pages = this.pages, currentPage = offset || 0;\n this.setPageContent(pages[0], currentPage - 1);\n this.setPageContent(pages[1], currentPage);\n this.setPageContent(pages[2], currentPage + 1);\n },\n setPageContent: function (page, index) {\n var buffer = this.buffer, template = this.template, emptyTemplate = this.emptyTemplate, view = null;\n if (index >= 0) {\n view = buffer.at(index);\n if ($.isArray(view) && !view.length) {\n view = null;\n }\n }\n this.trigger(CLEANUP, { item: page.element });\n if (view !== null) {\n page.content(template(view));\n } else {\n page.content(emptyTemplate({}));\n }\n kendo.mobile.init(page.element);\n this.trigger(ITEM_CHANGE, {\n item: page.element,\n data: view,\n ns: kendo.mobile.ui\n });\n }\n });\n kendo.mobile.ui.VirtualScrollViewContent = VirtualScrollViewContent;\n var Page = kendo.Class.extend({\n init: function (container) {\n this.element = $('
      ');\n this.width = container.width();\n this.element.width(this.width);\n container.append(this.element);\n },\n content: function (theContent) {\n this.element.html(theContent);\n },\n position: function (position) {\n this.element.css('transform', 'translate3d(' + this.width * position + 'px, 0, 0)');\n },\n setWidth: function (width) {\n this.width = width;\n this.element.width(width);\n }\n });\n kendo.mobile.ui.VirtualPage = Page;\n var ScrollView = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element;\n kendo.stripWhitespace(element[0]);\n element.wrapInner('
      ').addClass('km-scrollview');\n if (this.options.enablePager) {\n this.pager = new Pager(this);\n if (this.options.pagerOverlay) {\n element.addClass('km-scrollview-overlay');\n }\n }\n that.inner = element.children().first();\n that.page = 0;\n that.inner.css('height', options.contentHeight);\n that.pane = new ElasticPane(that.inner, {\n duration: this.options.duration,\n transitionEnd: proxy(this, '_transitionEnd'),\n dragStart: proxy(this, '_dragStart'),\n dragEnd: proxy(this, '_dragEnd'),\n change: proxy(this, REFRESH)\n });\n that.bind('resize', function () {\n that.pane.refresh();\n });\n that.page = options.page;\n var empty = this.inner.children().length === 0;\n var content = empty ? new VirtualScrollViewContent(that.inner, that.pane, options) : new ScrollViewContent(that.inner, that.pane, options);\n content.page = that.page;\n content.bind('reset', function () {\n this._pendingPageRefresh = false;\n that._syncWithContent();\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind('resize', function () {\n that.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n });\n content.bind(ITEM_CHANGE, function (e) {\n that.trigger(ITEM_CHANGE, e);\n that.angular('compile', function () {\n return {\n elements: e.item,\n data: [{ dataItem: e.data }]\n };\n });\n });\n content.bind(CLEANUP, function (e) {\n that.angular('cleanup', function () {\n return { elements: e.item };\n });\n });\n that._content = content;\n that.setDataSource(options.dataSource);\n var mobileContainer = that.container();\n if (mobileContainer.nullObject) {\n that.viewInit();\n that.viewShow();\n } else {\n mobileContainer.bind('show', proxy(this, 'viewShow')).bind('init', proxy(this, 'viewInit'));\n }\n },\n options: {\n name: 'ScrollView',\n page: 0,\n duration: 400,\n velocityThreshold: 0.8,\n contentHeight: 'auto',\n pageSize: 1,\n itemsPerPage: 1,\n bounceVelocityThreshold: 1.6,\n enablePager: true,\n pagerOverlay: false,\n autoBind: true,\n template: '',\n emptyTemplate: ''\n },\n events: [\n CHANGING,\n CHANGE,\n REFRESH\n ],\n destroy: function () {\n Widget.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n viewInit: function () {\n if (this.options.autoBind) {\n this._content.scrollTo(this._content.page, true);\n }\n },\n viewShow: function () {\n this.pane.refresh();\n },\n refresh: function () {\n var content = this._content;\n content.resizeTo(this.pane.size());\n this.page = content.page;\n this.trigger(REFRESH, {\n pageCount: content.pageCount,\n page: content.page\n });\n },\n content: function (html) {\n this.element.children().first().html(html);\n this._content._getPages();\n this.pane.refresh();\n },\n value: function (item) {\n var dataSource = this.dataSource;\n if (item) {\n this.scrollTo(dataSource.indexOf(item), true);\n } else {\n return dataSource.at(this.page);\n }\n },\n scrollTo: function (page, instant) {\n this._content.scrollTo(page, instant);\n this._syncWithContent();\n },\n prev: function () {\n var that = this, prevPage = that.page - 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(RIGHT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (prevPage > -1) {\n that.scrollTo(prevPage);\n }\n },\n next: function () {\n var that = this, nextPage = that.page + 1;\n if (that._content instanceof VirtualScrollViewContent) {\n that._content.paneMoved(LEFT_SWIPE, undefined, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n } else if (nextPage < that._content.pageCount) {\n that.scrollTo(nextPage);\n }\n },\n setDataSource: function (dataSource) {\n if (!(this._content instanceof VirtualScrollViewContent)) {\n return;\n }\n var emptyDataSource = !dataSource;\n this.dataSource = DataSource.create(dataSource);\n this._content.setDataSource(this.dataSource);\n if (this.options.autoBind && !emptyDataSource) {\n this.dataSource.fetch();\n }\n },\n items: function () {\n return this.element.find('.' + VIRTUAL_PAGE_CLASS);\n },\n _syncWithContent: function () {\n var pages = this._content.pages, buffer = this._content.buffer, data, element;\n this.page = this._content.page;\n data = buffer ? buffer.at(this.page) : undefined;\n if (!(data instanceof Array)) {\n data = [data];\n }\n element = pages ? pages[1].element : undefined;\n this.trigger(CHANGE, {\n page: this.page,\n element: element,\n data: data\n });\n },\n _dragStart: function () {\n if (this._content.forcePageUpdate()) {\n this._syncWithContent();\n }\n },\n _dragEnd: function (e) {\n var that = this, velocity = e.x.velocity, velocityThreshold = this.options.velocityThreshold, swipeType = NUDGE, bounce = abs(velocity) > this.options.bounceVelocityThreshold;\n if (velocity > velocityThreshold) {\n swipeType = RIGHT_SWIPE;\n } else if (velocity < -velocityThreshold) {\n swipeType = LEFT_SWIPE;\n }\n this._content.paneMoved(swipeType, bounce, function (eventData) {\n return that.trigger(CHANGING, eventData);\n });\n },\n _transitionEnd: function () {\n if (this._content.updatePage()) {\n this._syncWithContent();\n }\n }\n });\n ui.plugin(ScrollView);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.switch', [\n 'kendo.fx',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.switch',\n name: 'Switch',\n category: 'mobile',\n description: 'The mobile Switch widget is used to display two exclusive choices.',\n depends: [\n 'fx',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, support = kendo.support, CHANGE = 'change', SWITCHON = 'km-switch-on', SWITCHOFF = 'km-switch-off', MARGINLEFT = 'margin-left', ACTIVE_STATE = 'km-state-active', DISABLED_STATE = 'km-state-disabled', DISABLED = 'disabled', TRANSFORMSTYLE = support.transitions.css + 'transform', proxy = $.proxy;\n function limitValue(value, minLimit, maxLimit) {\n return Math.max(minLimit, Math.min(maxLimit, value));\n }\n var SWITCH_MARKUP = ' {0} {1} ';\n var Switch = Widget.extend({\n init: function (element, options) {\n var that = this, checked;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n that.wrapper = $(kendo.format(SWITCH_MARKUP, options.onLabel, options.offLabel));\n that.handle = that.wrapper.find('.km-switch-handle');\n that.background = that.wrapper.find('.km-switch-background');\n that.wrapper.insertBefore(that.element).prepend(that.element);\n that._drag();\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n that.constrain = 0;\n that.snapPoint = 0;\n element = that.element[0];\n element.type = 'checkbox';\n that._animateBackground = true;\n checked = that.options.checked;\n if (checked === null) {\n checked = element.checked;\n }\n that.check(checked);\n that.options.enable = that.options.enable && !that.element.attr(DISABLED);\n that.enable(that.options.enable);\n that.refresh();\n kendo.notify(that, kendo.mobile.ui);\n },\n refresh: function () {\n var that = this, handleWidth = that.handle.outerWidth(true);\n that.width = that.wrapper.width();\n that.constrain = that.width - handleWidth;\n that.snapPoint = that.constrain / 2;\n if (typeof that.origin != 'number') {\n that.origin = parseInt(that.background.css(MARGINLEFT), 10);\n }\n that.background.data('origin', that.origin);\n that.check(that.element[0].checked);\n },\n events: [CHANGE],\n options: {\n name: 'Switch',\n onLabel: 'on',\n offLabel: 'off',\n checked: null,\n enable: true\n },\n check: function (check) {\n var that = this, element = that.element[0];\n if (check === undefined) {\n return element.checked;\n }\n that._position(check ? that.constrain : 0);\n element.checked = check;\n that.wrapper.toggleClass(SWITCHON, check).toggleClass(SWITCHOFF, !check);\n },\n value: function () {\n return this.check.apply(this, arguments);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.userEvents.destroy();\n },\n toggle: function () {\n var that = this;\n that.check(!that.element[0].checked);\n },\n enable: function (enable) {\n var element = this.element, wrapper = this.wrapper;\n if (typeof enable == 'undefined') {\n enable = true;\n }\n this.options.enable = enable;\n if (enable) {\n element.removeAttr(DISABLED);\n } else {\n element.attr(DISABLED, DISABLED);\n }\n wrapper.toggleClass(DISABLED_STATE, !enable);\n },\n _resize: function () {\n this.refresh();\n },\n _move: function (e) {\n var that = this;\n e.preventDefault();\n that._position(limitValue(that.position + e.x.delta, 0, that.width - that.handle.outerWidth(true)));\n },\n _position: function (position) {\n var that = this;\n that.position = position;\n that.handle.css(TRANSFORMSTYLE, 'translatex(' + position + 'px)');\n if (that._animateBackground) {\n that.background.css(MARGINLEFT, that.origin + position);\n }\n },\n _start: function () {\n if (!this.options.enable) {\n this.userEvents.cancel();\n } else {\n this.userEvents.capture();\n this.handle.addClass(ACTIVE_STATE);\n }\n },\n _stop: function () {\n var that = this;\n that.handle.removeClass(ACTIVE_STATE);\n that._toggle(that.position > that.snapPoint);\n },\n _toggle: function (checked) {\n var that = this, handle = that.handle, element = that.element[0], value = element.checked, duration = kendo.mobile.application && kendo.mobile.application.os.wp ? 100 : 200, distance;\n that.wrapper.toggleClass(SWITCHON, checked).toggleClass(SWITCHOFF, !checked);\n that.position = distance = checked * that.constrain;\n if (that._animateBackground) {\n that.background.kendoStop(true, true).kendoAnimate({\n effects: 'slideMargin',\n offset: distance,\n reset: true,\n reverse: !checked,\n axis: 'left',\n duration: duration\n });\n }\n handle.kendoStop(true, true).kendoAnimate({\n effects: 'slideTo',\n duration: duration,\n offset: distance + 'px,0',\n reset: true,\n complete: function () {\n if (value !== checked) {\n element.checked = checked;\n that.trigger(CHANGE, { checked: checked });\n }\n }\n });\n },\n _drag: function () {\n var that = this;\n that.userEvents = new kendo.UserEvents(that.wrapper, {\n fastTap: true,\n tap: function () {\n if (that.options.enable) {\n that._toggle(!that.element[0].checked);\n }\n },\n start: proxy(that._start, that),\n move: proxy(that._move, that),\n end: proxy(that._stop, that)\n });\n }\n });\n ui.plugin(Switch);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.tabstrip', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.tabstrip',\n name: 'TabStrip',\n category: 'mobile',\n description: 'The mobile TabStrip widget is used inside a mobile view or layout footer element to display an application-wide group of navigation buttons.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.mobile.ui, Widget = ui.Widget, ACTIVE_STATE_CLASS = 'km-state-active', SELECT = 'select';\n function createBadge(value) {\n return $('' + value + '');\n }\n var TabStrip = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.container().bind('show', $.proxy(this, 'refresh'));\n that.element.addClass('km-tabstrip').find('a').each(that._buildButton).eq(that.options.selectedIndex).addClass(ACTIVE_STATE_CLASS);\n that.element.on('down', 'a', '_release');\n },\n events: [SELECT],\n switchTo: function (url) {\n var tabs = this.element.find('a'), tab, path, idx = 0, length = tabs.length;\n if (isNaN(url)) {\n for (; idx < length; idx++) {\n tab = tabs[idx];\n path = tab.href.replace(/(\\#.+)(\\?.+)$/, '$1');\n if (path.indexOf(url, path.length - url.length) !== -1) {\n this._setActiveItem($(tab));\n return true;\n }\n }\n } else {\n this._setActiveItem(tabs.eq(url));\n return true;\n }\n return false;\n },\n switchByFullUrl: function (url) {\n var tab;\n tab = this.element.find('a[href$=\\'' + url + '\\']');\n this._setActiveItem(tab);\n },\n clear: function () {\n this.currentItem().removeClass(ACTIVE_STATE_CLASS);\n },\n currentItem: function () {\n return this.element.children('.' + ACTIVE_STATE_CLASS);\n },\n badge: function (item, value) {\n var tabstrip = this.element, badge;\n if (!isNaN(item)) {\n item = tabstrip.children().get(item);\n }\n item = tabstrip.find(item);\n badge = $(item.find('.km-badge')[0] || createBadge(value).insertAfter(item.children('.km-icon')));\n if (value || value === 0) {\n badge.html(value);\n return this;\n }\n if (value === false) {\n badge.empty().remove();\n return this;\n }\n return badge.html();\n },\n _release: function (e) {\n if (e.which > 1) {\n return;\n }\n var that = this, item = $(e.currentTarget);\n if (item[0] === that.currentItem()[0]) {\n return;\n }\n if (that.trigger(SELECT, { item: item })) {\n e.preventDefault();\n } else {\n that._setActiveItem(item);\n }\n },\n _setActiveItem: function (item) {\n if (!item[0]) {\n return;\n }\n this.clear();\n item.addClass(ACTIVE_STATE_CLASS);\n },\n _buildButton: function () {\n var button = $(this), icon = kendo.attrValue(button, 'icon'), badge = kendo.attrValue(button, 'badge'), image = button.find('img'), iconSpan = $('');\n button.addClass('km-button').attr(kendo.attr('role'), 'tab').contents().not(image).wrapAll('');\n if (image[0]) {\n image.addClass('km-image').prependTo(button);\n } else {\n button.prepend(iconSpan);\n if (icon) {\n iconSpan.addClass('km-' + icon);\n if (badge || badge === 0) {\n createBadge(badge).insertAfter(iconSpan);\n }\n }\n }\n },\n refresh: function (e) {\n var url = e.view.id;\n if (url && !this.switchTo(e.view.id)) {\n this.switchTo(url);\n }\n },\n options: {\n name: 'TabStrip',\n selectedIndex: 0,\n enable: true\n }\n });\n ui.plugin(TabStrip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PanelBar: '$PLAIN',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n ngModel.$render = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n setTimeout(function () {\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n var haveChangeOnElement = false;\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('form');\n var ngForm = scope[form.attr('name')];\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n widget.first('change', function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n });\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n if (widget.element) {\n widget = kendoWidgetInstance(widget.element);\n if (widget) {\n widget.destroy();\n }\n }\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n var that = this;\n that.template = function (key, value) {\n $attrs[key] = kendo.stringify(value);\n };\n $scope.$on('$destroy', function () {\n that.template = null;\n that = null;\n });\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.AutoComplete', '$angular_getLogicValue', function () {\n var options = this.self.options;\n var values = this.self.value().split(options.separator);\n var valuePrimitive = options.valuePrimitive;\n var data = this.self.dataSource.data();\n var dataItems = [];\n for (var idx = 0, length = data.length; idx < length; idx++) {\n var item = data[idx];\n var dataValue = options.dataTextField ? item[options.dataTextField] : item;\n for (var j = 0; j < values.length; j++) {\n if (dataValue === values[j]) {\n if (valuePrimitive) {\n dataItems.push(dataValue);\n } else {\n dataItems.push(item.toJSON());\n }\n break;\n }\n }\n }\n return dataItems;\n });\n defadvice('ui.AutoComplete', '$angular_setLogicValue', function (value) {\n if (value == null) {\n value = [];\n }\n var self = this.self, dataTextField = self.options.dataTextField;\n if (dataTextField && !self.options.valuePrimitive) {\n if (value.length !== undefined) {\n value = $.map(value, function (item) {\n return item[dataTextField];\n });\n } else {\n value = value[dataTextField];\n }\n }\n self.value(value);\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
      ' + element.html() + '
      ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n $element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.webcomponents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'webcomponents',\n name: 'Web Components',\n category: 'framework',\n description: 'Adds Kendo UI custom elements for Web Components',\n depends: ['core']\n };\n (function ($, angular, undefined) {\n if (!kendo.support.customElements || kendo.webComponents.length) {\n return;\n }\n if (angular && (angular.version.major == 1 || angular.injector)) {\n return;\n }\n var TAGNAMES = {\n editor: 'textarea',\n numerictextbox: 'input',\n datepicker: 'input',\n datetimepicker: 'input',\n timepicker: 'input',\n autocomplete: 'input',\n colorpicker: 'input',\n maskedtextbox: 'input',\n dropdownlist: 'select',\n multiselect: 'select',\n upload: 'input',\n validator: 'form',\n button: 'button',\n mobilebutton: 'a',\n mobilebackbutton: 'a',\n mobiledetailbutton: 'a',\n listview: 'ul',\n mobilelistview: 'ul',\n treeview: 'ul',\n menu: 'ul',\n contextmenu: 'ul',\n actionsheet: 'ul'\n };\n var EVENT_PREFIX = 'on-';\n var registered = [];\n kendo.onWidgetRegistered(function (entry) {\n var elementName = entry.prefix + entry.widget.prototype.options.name.toLowerCase();\n if (registered.indexOf(elementName) === -1) {\n registered.push(elementName);\n registerElement(elementName, entry.widget);\n }\n });\n var jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/;\n var jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]*\\]$/;\n var numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/;\n function parseOption(element, option) {\n var value = element.getAttribute(option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value)) {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {};\n Object.keys(options).concat('dataSource').forEach(function (name) {\n if (element.hasAttribute(kendo.toHyphens(name))) {\n result[name] = parseOption(element, kendo.toHyphens(name));\n }\n });\n return result;\n }\n function cloneEvent(e) {\n var result = {};\n Object.keys(e).forEach(function (key) {\n if (key[0] != '_') {\n result[key] = e[key];\n }\n });\n return result;\n }\n function eventHandler(eventName, e) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, false, true, cloneEvent(e));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n e.preventDefault();\n }\n }\n function expose(component, obj) {\n var props = Object.keys(obj);\n for (var idx = 0; idx <= props.length; idx++) {\n if (typeof obj[props[idx]] === 'function') {\n if (!component[props[idx]]) {\n component[props[idx]] = obj[props[idx]].bind(component.widget);\n }\n } else {\n if (props[idx] === 'options') {\n continue;\n }\n component[props[idx]] = component[props[idx]] || obj[props[idx]];\n }\n }\n }\n function registerElement(name, widget) {\n var options = widget.prototype.options;\n var prototype = Object.create(HTMLElement.prototype);\n Object.defineProperty(prototype, 'options', {\n get: function () {\n return this.widget.options;\n },\n set: function (options) {\n var instance = this.widget;\n options = $.extend(true, {}, instance.options, options);\n var _wrapper = $(instance.wrapper)[0];\n var _element = $(instance.element)[0];\n instance._destroy();\n var newElement = document.createElement(TAGNAMES[name] || 'div');\n if (_wrapper && _element) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n $(_element).replaceWith(newElement);\n }\n if (instance.value) {\n options.value = instance.value();\n }\n instance.init(newElement, options);\n this.bindEvents();\n }\n });\n prototype.bindEvents = function () {\n widget.prototype.events.forEach(function (eventName) {\n this.widget.bind(eventName, eventHandler.bind(this, eventName));\n if (this.hasAttribute(EVENT_PREFIX + eventName)) {\n this.bind(eventName, function (e) {\n window[this.getAttribute(EVENT_PREFIX + eventName)].call(this, e);\n }.bind(this));\n }\n }.bind(this));\n };\n prototype.attachedCallback = function () {\n var that = this;\n var element = document.createElement(TAGNAMES[name] || 'div');\n $(element).append(that.childNodes);\n $(element).attr('class', $(that).attr('class'));\n $(element).attr('style', $(that).attr('style'));\n that.appendChild(element);\n that.widget = new widget(element, parseOptions(that, options));\n var obj = that.widget;\n do {\n expose(that, obj);\n } while (obj = Object.getPrototypeOf(obj));\n this.bindEvents();\n };\n prototype.detachedCallback = function () {\n kendo.destroy(this.element);\n };\n kendo.webComponents.push('kendo-' + name);\n document.registerElement('kendo-' + name, { prototype: prototype });\n }\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular2', [\n 'kendo.core',\n 'kendo.webcomponents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'angular2',\n name: 'Angular 2',\n category: 'framework',\n description: 'Supports angular2 value accessors',\n depends: ['core']\n };\n (function (kendo, System) {\n if (!System || !System.register) {\n return;\n }\n var __decorate = this && this.__decorate || function (decorators, target, key, desc) {\n if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function') {\n return Reflect.decorate(decorators, target, key, desc);\n }\n switch (arguments.length) {\n case 2:\n return decorators.reduceRight(function (o, d) {\n return d && d(o) || o;\n }, target);\n case 3:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key), void 0;\n }, void 0);\n case 4:\n return decorators.reduceRight(function (o, d) {\n return d && d(target, key, o) || o;\n }, desc);\n }\n };\n var __metadata = this && this.__metadata || function (k, v) {\n if (typeof Reflect === 'object' && typeof Reflect.metadata === 'function') {\n return Reflect.metadata(k, v);\n }\n };\n System.register('kendo/angular2', ['angular2/angular2'], function (exports_1) {\n var angular2_1;\n var KendoValueAccessor;\n return {\n setters: [function (_angular2_1) {\n angular2_1 = _angular2_1;\n }],\n execute: function () {\n KendoValueAccessor = function () {\n function KendoValueAccessor(cd, elementRef) {\n var _this = this;\n this.elementRef = elementRef;\n this.onChange = function (_) {\n };\n this.onTouched = function () {\n };\n this.element = elementRef.nativeElement;\n this.element.addEventListener('change', function () {\n _this.onChange(_this.element.value());\n });\n this.element.addEventListener('spin', function () {\n _this.onChange(_this.element.value());\n });\n cd.valueAccessor = this;\n this.cd = cd;\n cd.valueAccessor = this;\n }\n KendoValueAccessor.prototype.writeValue = function (value) {\n this.element.value(value);\n };\n KendoValueAccessor.prototype.registerOnChange = function (fn) {\n this.onChange = fn;\n };\n KendoValueAccessor.prototype.registerOnTouched = function (fn) {\n this.onTouched = fn;\n };\n KendoValueAccessor = __decorate([\n angular2_1.Directive({ selector: kendo.webComponents.join(',') }),\n __metadata('design:paramtypes', [\n angular2_1.NgControl,\n angular2_1.ElementRef\n ])\n ], KendoValueAccessor);\n return KendoValueAccessor;\n }();\n exports_1('KendoValueAccessor', KendoValueAccessor);\n }\n };\n });\n }(window.kendo, window.System));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.validator',\n 'kendo.router',\n 'kendo.view',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.popup',\n 'kendo.touch',\n 'kendo.mobile.popover',\n 'kendo.mobile.loader',\n 'kendo.mobile.scroller',\n 'kendo.mobile.shim',\n 'kendo.mobile.view',\n 'kendo.mobile.modalview',\n 'kendo.mobile.drawer',\n 'kendo.mobile.splitview',\n 'kendo.mobile.pane',\n 'kendo.mobile.application',\n 'kendo.mobile.actionsheet',\n 'kendo.mobile.button',\n 'kendo.mobile.buttongroup',\n 'kendo.mobile.collapsible',\n 'kendo.mobile.listview',\n 'kendo.mobile.navbar',\n 'kendo.mobile.scrollview',\n 'kendo.mobile.switch',\n 'kendo.mobile.tabstrip',\n 'kendo.angular',\n 'kendo.webcomponents',\n 'kendo.angular2'\n ], f);\n}(function () {\n 'bundle all';\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}