{"version":3,"sources":["kendo.list.js"],"names":["f","define","$","undefined","unifyType","value","type","toLowerCase","last","list","length","getSelectedOption","select","index","selectedIndex","options","mapChangedItems","selected","itemsToMatch","dataItem","found","i","j","itemsLength","selectedLength","changed","unchanged","push","item","isValidFilterExpr","expression","isEmptyObject","filters","removeFiltersForField","field","grep","filter","STATIC_LIST_NS","StaticList","kendo","window","ui","outerHeight","_outerHeight","percentageUnitsRegex","Widget","keys","support","htmlEncode","activeElement","_activeElement","outerWidth","_outerWidth","ObservableArray","data","ID","CHANGE","FOCUSED","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","OPEN","CLOSE","CASCADE","SELECT","SELECTED","REQUESTSTART","REQUESTEND","BLUR","FOCUS","FOCUSOUT","extend","proxy","isArray","browser","HIDDENCLASS","WIDTH","isIE","msie","isIE8","version","quotRegExp","alternativeNames","ComboBox","DropDownList","MultiColumnComboBox","List","DataBoundWidget","init","element","id","that","this","ns","fn","call","_isSelect","is","dataSource","dataTextField","dataValueField","ul","attr","tabIndex","aria-hidden","append","on","_listMousedown","guid","columns","removeClass","addClass","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","valuePrimitive","footerTemplate","headerTemplate","noDataTemplate","messages","noData","clear","setOptions","enable","enabled","_renderFooter","_renderNoData","focus","_focused","readonly","_editable","disable","header","template","_angularElement","destroy","remove","prepend","colGroup","row","idx","currentColumn","title","columnsHeaderTemplate","currentWidth","currentWidthInt","widthStyle","columnsHeader","width","parseInt","isNaN","test","angular","elements","appendTo","footer","_listOptions","currentOptions","virtual","changeEventOption","change","_listChange","listBoundHandler","_listBound","autoBind","selectable","click","_click","activate","_activateItem","deactivate","_deactivateItem","dataBinding","trigger","dataBound","height","groupTemplate","fixedGroupTemplate","expr","$angular","_initList","listOptions","selectedItemChange","listView","VirtualList","bind","_setListValue","done","_updateSelectionState","noop","e","filterInput","target","preventDefault","_isFilterEnabled","_hideClear","_clear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","_filter","word","open","highlightFirst","_change","text","_clearFilter","bound","_filterSource","force","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","logic","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","concat","_cascading","setDSFilter","page","pageSize","sort","group","aggregate","_mergeState","filtersToRemove","splice","action","children","html","instance","_toggleNoData","show","toggle","_toggleHeader","groupHeader","content","prev","_allowOpening","flatView","val","_old","_ignoreCase","model","reader","fields","ignoreCase","_focus","candidate","widgetOptions","fromFilter","_buildExpression","_open","accentFoldingFiltering","toLocaleLowerCase","operator","_clearButton","clearTitle","role","clearButton","search","_inputValue","clearTimeout","_typingTimeout","minLength","_state","_emptySearch","trim","_searchByWord","current","items","_unbindDataSource","off","popup","_form","_resetHandler","selectedDataItems","getByUid","add","removeAttr","getter","textField","valueField","_text","_value","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","label","_blur","close","_userTriggered","optionValue","_oldText","_valueBeforeCascade","_oldIndex","isFiltered","_typing","typing","_data","view","_enable","disabled","_dataValue","_offsetHeight","offsetHeight","siblings","prevAll","each","_height","offsetTop","popups","footerHeight","visible","parent","hide","scrollHeight","_openHandler","_adjustListWidth","computedStyle","computedWidth","style","wrapper","getComputedStyle","parseFloat","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","css","fontFamily","autoWidth","minWidth","whiteSpace","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","li","padding","direction","display","scrollbar","parents","_calculatePopupHeight","_calculateColumnsHeaderPadding","isRtl","_refreshScroll","enableYScroll","overflowX","overflowY","_resizePopup","one","_popup","Popup","anchor","animation","autosize","_makeUnselectable","find","not","_toggleHover","currentTarget","toggleClass","_toggle","preventFocus","touchEnabled","mobileOS","touch","MSPointers","pointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","unbind","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","hasValue","Array","valueMapper","Error","inArray","node","parentNode","Select","_initial","setDataSource","_dataSource","_initialIndex","_current","fetch","_parentWidget","_cascadeSelect","_select","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","isDefaultPrevented","_request","setTimeout","_requestEnd","DataSource","create","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_getNormalizedDataItem","isIndex","hasOptionLabel","optionLabel","getElementIndex","dataItemByIndex","_getNormalizedSelectCandidate","normalizedCandidate","_move","pressed","moveIndex","selectCandidate","activeFilter","selection","shouldTrigger","key","keyCode","down","DOWN","isVirtual","UP","altKey","firstChild","_fetch","hasClass","total","_get","ENTER","TAB","input","_focusElement","focusout","ESC","PAGEDOWN","PAGEUP","scrollWith","screenHeight","_fetchData","hasItems","cascadeFrom","_options","option","dataText","dataValue","htmlElement","indexOf","replace","setAttribute","_reset","formId","form","closest","parentElement","name","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","first","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","expressions","handler","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","shift","_touchHandlers","wrap","before","_optionID","_selectedIndices","_view","_dataItems","_values","slice","_getter","_templates","_onScroll","_scrollId","_renderHeader","events","source","_refreshHandler","refresh","_fixedHeader","startY","endY","tapPosition","event","originalEvent","changedTouches","pageY","Math","abs","_touchTriggered","_triggerClick","get","skip","_render","clientHeight","scroll","scrollTop","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","dataItems","_getValues","_valueGetter","map","next","hasCandidate","focusIndex","skipUpdate","_skipUpdate","indices","result","deferred","filtered","singleSelection","selectedIndices","uiSelectedIndices","added","Deferred","resolve","_deselectFiltered","_deselect","_valueComparer","removeAt","position","setValue","_valueDeferred","state","_valueIndices","_valueExpr","values","body","comparer","normalized","_valueType","Function","_dataItemPosition","valueExpr","removedIndices","_template","useWithBlock","templateText","templates","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","itemIndex","floor","lastChild","forward","nextSibling","previousSibling","isGrouped","visibleItem","_renderItem","context","notFirstItem","hasColumns","newGroup","isLastGroupedItem","_renderColumns","dataContext","_selected","innerHTML","_lastDSFilter","Query","compareFilters","skipUpdateOnBind","isItemChange","_angularItems","_bound","plugin","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.list.min.js","sourcesContent":["/*!\n * Copyright 2020 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n(function (f, define) {\n    define('kendo.list', [\n        'kendo.data',\n        'kendo.popup'\n    ], f);\n}(function () {\n    var __meta__ = {\n        id: 'list',\n        name: 'List',\n        category: 'framework',\n        depends: [\n            'data',\n            'popup'\n        ],\n        hidden: true\n    };\n    (function ($, undefined) {\n        var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n                'ComboBox': [\n                    'DropDownList',\n                    'MultiColumnComboBox'\n                ],\n                'DropDownList': [\n                    'ComboBox',\n                    'MultiColumnComboBox'\n                ],\n                'MultiColumnComboBox': [\n                    'ComboBox',\n                    'DropDownList'\n                ]\n            };\n        var List = kendo.ui.DataBoundWidget.extend({\n            init: function (element, options) {\n                var that = this, ns = that.ns, id;\n                Widget.fn.init.call(that, element, options);\n                element = that.element;\n                options = that.options;\n                that._isSelect = element.is(SELECT);\n                if (that._isSelect && that.element[0].length) {\n                    if (!options.dataSource) {\n                        options.dataTextField = options.dataTextField || 'text';\n                        options.dataValueField = options.dataValueField || 'value';\n                    }\n                }\n                that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({\n                    tabIndex: -1,\n                    'aria-hidden': true\n                });\n                that.list = $('<div class=\\'k-list-container\\'/>').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n                id = element.attr(ID);\n                if (!id) {\n                    id = kendo.guid();\n                }\n                that.list.attr(ID, id + '-list');\n                that.ul.attr(ID, id + '_listbox');\n                if (options.columns && options.columns.length) {\n                    that.ul.removeClass('k-list').addClass('k-grid-list');\n                    that._columnsHeader();\n                }\n                that._header();\n                that._noData();\n                that._footer();\n                that._accessors();\n                that._initValue();\n            },\n            options: {\n                valuePrimitive: false,\n                footerTemplate: '',\n                headerTemplate: '',\n                noDataTemplate: true,\n                messages: {\n                    'noData': 'No data found.',\n                    'clear': 'clear'\n                }\n            },\n            setOptions: function (options) {\n                Widget.fn.setOptions.call(this, options);\n                if (options && options.enable !== undefined) {\n                    options.enabled = options.enable;\n                }\n                if (options.columns && options.columns.length) {\n                    this._columnsHeader();\n                }\n                this._header();\n                this._noData();\n                this._footer();\n                this._renderFooter();\n                this._renderNoData();\n            },\n            focus: function () {\n                this._focused.focus();\n            },\n            readonly: function (readonly) {\n                this._editable({\n                    readonly: readonly === undefined ? true : readonly,\n                    disable: false\n                });\n            },\n            enable: function (enable) {\n                this._editable({\n                    readonly: false,\n                    disable: !(enable = enable === undefined ? true : enable)\n                });\n            },\n            _header: function () {\n                var list = this;\n                var header = $(list.header);\n                var template = list.options.headerTemplate;\n                this._angularElement(header, 'cleanup');\n                kendo.destroy(header);\n                header.remove();\n                if (!template) {\n                    list.header = null;\n                    return;\n                }\n                var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n                header = $(headerTemplate({}));\n                list.header = header[0] ? header : null;\n                list.list.prepend(header);\n                this._angularElement(list.header, 'compile');\n            },\n            _columnsHeader: function () {\n                var list = this;\n                var columnsHeader = $(list.columnsHeader);\n                this._angularElement(columnsHeader, 'cleanup');\n                kendo.destroy(columnsHeader);\n                columnsHeader.remove();\n                var header = '<div class=\\'k-grid-header\\'><div class=\\'k-grid-header-wrap\\'><table role=\\'presentation\\'>';\n                var colGroup = '<colgroup>';\n                var row = '<tr>';\n                for (var idx = 0; idx < this.options.columns.length; idx++) {\n                    var currentColumn = this.options.columns[idx];\n                    var title = currentColumn.title || currentColumn.field || '';\n                    var template = currentColumn.headerTemplate || title;\n                    var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n                    var currentWidth = currentColumn.width;\n                    var currentWidthInt = parseInt(currentWidth, 10);\n                    var widthStyle = '';\n                    if (currentWidth && !isNaN(currentWidthInt)) {\n                        widthStyle += 'style=\\'width:';\n                        widthStyle += currentWidthInt;\n                        widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n                        widthStyle += ';\\'';\n                    }\n                    colGroup += '<col ' + widthStyle + '/>';\n                    row += '<th class=\\'k-header\\'>';\n                    row += columnsHeaderTemplate(currentColumn);\n                    row += '</th>';\n                }\n                colGroup += '</colgroup>';\n                row += '</tr>';\n                header += colGroup;\n                header += row;\n                header += '</table></div></div>';\n                list.columnsHeader = columnsHeader = $(header);\n                list.list.prepend(columnsHeader);\n                this._angularElement(list.columnsHeader, 'compile');\n            },\n            _noData: function () {\n                var list = this;\n                var noData = $(list.noData);\n                var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n                list.angular('cleanup', function () {\n                    return { elements: noData };\n                });\n                kendo.destroy(noData);\n                noData.remove();\n                if (!template) {\n                    list.noData = null;\n                    return;\n                }\n                list.noData = $('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(list.list);\n                list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n            },\n            _footer: function () {\n                var list = this;\n                var footer = $(list.footer);\n                var template = list.options.footerTemplate;\n                this._angularElement(footer, 'cleanup');\n                kendo.destroy(footer);\n                footer.remove();\n                if (!template) {\n                    list.footer = null;\n                    return;\n                }\n                list.footer = $('<div class=\"k-footer\"></div>').appendTo(list.list);\n                list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n            },\n            _listOptions: function (options) {\n                var that = this;\n                var currentOptions = that.options;\n                var virtual = currentOptions.virtual;\n                var changeEventOption = { change: proxy(that._listChange, that) };\n                var listBoundHandler = proxy(that._listBound, that);\n                virtual = typeof virtual === 'object' ? virtual : {};\n                options = $.extend({\n                    autoBind: false,\n                    selectable: true,\n                    dataSource: that.dataSource,\n                    click: proxy(that._click, that),\n                    activate: proxy(that._activateItem, that),\n                    columns: currentOptions.columns,\n                    deactivate: proxy(that._deactivateItem, that),\n                    dataBinding: function () {\n                        that.trigger('dataBinding');\n                    },\n                    dataBound: listBoundHandler,\n                    height: currentOptions.height,\n                    dataValueField: currentOptions.dataValueField,\n                    dataTextField: currentOptions.dataTextField,\n                    groupTemplate: currentOptions.groupTemplate,\n                    fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n                    template: currentOptions.template\n                }, options, virtual, changeEventOption);\n                if (!options.template) {\n                    options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n                }\n                if (currentOptions.$angular) {\n                    options.$angular = currentOptions.$angular;\n                }\n                return options;\n            },\n            _initList: function () {\n                var that = this;\n                var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n                if (!that.options.virtual) {\n                    that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n                } else {\n                    that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n                }\n                that.listView.bind('listBound', proxy(that._listBound, that));\n                that._setListValue();\n            },\n            _setListValue: function (value) {\n                value = value || this.options.value;\n                if (value !== undefined) {\n                    this.listView.value(value).done(proxy(this._updateSelectionState, this));\n                }\n            },\n            _updateSelectionState: $.noop,\n            _listMousedown: function (e) {\n                if (!this.filterInput || this.filterInput[0] !== e.target) {\n                    e.preventDefault();\n                }\n            },\n            _isFilterEnabled: function () {\n                var filter = this.options.filter;\n                return filter && filter !== 'none';\n            },\n            _hideClear: function () {\n                var list = this;\n                if (list._clear) {\n                    list._clear.addClass(HIDDENCLASS);\n                }\n            },\n            _showClear: function () {\n                if (this._clear) {\n                    this._clear.removeClass(HIDDENCLASS);\n                }\n            },\n            _clearValue: function () {\n                this._clearText();\n                this._accessor('');\n                this.listView.value([]);\n                if (this._isSelect) {\n                    this._customOption = undefined;\n                }\n                if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n                    this._filter({\n                        word: '',\n                        open: false\n                    });\n                    if (this.options.highlightFirst) {\n                        this.listView.focus(0);\n                    }\n                }\n                this._change();\n            },\n            _clearText: function () {\n                this.text('');\n            },\n            _clearFilter: function () {\n                if (!this.options.virtual) {\n                    this.listView.bound(false);\n                }\n                this._filterSource();\n            },\n            _filterSource: function (filter, force) {\n                var that = this;\n                var options = that.options;\n                var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n                var dataSource = that.dataSource;\n                var expression = extend({}, dataSource.filter() || {});\n                var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n                var removed = removeFiltersForField(expression, options.dataTextField);\n                this._clearFilterExpressions(expression);\n                if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n                    return;\n                }\n                var newExpression = {\n                    filters: [],\n                    logic: 'and'\n                };\n                if (isMultiColumnFiltering) {\n                    newExpression.filters.push(filter);\n                } else {\n                    this._pushFilterExpression(newExpression, filter);\n                }\n                if (isValidFilterExpr(expression)) {\n                    if (newExpression.logic === expression.logic) {\n                        newExpression.filters = newExpression.filters.concat(expression.filters);\n                    } else {\n                        newExpression.filters.push(expression);\n                    }\n                }\n                if (that._cascading) {\n                    this.listView.setDSFilter(newExpression);\n                }\n                var dataSourceState = extend({}, {\n                    page: resetPageSettings ? 1 : dataSource.page(),\n                    pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n                    sort: dataSource.sort(),\n                    filter: dataSource.filter(),\n                    group: dataSource.group(),\n                    aggregate: dataSource.aggregate()\n                }, { filter: newExpression });\n                return dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n            },\n            _pushFilterExpression: function (newExpression, filter) {\n                if (isValidFilterExpr(filter) && filter.value !== '') {\n                    newExpression.filters.push(filter);\n                }\n            },\n            _clearFilterExpressions: function (expression) {\n                if (!expression.filters) {\n                    return;\n                }\n                var filtersToRemove;\n                for (var i = 0; i < expression.filters.length; i++) {\n                    if ('fromFilter' in expression.filters[i]) {\n                        filtersToRemove = i;\n                    }\n                }\n                if (!isNaN(filtersToRemove)) {\n                    expression.filters.splice(filtersToRemove, 1);\n                }\n            },\n            _angularElement: function (element, action) {\n                if (!element) {\n                    return;\n                }\n                this.angular(action, function () {\n                    return { elements: element };\n                });\n            },\n            _renderNoData: function () {\n                var list = this;\n                var noData = list.noData;\n                if (!noData) {\n                    return;\n                }\n                this._angularElement(noData, 'cleanup');\n                noData.children(':first').html(list.noDataTemplate({ instance: list }));\n                this._angularElement(noData, 'compile');\n            },\n            _toggleNoData: function (show) {\n                $(this.noData).toggle(show);\n            },\n            _toggleHeader: function (show) {\n                var groupHeader = this.listView.content.prev(GROUPHEADER);\n                groupHeader.toggle(show);\n            },\n            _renderFooter: function () {\n                var list = this;\n                var footer = list.footer;\n                if (!footer) {\n                    return;\n                }\n                this._angularElement(footer, 'cleanup');\n                footer.html(list.footerTemplate({ instance: list }));\n                this._angularElement(footer, 'compile');\n            },\n            _allowOpening: function () {\n                return this.options.noDataTemplate || this.dataSource.flatView().length;\n            },\n            _initValue: function () {\n                var that = this, value = that.options.value;\n                if (value !== null) {\n                    that.element.val(value);\n                } else {\n                    value = that._accessor();\n                    that.options.value = value;\n                }\n                that._old = value;\n            },\n            _ignoreCase: function () {\n                var that = this, model = that.dataSource.reader.model, field;\n                if (model && model.fields) {\n                    field = model.fields[that.options.dataTextField];\n                    if (field && field.type && field.type !== 'string') {\n                        that.options.ignoreCase = false;\n                    }\n                }\n            },\n            _focus: function (candidate) {\n                return this.listView.focus(candidate);\n            },\n            _filter: function (options) {\n                var that = this;\n                var widgetOptions = that.options;\n                var word = options.word;\n                var filterFields = widgetOptions.filterFields;\n                var field = widgetOptions.dataTextField;\n                var expression;\n                if (filterFields && filterFields.length) {\n                    expression = {\n                        logic: 'or',\n                        filters: [],\n                        fromFilter: true\n                    };\n                    for (var i = 0; i < filterFields.length; i++) {\n                        this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n                    }\n                } else {\n                    expression = that._buildExpression(word, field);\n                }\n                that._open = options.open;\n                that._filterSource(expression);\n            },\n            _buildExpression: function (value, field) {\n                var that = this;\n                var widgetOptions = that.options;\n                var ignoreCase = widgetOptions.ignoreCase;\n                var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n                return {\n                    value: ignoreCase ? accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase() : value,\n                    field: field,\n                    operator: widgetOptions.filter,\n                    ignoreCase: ignoreCase\n                };\n            },\n            _clearButton: function () {\n                var list = this;\n                var clearTitle = list.options.messages.clear;\n                if (!list._clear) {\n                    list._clear = $('<span unselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"' + clearTitle + '\"></span>').attr({\n                        'role': 'button',\n                        'tabIndex': -1\n                    });\n                }\n                if (!list.options.clearButton) {\n                    list._clear.remove();\n                }\n                this._hideClear();\n            },\n            search: function (word) {\n                var options = this.options;\n                word = typeof word === 'string' ? word : this._inputValue();\n                clearTimeout(this._typingTimeout);\n                if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n                    this._state = 'filter';\n                    if (this.listView) {\n                        this.listView._emptySearch = !$.trim(word).length;\n                    }\n                    if (!this._isFilterEnabled()) {\n                        this._searchByWord(word);\n                    } else {\n                        this._filter({\n                            word: word,\n                            open: true\n                        });\n                    }\n                }\n            },\n            current: function (candidate) {\n                return this._focus(candidate);\n            },\n            items: function () {\n                return this.ul[0].children;\n            },\n            destroy: function () {\n                var that = this;\n                var ns = that.ns;\n                Widget.fn.destroy.call(that);\n                that._unbindDataSource();\n                that.listView.destroy();\n                that.list.off(ns);\n                that.popup.destroy();\n                if (that._form) {\n                    that._form.off('reset', that._resetHandler);\n                }\n            },\n            dataItem: function (index) {\n                var that = this;\n                if (index === undefined) {\n                    return that.listView.selectedDataItems()[0];\n                }\n                if (typeof index !== 'number') {\n                    if (that.options.virtual) {\n                        return that.dataSource.getByUid($(index).data('uid'));\n                    }\n                    index = $(that.items()).index(index);\n                }\n                return that.dataSource.flatView()[index];\n            },\n            _activateItem: function () {\n                var current = this.listView.focus();\n                if (current) {\n                    this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n                }\n            },\n            _deactivateItem: function () {\n                this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n            },\n            _accessors: function () {\n                var that = this;\n                var element = that.element;\n                var options = that.options;\n                var getter = kendo.getter;\n                var textField = element.attr(kendo.attr('text-field'));\n                var valueField = element.attr(kendo.attr('value-field'));\n                if (!options.dataTextField && textField) {\n                    options.dataTextField = textField;\n                }\n                if (!options.dataValueField && valueField) {\n                    options.dataValueField = valueField;\n                }\n                that._text = getter(options.dataTextField);\n                that._value = getter(options.dataValueField);\n            },\n            _aria: function (id) {\n                var that = this, options = that.options, element = that._focused.add(that.filterInput);\n                if (options.suggest !== undefined) {\n                    element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n                }\n                id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n                element.attr('aria-owns', id);\n                that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n                that._ariaLabel();\n            },\n            _ariaLabel: function () {\n                var that = this;\n                var focusedElm = that._focused;\n                var inputElm = that.element;\n                var inputId = inputElm.attr('id');\n                var labelElm = $('label[for=\"' + inputId + '\"]');\n                var ariaLabel = inputElm.attr('aria-label');\n                var ariaLabelledBy = inputElm.attr('aria-labelledby');\n                if (focusedElm === inputElm) {\n                    return;\n                }\n                if (ariaLabel) {\n                    focusedElm.attr('aria-label', ariaLabel);\n                } else if (ariaLabelledBy) {\n                    focusedElm.attr('aria-labelledby', ariaLabelledBy);\n                } else if (labelElm.length) {\n                    var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n                    focusedElm.attr('aria-labelledby', labelId);\n                }\n            },\n            _generateLabelId: function (label, inputId) {\n                var labelId = inputId + LABELIDPART;\n                label.attr('id', labelId);\n                return labelId;\n            },\n            _blur: function () {\n                var that = this;\n                that._change();\n                that.close();\n                that._userTriggered = false;\n            },\n            _change: function () {\n                var that = this;\n                var index = that.selectedIndex;\n                var optionValue = that.options.value;\n                var value = that.value();\n                var trigger;\n                if (that._isSelect && !that.listView.bound() && optionValue) {\n                    value = optionValue;\n                }\n                if (value !== unifyType(that._old, typeof value) && value !== unifyType(that._oldText, typeof value)) {\n                    trigger = true;\n                } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n                    trigger = true;\n                } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n                    trigger = true;\n                }\n                if (trigger) {\n                    if (that._old === null || that._old === '' || value === '') {\n                        that._valueBeforeCascade = that._old = value;\n                    } else {\n                        if (that.dataItem()) {\n                            that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n                        } else {\n                            that._valueBeforeCascade = that._old = null;\n                        }\n                    }\n                    that._oldIndex = index;\n                    that._oldText = that.text && that.text();\n                    if (!that._typing) {\n                        that.element.trigger(CHANGE);\n                    }\n                    that.trigger(CHANGE);\n                }\n                that.typing = false;\n            },\n            _data: function () {\n                return this.dataSource.view();\n            },\n            _enable: function () {\n                var that = this, options = that.options, disabled = that.element.is('[disabled]');\n                if (options.enable !== undefined) {\n                    options.enabled = options.enable;\n                }\n                if (!options.enabled || disabled) {\n                    that.enable(false);\n                } else {\n                    that.readonly(that.element.is('[readonly]'));\n                }\n            },\n            _dataValue: function (dataItem) {\n                var value = this._value(dataItem);\n                if (value === undefined) {\n                    value = this._text(dataItem);\n                }\n                return value;\n            },\n            _offsetHeight: function () {\n                var offsetHeight = 0;\n                var siblings = this.listView.content.prevAll(':visible');\n                siblings.each(function () {\n                    var element = $(this);\n                    offsetHeight += outerHeight(element, true);\n                });\n                return offsetHeight;\n            },\n            _height: function (length) {\n                var that = this;\n                var list = that.list;\n                var height = that.options.height;\n                var visible = that.popup.visible();\n                var offsetTop;\n                var popups;\n                var footerHeight;\n                if (length || that.options.noDataTemplate) {\n                    popups = list.add(list.parent('.k-animation-container')).show();\n                    if (!list.is(':visible')) {\n                        popups.hide();\n                        return;\n                    }\n                    height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n                    popups.height(height);\n                    if (height !== 'auto') {\n                        offsetTop = that._offsetHeight();\n                        footerHeight = outerHeight($(that.footer)) || 0;\n                        height = height - offsetTop - footerHeight;\n                    }\n                    that.listView.content.height(height);\n                    if (!visible) {\n                        popups.hide();\n                    }\n                }\n                return height;\n            },\n            _openHandler: function (e) {\n                this._adjustListWidth();\n                if (this.trigger(OPEN)) {\n                    e.preventDefault();\n                } else {\n                    this._focused.attr('aria-expanded', true);\n                    this.ul.attr('aria-hidden', false);\n                }\n            },\n            _adjustListWidth: function () {\n                var that = this, list = that.list, width = list[0].style.width, wrapper = that.wrapper, computedStyle, computedWidth;\n                if (!list.data(WIDTH) && width) {\n                    return;\n                }\n                computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n                computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n                if (computedStyle && browser.msie) {\n                    computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n                }\n                if (list.css('box-sizing') !== 'border-box') {\n                    width = computedWidth - (outerWidth(list) - list.width());\n                } else {\n                    width = computedWidth;\n                }\n                list.css({\n                    fontFamily: wrapper.css('font-family'),\n                    width: that.options.autoWidth ? 'auto' : width,\n                    minWidth: width,\n                    whiteSpace: that.options.autoWidth ? 'nowrap' : 'normal'\n                }).data(WIDTH, width);\n                return true;\n            },\n            _closeHandler: function (e) {\n                if (this.trigger(CLOSE)) {\n                    e.preventDefault();\n                } else {\n                    this._focused.attr('aria-expanded', false);\n                    this.ul.attr('aria-hidden', true);\n                }\n            },\n            _focusItem: function () {\n                var listView = this.listView;\n                var noFocusedItem = !listView.focus();\n                var index = last(listView.select());\n                if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n                    index = 0;\n                }\n                if (index !== undefined) {\n                    listView.focus(index);\n                } else if (noFocusedItem) {\n                    listView.scrollToIndex(0);\n                }\n            },\n            _calculateGroupPadding: function (height) {\n                var li = this.ul.children('.k-first:first');\n                var groupHeader = this.listView.content.prev(GROUPHEADER);\n                var padding = 0;\n                var direction = 'right';\n                if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n                    if (height !== 'auto') {\n                        padding = kendo.support.scrollbar();\n                    }\n                    if (this.element.parents('.k-rtl').length) {\n                        direction = 'left';\n                    }\n                    padding += parseFloat(li.css('border-' + direction + '-width'), 10) + parseFloat(li.children('.k-group').css('padding-' + direction), 10);\n                    groupHeader.css('padding-' + direction, padding);\n                }\n            },\n            _calculatePopupHeight: function (force) {\n                var height = this._height(this.dataSource.flatView().length || force);\n                this._calculateGroupPadding(height);\n                this._calculateColumnsHeaderPadding(height);\n            },\n            _calculateColumnsHeaderPadding: function (height) {\n                if (this.options.columns && this.options.columns.length) {\n                    var list = this;\n                    var isRtl = support.isRtl(list.wrapper);\n                    var scrollbar = kendo.support.scrollbar();\n                    list.columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', height !== 'auto' ? scrollbar : 0);\n                }\n            },\n            _refreshScroll: function () {\n                var listView = this.listView;\n                var enableYScroll = listView.element.height() > listView.content.height();\n                if (this.options.autoWidth) {\n                    listView.content.css({\n                        overflowX: 'hidden',\n                        overflowY: enableYScroll ? 'scroll' : 'auto'\n                    });\n                }\n            },\n            _resizePopup: function (force) {\n                if (this.options.virtual) {\n                    return;\n                }\n                if (!this.popup.element.is(':visible')) {\n                    this.popup.one('open', function (force) {\n                        return proxy(function () {\n                            this._calculatePopupHeight(force);\n                        }, this);\n                    }.call(this, force));\n                    this.popup.one('activate', proxy(this._refreshScroll, this));\n                } else {\n                    this._calculatePopupHeight(force);\n                }\n            },\n            _popup: function () {\n                var list = this;\n                list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n                    anchor: list.wrapper,\n                    open: proxy(list._openHandler, list),\n                    close: proxy(list._closeHandler, list),\n                    animation: list.options.animation,\n                    isRtl: support.isRtl(list.wrapper),\n                    autosize: list.options.autoWidth\n                }));\n            },\n            _makeUnselectable: function () {\n                if (isIE8) {\n                    this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n                }\n            },\n            _toggleHover: function (e) {\n                $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n            },\n            _toggle: function (open, preventFocus) {\n                var that = this;\n                var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n                open = open !== undefined ? open : !that.popup.visible();\n                if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n                    that._prevent = true;\n                    that._focused.focus();\n                    that._prevent = false;\n                }\n                that[open ? OPEN : CLOSE]();\n            },\n            _triggerCascade: function () {\n                var that = this;\n                if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n                    that._cascadedValue = that.value();\n                    that._cascadeTriggered = true;\n                    that.trigger(CASCADE, { userTriggered: that._userTriggered });\n                }\n            },\n            _triggerChange: function () {\n                if (this._valueBeforeCascade !== this.value()) {\n                    this.trigger(CHANGE);\n                }\n            },\n            _unbindDataSource: function () {\n                var that = this;\n                that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n            },\n            requireValueMapper: function (options, value) {\n                var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n                if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n                    throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n                }\n            }\n        });\n        function unifyType(value, type) {\n            if (value !== undefined && value !== '' && value !== null) {\n                if (type === 'boolean') {\n                    if (typeof value !== 'boolean') {\n                        value = value.toLowerCase() === 'true';\n                    }\n                    value = Boolean(value);\n                } else if (type === 'number') {\n                    value = Number(value);\n                } else if (type === 'string') {\n                    value = value.toString();\n                }\n            }\n            return value;\n        }\n        extend(List, {\n            inArray: function (node, parentNode) {\n                var idx, length, siblings = parentNode.children;\n                if (!node || node.parentNode !== parentNode) {\n                    return -1;\n                }\n                for (idx = 0, length = siblings.length; idx < length; idx++) {\n                    if (node === siblings[idx]) {\n                        return idx;\n                    }\n                }\n                return -1;\n            },\n            unifyType: unifyType\n        });\n        kendo.ui.List = List;\n        ui.Select = List.extend({\n            init: function (element, options) {\n                List.fn.init.call(this, element, options);\n                this._initial = this.element.val();\n            },\n            setDataSource: function (dataSource) {\n                var that = this;\n                var parent;\n                that.options.dataSource = dataSource;\n                that._dataSource();\n                if (that.listView.bound()) {\n                    that._initialIndex = null;\n                    that.listView._current = null;\n                }\n                that.listView.setDataSource(that.dataSource);\n                if (that.options.autoBind) {\n                    that.dataSource.fetch();\n                }\n                parent = that._parentWidget();\n                if (parent) {\n                    that._cascadeSelect(parent);\n                }\n            },\n            close: function () {\n                this.popup.close();\n            },\n            select: function (candidate) {\n                var that = this;\n                if (candidate === undefined) {\n                    return that.selectedIndex;\n                } else {\n                    return that._select(candidate).done(function () {\n                        that._cascadeValue = that._old = that._accessor();\n                        that._oldIndex = that.selectedIndex;\n                    });\n                }\n            },\n            _accessor: function (value, idx) {\n                return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n            },\n            _accessorInput: function (value) {\n                var element = this.element[0];\n                if (value === undefined) {\n                    return element.value;\n                } else {\n                    if (value === null) {\n                        value = '';\n                    }\n                    element.value = value;\n                }\n            },\n            _accessorSelect: function (value, idx) {\n                var element = this.element[0];\n                var hasValue;\n                if (value === undefined) {\n                    return getSelectedOption(element).value || '';\n                }\n                getSelectedOption(element).selected = false;\n                if (idx === undefined) {\n                    idx = -1;\n                }\n                hasValue = value !== null && value !== '';\n                if (hasValue && idx == -1) {\n                    this._custom(value);\n                } else {\n                    if (value) {\n                        element.value = value;\n                    } else {\n                        element.selectedIndex = idx;\n                    }\n                }\n            },\n            _syncValueAndText: function () {\n                return true;\n            },\n            _custom: function (value) {\n                var that = this;\n                var element = that.element;\n                var custom = that._customOption;\n                if (!custom) {\n                    custom = $('<option/>');\n                    that._customOption = custom;\n                    element.append(custom);\n                }\n                custom.text(value);\n                custom[0].selected = true;\n            },\n            _hideBusy: function () {\n                var that = this;\n                clearTimeout(that._busy);\n                that._arrowIcon.removeClass(LOADING);\n                that._focused.attr('aria-busy', false);\n                that._busy = null;\n                that._showClear();\n            },\n            _showBusy: function (e) {\n                var that = this;\n                if (e.isDefaultPrevented()) {\n                    return;\n                }\n                that._request = true;\n                if (that._busy) {\n                    return;\n                }\n                that._busy = setTimeout(function () {\n                    if (that._arrowIcon) {\n                        that._focused.attr('aria-busy', true);\n                        that._arrowIcon.addClass(LOADING);\n                        that._hideClear();\n                    }\n                }, 100);\n            },\n            _requestEnd: function () {\n                this._request = false;\n                this._hideBusy();\n            },\n            _dataSource: function () {\n                var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {}, idx;\n                dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n                if (that._isSelect) {\n                    idx = element[0].selectedIndex;\n                    if (idx > -1) {\n                        options.index = idx;\n                    }\n                    dataSource.select = element;\n                    dataSource.fields = [\n                        { field: options.dataTextField },\n                        { field: options.dataValueField }\n                    ];\n                }\n                if (that.dataSource) {\n                    that._unbindDataSource();\n                } else {\n                    that._requestStartHandler = proxy(that._showBusy, that);\n                    that._requestEndHandler = proxy(that._requestEnd, that);\n                    that._errorHandler = proxy(that._hideBusy, that);\n                }\n                that.dataSource = kendo.data.DataSource.create(dataSource).bind(REQUESTSTART, that._requestStartHandler).bind(REQUESTEND, that._requestEndHandler).bind('error', that._errorHandler);\n            },\n            _firstItem: function () {\n                this.listView.focusFirst();\n            },\n            _lastItem: function () {\n                this.listView.focusLast();\n            },\n            _nextItem: function () {\n                return this.listView.focusNext();\n            },\n            _prevItem: function () {\n                return this.listView.focusPrev();\n            },\n            _getNormalizedDataItem: function (candidate) {\n                var that = this, listView = that.listView, isIndex = typeof candidate === 'number', hasOptionLabel = that.optionLabel && that.optionLabel.length, index;\n                if (isIndex) {\n                    index = hasOptionLabel ? --candidate : candidate;\n                } else {\n                    index = listView.getElementIndex(candidate);\n                }\n                return listView.dataItemByIndex(index);\n            },\n            _getNormalizedSelectCandidate: function (candidate) {\n                var that = this, hasOptionLabel = that.optionLabel && that.optionLabel.length, isIndex = typeof candidate === 'number', normalizedCandidate = candidate;\n                if (hasOptionLabel && isIndex) {\n                    normalizedCandidate++;\n                }\n                return normalizedCandidate;\n            },\n            _move: function (e) {\n                var that = this;\n                var listView = that.listView;\n                var key = e.keyCode;\n                var down = key === keys.DOWN;\n                var isVirtual = that.options.virtual;\n                var dataItem;\n                var pressed;\n                var current;\n                var moveIndex;\n                var selectCandidate;\n                if (key === keys.UP || down) {\n                    if (e.altKey) {\n                        that.toggle(down);\n                    } else {\n                        if (!listView.bound() && !that.ul[0].firstChild) {\n                            if (!that._fetch) {\n                                that.dataSource.one(CHANGE, function () {\n                                    that._fetch = false;\n                                    that._move(e);\n                                });\n                                that._fetch = true;\n                                that._filterSource();\n                            }\n                            e.preventDefault();\n                            return true;\n                        }\n                        current = that._focus();\n                        if (!that._fetch && (!current || current.hasClass('k-state-selected'))) {\n                            if (down) {\n                                moveIndex = that._nextItem();\n                                if (isVirtual && moveIndex <= 0 || !that._focus() && !moveIndex) {\n                                    that._lastItem();\n                                }\n                            } else {\n                                moveIndex = that._prevItem();\n                                if (isVirtual && moveIndex >= listView.dataSource.total() - 1 || !that._focus() && !moveIndex) {\n                                    that._firstItem();\n                                }\n                            }\n                        }\n                        selectCandidate = that._getNormalizedSelectCandidate(that._get(that._focus()) || moveIndex || 0);\n                        that._select(selectCandidate, true).done(function () {\n                            var done = function () {\n                                if (!that.popup.visible()) {\n                                    that._blur();\n                                }\n                                if (that._cascadedValue === null) {\n                                    that._cascadedValue = that.value();\n                                } else {\n                                    that._cascadedValue = that.dataItem() ? that.dataItem()[that.options.dataValueField] || that.dataItem() : null;\n                                }\n                            };\n                            if (that.trigger(SELECT, {\n                                    dataItem: that._getNormalizedDataItem(selectCandidate),\n                                    item: that._focus()\n                                })) {\n                                that._select(current).done(done);\n                            } else {\n                                done();\n                            }\n                        });\n                    }\n                    e.preventDefault();\n                    pressed = true;\n                } else if (key === keys.ENTER || key === keys.TAB) {\n                    if (that.popup.visible()) {\n                        e.preventDefault();\n                    }\n                    current = that._focus();\n                    dataItem = that.dataItem();\n                    if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n                        current = null;\n                    }\n                    var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n                    var selection;\n                    if (current) {\n                        dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n                        var shouldTrigger = true;\n                        if (dataItem) {\n                            shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n                        }\n                        if (shouldTrigger && that.trigger(SELECT, {\n                                dataItem: dataItem,\n                                item: current\n                            })) {\n                            return;\n                        }\n                        selection = that._select(current);\n                    } else if (that.input) {\n                        if (that._syncValueAndText() || that._isSelect) {\n                            that._accessor(that.input.val());\n                        }\n                        that.listView.value(that.input.val());\n                    }\n                    if (that._focusElement) {\n                        that._focusElement(that.wrapper);\n                    }\n                    if (activeFilter && key === keys.TAB) {\n                        that.wrapper.focusout();\n                    } else {\n                        if (selection && typeof selection.done === 'function') {\n                            selection.done(function () {\n                                that._blur();\n                            });\n                        } else {\n                            that._blur();\n                        }\n                    }\n                    that.close();\n                    pressed = true;\n                } else if (key === keys.ESC) {\n                    if (that.popup.visible()) {\n                        e.preventDefault();\n                    }\n                    that.close();\n                    pressed = true;\n                } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n                    e.preventDefault();\n                    var direction = key === keys.PAGEDOWN ? 1 : -1;\n                    listView.scrollWith(direction * listView.screenHeight());\n                    pressed = true;\n                }\n                return pressed;\n            },\n            _fetchData: function () {\n                var that = this;\n                var hasItems = !!that.dataSource.view().length;\n                if (that._request || that.options.cascadeFrom) {\n                    return;\n                }\n                if (!that.listView.bound() && !that._fetch && !hasItems) {\n                    that._fetch = true;\n                    that.dataSource.fetch().done(function () {\n                        that._fetch = false;\n                    });\n                }\n            },\n            _options: function (data, optionLabel, value) {\n                var that = this, element = that.element, htmlElement = element[0], length = data.length, options = '', option, dataItem, dataText, dataValue, idx = 0;\n                if (optionLabel) {\n                    options = optionLabel;\n                }\n                for (; idx < length; idx++) {\n                    option = '<option';\n                    dataItem = data[idx];\n                    dataText = that._text(dataItem);\n                    dataValue = that._value(dataItem);\n                    if (dataValue !== undefined) {\n                        dataValue += '';\n                        if (dataValue.indexOf('\"') !== -1) {\n                            dataValue = dataValue.replace(quotRegExp, '&quot;');\n                        }\n                        option += ' value=\"' + dataValue + '\"';\n                    }\n                    option += '>';\n                    if (dataText !== undefined) {\n                        option += htmlEncode(dataText);\n                    }\n                    option += '</option>';\n                    options += option;\n                }\n                element.html(options);\n                if (value !== undefined) {\n                    htmlElement.value = value;\n                    if (htmlElement.value && !value) {\n                        htmlElement.selectedIndex = -1;\n                    }\n                }\n                if (htmlElement.selectedIndex !== -1) {\n                    option = getSelectedOption(htmlElement);\n                    if (option) {\n                        option.setAttribute(SELECTED, SELECTED);\n                    }\n                }\n            },\n            _reset: function () {\n                var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n                if (form[0]) {\n                    that._resetHandler = function () {\n                        setTimeout(function () {\n                            that.value(that._initial);\n                        });\n                    };\n                    that._form = form.on('reset', that._resetHandler);\n                }\n            },\n            _parentWidget: function () {\n                var name = this.options.name;\n                if (!this.options.cascadeFrom) {\n                    return;\n                }\n                var parentElement = $('#' + this.options.cascadeFrom);\n                var parent = parentElement.data('kendo' + name);\n                if (!parent) {\n                    for (var i = 0; i < alternativeNames[name].length; i += 1) {\n                        parent = parentElement.data('kendo' + alternativeNames[name][i]);\n                        if (!!parent) {\n                            break;\n                        }\n                    }\n                }\n                return parent;\n            },\n            _cascade: function () {\n                var that = this;\n                var options = that.options;\n                var cascade = options.cascadeFrom;\n                var parent;\n                if (cascade) {\n                    parent = that._parentWidget();\n                    if (!parent) {\n                        return;\n                    }\n                    that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n                    that._cascadeFilterRequests = [];\n                    options.autoBind = false;\n                    parent.bind('set', function () {\n                        that.one('set', function (e) {\n                            that._selectedValue = e.value || that._accessor();\n                        });\n                    });\n                    parent.first(CASCADE, that._cascadeHandlerProxy);\n                    if (parent.listView.bound()) {\n                        that._toggleCascadeOnFocus();\n                        that._cascadeSelect(parent);\n                    } else {\n                        parent.one('dataBound', function () {\n                            that._toggleCascadeOnFocus();\n                            if (parent.popup.visible()) {\n                                parent._focused.focus();\n                            }\n                        });\n                        if (!parent.value()) {\n                            that.enable(false);\n                        }\n                    }\n                }\n            },\n            _toggleCascadeOnFocus: function () {\n                var that = this;\n                var parent = that._parentWidget();\n                var focusout = isIE && parent instanceof ui.DropDownList ? BLUR : FOCUSOUT;\n                parent._focused.add(parent.filterInput).bind(FOCUS, function () {\n                    parent.unbind(CASCADE, that._cascadeHandlerProxy);\n                    parent.first(CHANGE, that._cascadeHandlerProxy);\n                });\n                parent._focused.add(parent.filterInput).bind(focusout, function () {\n                    parent.unbind(CHANGE, that._cascadeHandlerProxy);\n                    parent.first(CASCADE, that._cascadeHandlerProxy);\n                });\n            },\n            _cascadeHandler: function (e) {\n                var parent = this._parentWidget();\n                var valueBeforeCascade = this.value();\n                this._userTriggered = e.userTriggered || parent._userTriggered;\n                if (this.listView.bound()) {\n                    this._clearSelection(parent, true);\n                }\n                this._cascadeSelect(parent, valueBeforeCascade);\n            },\n            _cascadeChange: function (parent) {\n                var that = this;\n                var value = that._accessor() || that._selectedValue;\n                if (!that._cascadeFilterRequests.length) {\n                    that._selectedValue = null;\n                }\n                if (that._userTriggered) {\n                    that._clearSelection(parent, true);\n                } else if (value) {\n                    if (value !== unifyType(that.listView.value()[0], typeof value)) {\n                        that.value(value);\n                    }\n                    if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n                        that._clearSelection(parent, true);\n                    }\n                } else if (that.dataSource.flatView().length) {\n                    that.select(that.options.index);\n                }\n                that.enable();\n                that._triggerCascade();\n                that._triggerChange();\n                that._userTriggered = false;\n            },\n            _cascadeSelect: function (parent, valueBeforeCascade) {\n                var that = this;\n                var dataItem = parent.dataItem();\n                var filterValue = dataItem ? dataItem[that.options.cascadeFromParentField] || parent._value(dataItem) : null;\n                var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n                var expressions;\n                that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n                if (filterValue || filterValue === 0) {\n                    expressions = that.dataSource.filter() || {};\n                    removeFiltersForField(expressions, valueField);\n                    var handler = function () {\n                        var currentHandler = that._cascadeFilterRequests.shift();\n                        if (currentHandler) {\n                            that.unbind('dataBound', currentHandler);\n                        }\n                        currentHandler = that._cascadeFilterRequests[0];\n                        if (currentHandler) {\n                            that.first('dataBound', currentHandler);\n                        }\n                        that._cascadeChange(parent);\n                    };\n                    that._cascadeFilterRequests.push(handler);\n                    if (that._cascadeFilterRequests.length === 1) {\n                        that.first('dataBound', handler);\n                    }\n                    that._cascading = true;\n                    that._filterSource({\n                        field: valueField,\n                        operator: 'eq',\n                        value: filterValue\n                    });\n                    that._cascading = false;\n                } else {\n                    that.enable(false);\n                    that._clearSelection(parent);\n                    that._triggerCascade();\n                    that._triggerChange();\n                    that._userTriggered = false;\n                }\n            }\n        });\n        var STATIC_LIST_NS = '.StaticList';\n        var StaticList = kendo.ui.DataBoundWidget.extend({\n            init: function (element, options) {\n                Widget.fn.init.call(this, element, options);\n                this.element.attr('role', 'listbox').on('click' + STATIC_LIST_NS, 'li', proxy(this._click, this)).on('mouseenter' + STATIC_LIST_NS, 'li', function () {\n                    $(this).addClass(HOVER);\n                }).on('mouseleave' + STATIC_LIST_NS, 'li', function () {\n                    $(this).removeClass(HOVER);\n                });\n                if (support.touch) {\n                    this._touchHandlers();\n                }\n                if (this.options.selectable === 'multiple') {\n                    this.element.attr('aria-multiselectable', true);\n                }\n                this.content = this.element.wrap('<div class=\\'k-list-scroller\\' unselectable=\\'on\\'></div>').parent();\n                this.header = this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev();\n                this.bound(false);\n                this._optionID = kendo.guid();\n                this._selectedIndices = [];\n                this._view = [];\n                this._dataItems = [];\n                this._values = [];\n                var value = this.options.value;\n                if (value) {\n                    this._values = $.isArray(value) ? value.slice(0) : [value];\n                }\n                this._getter();\n                this._templates();\n                this.setDataSource(this.options.dataSource);\n                this._onScroll = proxy(function () {\n                    var that = this;\n                    clearTimeout(that._scrollId);\n                    that._scrollId = setTimeout(function () {\n                        that._renderHeader();\n                    }, 50);\n                }, this);\n            },\n            options: {\n                name: 'StaticList',\n                dataValueField: null,\n                valuePrimitive: false,\n                selectable: true,\n                template: null,\n                groupTemplate: null,\n                fixedGroupTemplate: null\n            },\n            events: [\n                'click',\n                CHANGE,\n                'activate',\n                'deactivate',\n                'dataBinding',\n                'dataBound',\n                'selectedItemChange'\n            ],\n            setDataSource: function (source) {\n                var that = this;\n                var dataSource = source || {};\n                var value;\n                dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n                dataSource = kendo.data.DataSource.create(dataSource);\n                if (that.dataSource) {\n                    that.dataSource.unbind(CHANGE, that._refreshHandler);\n                    value = that.value();\n                    that.value([]);\n                    that.bound(false);\n                    that.value(value);\n                } else {\n                    that._refreshHandler = proxy(that.refresh, that);\n                }\n                that.setDSFilter(dataSource.filter());\n                that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n                that._fixedHeader();\n            },\n            _touchHandlers: function () {\n                var that = this;\n                var startY;\n                var endY;\n                var tapPosition = function (event) {\n                    return (event.originalEvent || event).changedTouches[0].pageY;\n                };\n                that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n                    startY = tapPosition(e);\n                });\n                that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n                    if (e.isDefaultPrevented()) {\n                        return;\n                    }\n                    endY = tapPosition(e);\n                    if (Math.abs(endY - startY) < 10) {\n                        that._touchTriggered = true;\n                        that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n                    }\n                });\n            },\n            skip: function () {\n                return this.dataSource.skip();\n            },\n            setOptions: function (options) {\n                Widget.fn.setOptions.call(this, options);\n                this._getter();\n                this._templates();\n                this._render();\n            },\n            destroy: function () {\n                this.element.off(STATIC_LIST_NS);\n                if (this._refreshHandler) {\n                    this.dataSource.unbind(CHANGE, this._refreshHandler);\n                }\n                clearTimeout(this._scrollId);\n                Widget.fn.destroy.call(this);\n            },\n            dataItemByIndex: function (index) {\n                return this.dataSource.flatView()[index];\n            },\n            screenHeight: function () {\n                return this.content[0].clientHeight;\n            },\n            scrollToIndex: function (index) {\n                var item = this.element[0].children[index];\n                if (item) {\n                    this.scroll(item);\n                }\n            },\n            scrollWith: function (value) {\n                this.content.scrollTop(this.content.scrollTop() + value);\n            },\n            scroll: function (item) {\n                if (!item) {\n                    return;\n                }\n                if (item[0]) {\n                    item = item[0];\n                }\n                var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n                if (contentScrollTop > itemOffsetTop) {\n                    contentScrollTop = itemOffsetTop;\n                } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n                    contentScrollTop = bottomDistance - contentOffsetHeight;\n                }\n                content.scrollTop = contentScrollTop;\n            },\n            selectedDataItems: function (dataItems) {\n                if (dataItems === undefined) {\n                    return this._dataItems.slice();\n                }\n                this._dataItems = dataItems;\n                this._values = this._getValues(dataItems);\n            },\n            _getValues: function (dataItems) {\n                var getter = this._valueGetter;\n                return $.map(dataItems, function (dataItem) {\n                    return getter(dataItem);\n                });\n            },\n            focusNext: function () {\n                var current = this.focus();\n                if (!current) {\n                    current = 0;\n                } else {\n                    current = current.next();\n                }\n                this.focus(current);\n            },\n            focusPrev: function () {\n                var current = this.focus();\n                if (!current) {\n                    current = this.element[0].children.length - 1;\n                } else {\n                    current = current.prev();\n                }\n                this.focus(current);\n            },\n            focusFirst: function () {\n                this.focus(this.element[0].children[0]);\n            },\n            focusLast: function () {\n                this.focus(last(this.element[0].children));\n            },\n            focus: function (candidate) {\n                var that = this;\n                var id = that._optionID;\n                var hasCandidate;\n                if (candidate === undefined) {\n                    return that._current;\n                }\n                candidate = last(that._get(candidate));\n                candidate = $(this.element[0].children[candidate]);\n                if (that._current) {\n                    that._current.removeClass(FOCUSED).removeAttr(ID);\n                    that.trigger('deactivate');\n                }\n                hasCandidate = !!candidate[0];\n                if (hasCandidate) {\n                    candidate.addClass(FOCUSED);\n                    that.scroll(candidate);\n                    candidate.attr('id', id);\n                }\n                that._current = hasCandidate ? candidate : null;\n                that.trigger('activate');\n            },\n            focusIndex: function () {\n                return this.focus() ? this.focus().index() : undefined;\n            },\n            skipUpdate: function (skipUpdate) {\n                this._skipUpdate = skipUpdate;\n            },\n            select: function (indices) {\n                var that = this;\n                var selectable = that.options.selectable;\n                var singleSelection = selectable !== 'multiple' && selectable !== false;\n                var selectedIndices = that._selectedIndices;\n                var uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n                var added = [];\n                var removed = [];\n                var result;\n                if (indices === undefined) {\n                    return selectedIndices.slice();\n                }\n                indices = that._get(indices);\n                if (indices.length === 1 && indices[0] === -1) {\n                    indices = [];\n                }\n                var deferred = $.Deferred().resolve();\n                var filtered = that.isFiltered();\n                if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n                    return deferred;\n                }\n                if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n                    if (that._dataItems.length && that._view.length) {\n                        that._dataItems = [that._view[selectedIndices[0]].item];\n                    }\n                    return deferred;\n                }\n                result = that._deselect(indices);\n                removed = result.removed;\n                indices = result.indices;\n                if (indices.length) {\n                    if (singleSelection) {\n                        indices = [last(indices)];\n                    }\n                    added = that._select(indices);\n                }\n                if (added.length || removed.length) {\n                    that._valueComparer = null;\n                    that.trigger(CHANGE, {\n                        added: added,\n                        removed: removed\n                    });\n                }\n                return deferred;\n            },\n            removeAt: function (position) {\n                this._selectedIndices.splice(position, 1);\n                this._values.splice(position, 1);\n                this._valueComparer = null;\n                return {\n                    position: position,\n                    dataItem: this._dataItems.splice(position, 1)[0]\n                };\n            },\n            setValue: function (value) {\n                value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n                this._values = value;\n                this._valueComparer = null;\n            },\n            value: function (value) {\n                var that = this;\n                var deferred = that._valueDeferred;\n                var indices;\n                if (value === undefined) {\n                    return that._values.slice();\n                }\n                that.setValue(value);\n                if (!deferred || deferred.state() === 'resolved') {\n                    that._valueDeferred = deferred = $.Deferred();\n                }\n                if (that.bound()) {\n                    indices = that._valueIndices(that._values);\n                    if (that.options.selectable === 'multiple') {\n                        that.select(-1);\n                    }\n                    that.select(indices);\n                    deferred.resolve();\n                }\n                that._skipUpdate = false;\n                return deferred;\n            },\n            items: function () {\n                return this.element.children(ITEMSELECTOR);\n            },\n            _click: function (e) {\n                if (this._touchTriggered) {\n                    this._touchTriggered = false;\n                    return;\n                }\n                if (!e.isDefaultPrevented()) {\n                    this._triggerClick(e.currentTarget);\n                }\n            },\n            _triggerClick: function (item) {\n                if (!this.trigger('click', { item: $(item) })) {\n                    this.select(item);\n                }\n            },\n            _valueExpr: function (type, values) {\n                var that = this;\n                var idx = 0;\n                var body;\n                var comparer;\n                var normalized = [];\n                if (!that._valueComparer || that._valueType !== type) {\n                    that._valueType = type;\n                    for (; idx < values.length; idx++) {\n                        normalized.push(unifyType(values[idx], type));\n                    }\n                    body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + '   return idx;' + ' }' + '} ' + 'return -1;';\n                    comparer = new Function('current', 'values', body);\n                    that._valueComparer = function (current) {\n                        return comparer(current, normalized);\n                    };\n                }\n                return that._valueComparer;\n            },\n            _dataItemPosition: function (dataItem, values) {\n                var value = this._valueGetter(dataItem);\n                var valueExpr = this._valueExpr(typeof value, values);\n                return valueExpr(value);\n            },\n            _getter: function () {\n                this._valueGetter = kendo.getter(this.options.dataValueField);\n            },\n            _deselect: function (indices) {\n                var that = this;\n                var children = that.element[0].children;\n                var selectable = that.options.selectable;\n                var selectedIndices = that._selectedIndices;\n                var dataItems = that._dataItems;\n                var values = that._values;\n                var removed = [];\n                var i = 0;\n                var j;\n                var index, selectedIndex;\n                var removedIndices = 0;\n                indices = indices.slice();\n                if (selectable === true || !indices.length) {\n                    for (; i < selectedIndices.length; i++) {\n                        $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n                        removed.push({\n                            position: i,\n                            dataItem: dataItems[i]\n                        });\n                    }\n                    that._values = [];\n                    that._dataItems = [];\n                    that._selectedIndices = [];\n                } else if (selectable === 'multiple') {\n                    for (; i < indices.length; i++) {\n                        index = indices[i];\n                        if (!$(children[index]).hasClass('k-state-selected')) {\n                            continue;\n                        }\n                        for (j = 0; j < selectedIndices.length; j++) {\n                            selectedIndex = selectedIndices[j];\n                            if (selectedIndex === index) {\n                                $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n                                removed.push({\n                                    position: j + removedIndices,\n                                    dataItem: dataItems.splice(j, 1)[0]\n                                });\n                                selectedIndices.splice(j, 1);\n                                indices.splice(i, 1);\n                                values.splice(j, 1);\n                                removedIndices += 1;\n                                i -= 1;\n                                j -= 1;\n                                break;\n                            }\n                        }\n                    }\n                }\n                return {\n                    indices: indices,\n                    removed: removed\n                };\n            },\n            _deselectFiltered: function (indices) {\n                var children = this.element[0].children;\n                var dataItem, index, position;\n                var removed = [];\n                var idx = 0;\n                for (; idx < indices.length; idx++) {\n                    index = indices[idx];\n                    dataItem = this._view[index].item;\n                    position = this._dataItemPosition(dataItem, this._values);\n                    if (position > -1) {\n                        removed.push(this.removeAt(position));\n                        $(children[index]).removeClass('k-state-selected');\n                    }\n                }\n                if (removed.length) {\n                    this.trigger(CHANGE, {\n                        added: [],\n                        removed: removed\n                    });\n                    return true;\n                }\n                return false;\n            },\n            _select: function (indices) {\n                var that = this;\n                var children = that.element[0].children;\n                var data = that._view;\n                var dataItem, index;\n                var added = [];\n                var idx = 0;\n                if (last(indices) !== -1) {\n                    that.focus(indices);\n                }\n                for (; idx < indices.length; idx++) {\n                    index = indices[idx];\n                    dataItem = data[index];\n                    if (index === -1 || !dataItem) {\n                        continue;\n                    }\n                    dataItem = dataItem.item;\n                    that._selectedIndices.push(index);\n                    that._dataItems.push(dataItem);\n                    that._values.push(that._valueGetter(dataItem));\n                    $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n                    added.push({ dataItem: dataItem });\n                }\n                return added;\n            },\n            getElementIndex: function (element) {\n                return $(element).data('offset-index');\n            },\n            _get: function (candidate) {\n                if (typeof candidate === 'number') {\n                    candidate = [candidate];\n                } else if (!isArray(candidate)) {\n                    candidate = this.getElementIndex(candidate);\n                    candidate = [candidate !== undefined ? candidate : -1];\n                }\n                return candidate;\n            },\n            _template: function () {\n                var that = this;\n                var options = that.options;\n                var template = options.template;\n                if (!template) {\n                    template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, 'data') + '}</li>', { useWithBlock: false });\n                } else {\n                    template = kendo.template(template);\n                    template = function (data) {\n                        return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + '</li>';\n                    };\n                }\n                return template;\n            },\n            _templates: function () {\n                var template;\n                var options = this.options;\n                var templates = {\n                    template: options.template,\n                    groupTemplate: options.groupTemplate,\n                    fixedGroupTemplate: options.fixedGroupTemplate\n                };\n                if (options.columns) {\n                    for (var i = 0; i < options.columns.length; i++) {\n                        var currentColumn = options.columns[i];\n                        var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n                        templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n                    }\n                }\n                for (var key in templates) {\n                    template = templates[key];\n                    if (template && typeof template !== 'function') {\n                        templates[key] = kendo.template(template);\n                    }\n                }\n                this.templates = templates;\n            },\n            _normalizeIndices: function (indices) {\n                var newIndices = [];\n                var idx = 0;\n                for (; idx < indices.length; idx++) {\n                    if (indices[idx] !== undefined) {\n                        newIndices.push(indices[idx]);\n                    }\n                }\n                return newIndices;\n            },\n            _valueIndices: function (values, indices) {\n                var data = this._view;\n                var idx = 0;\n                var index;\n                indices = indices ? indices.slice() : [];\n                if (!values.length) {\n                    return [];\n                }\n                for (; idx < data.length; idx++) {\n                    index = this._dataItemPosition(data[idx].item, values);\n                    if (index !== -1) {\n                        indices[index] = idx;\n                    }\n                }\n                return this._normalizeIndices(indices);\n            },\n            _firstVisibleItem: function () {\n                var element = this.element[0];\n                var content = this.content[0];\n                var scrollTop = content.scrollTop;\n                var itemHeight = $(element.children[0]).height();\n                var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n                var item = element.children[itemIndex] || element.lastChild;\n                var forward = item.offsetTop < scrollTop;\n                while (item) {\n                    if (forward) {\n                        if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n                            break;\n                        }\n                        item = item.nextSibling;\n                    } else {\n                        if (item.offsetTop <= scrollTop || !item.previousSibling) {\n                            break;\n                        }\n                        item = item.previousSibling;\n                    }\n                }\n                return this._view[$(item).data('offset-index')];\n            },\n            _fixedHeader: function () {\n                if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n                    this.header.show();\n                    this.content.scroll(this._onScroll);\n                } else {\n                    this.header.hide();\n                    this.content.off('scroll', this._onScroll);\n                }\n            },\n            _renderHeader: function () {\n                var template = this.templates.fixedGroupTemplate;\n                if (!template) {\n                    return;\n                }\n                var visibleItem = this._firstVisibleItem();\n                if (visibleItem && visibleItem.group.toString().length) {\n                    this.header.html(template(visibleItem.group));\n                }\n            },\n            _renderItem: function (context) {\n                var item = '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item';\n                var dataItem = context.item;\n                var notFirstItem = context.index !== 0;\n                var selected = context.selected;\n                var isGrouped = this.isGrouped();\n                var hasColumns = this.options.columns && this.options.columns.length;\n                if (notFirstItem && context.newGroup) {\n                    item += ' k-first';\n                }\n                if (context.isLastGroupedItem && hasColumns) {\n                    item += ' k-last';\n                }\n                if (selected) {\n                    item += ' k-state-selected';\n                }\n                item += '\" aria-selected=\"' + (selected ? 'true' : 'false') + '\" data-offset-index=\"' + context.index + '\">';\n                if (hasColumns) {\n                    item += this._renderColumns(dataItem);\n                } else {\n                    item += this.templates.template(dataItem);\n                }\n                if (notFirstItem && context.newGroup) {\n                    if (hasColumns) {\n                        item += '<div class=\"k-cell k-group-cell\"><span>' + this.templates.groupTemplate(context.group) + '</span></div>';\n                    } else {\n                        item += '<div class=\"k-group\">' + this.templates.groupTemplate(context.group) + '</div>';\n                    }\n                } else if (isGrouped && hasColumns) {\n                    item += '<div class=\\'k-cell k-spacer-cell\\'></div>';\n                }\n                return item + '</li>';\n            },\n            _renderColumns: function (dataItem) {\n                var item = '';\n                for (var i = 0; i < this.options.columns.length; i++) {\n                    var currentWidth = this.options.columns[i].width;\n                    var currentWidthInt = parseInt(currentWidth, 10);\n                    var widthStyle = '';\n                    if (currentWidth && !isNaN(currentWidthInt)) {\n                        widthStyle += 'style=\\'width:';\n                        widthStyle += currentWidthInt;\n                        widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n                        widthStyle += ';\\'';\n                    }\n                    item += '<span class=\\'k-cell\\' ' + widthStyle + '>';\n                    item += this.templates['column' + i](dataItem);\n                    item += '</span>';\n                }\n                return item;\n            },\n            _render: function () {\n                var html = '';\n                var i = 0;\n                var idx = 0;\n                var context;\n                var dataContext = [];\n                var view = this.dataSource.view();\n                var values = this.value();\n                var group, newGroup, j;\n                var isGrouped = this.isGrouped();\n                if (isGrouped) {\n                    for (i = 0; i < view.length; i++) {\n                        group = view[i];\n                        newGroup = true;\n                        for (j = 0; j < group.items.length; j++) {\n                            context = {\n                                selected: this._selected(group.items[j], values),\n                                item: group.items[j],\n                                group: group.value,\n                                newGroup: newGroup,\n                                isLastGroupedItem: j === group.items.length - 1,\n                                index: idx\n                            };\n                            dataContext[idx] = context;\n                            idx += 1;\n                            html += this._renderItem(context);\n                            newGroup = false;\n                        }\n                    }\n                } else {\n                    for (i = 0; i < view.length; i++) {\n                        context = {\n                            selected: this._selected(view[i], values),\n                            item: view[i],\n                            index: i\n                        };\n                        dataContext[i] = context;\n                        html += this._renderItem(context);\n                    }\n                }\n                this._view = dataContext;\n                this.element[0].innerHTML = html;\n                if (isGrouped && dataContext.length) {\n                    this._renderHeader();\n                }\n            },\n            _selected: function (dataItem, values) {\n                var select = !this.isFiltered() || this.options.selectable === 'multiple';\n                return select && this._dataItemPosition(dataItem, values) !== -1;\n            },\n            setDSFilter: function (filter) {\n                this._lastDSFilter = extend({}, filter);\n            },\n            isFiltered: function () {\n                if (!this._lastDSFilter) {\n                    this.setDSFilter(this.dataSource.filter());\n                }\n                return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n            },\n            refresh: function (e) {\n                var that = this;\n                var action = e && e.action;\n                var skipUpdateOnBind = that.options.skipUpdateOnBind;\n                var isItemChange = action === 'itemchange';\n                var result;\n                that.trigger('dataBinding');\n                that._angularItems('cleanup');\n                that._fixedHeader();\n                that._render();\n                that.bound(true);\n                if (isItemChange || action === 'remove') {\n                    result = mapChangedItems(that._dataItems, e.items);\n                    if (result.changed.length) {\n                        if (isItemChange) {\n                            that.trigger('selectedItemChange', { items: result.changed });\n                        } else {\n                            that.value(that._getValues(result.unchanged));\n                        }\n                    }\n                } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n                    that.focus(0);\n                    if (that._skipUpdate) {\n                        that._skipUpdate = false;\n                        that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n                    }\n                } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n                    that.value(that._values);\n                }\n                if (that._valueDeferred) {\n                    that._valueDeferred.resolve();\n                }\n                that._angularItems('compile');\n                that.trigger('dataBound');\n            },\n            bound: function (bound) {\n                if (bound === undefined) {\n                    return this._bound;\n                }\n                this._bound = bound;\n            },\n            isGrouped: function () {\n                return (this.dataSource.group() || []).length;\n            }\n        });\n        ui.plugin(StaticList);\n        function last(list) {\n            return list[list.length - 1];\n        }\n        function getSelectedOption(select) {\n            var index = select.selectedIndex;\n            return index > -1 ? select.options[index] : {};\n        }\n        function mapChangedItems(selected, itemsToMatch) {\n            var itemsLength = itemsToMatch.length;\n            var selectedLength = selected.length;\n            var dataItem;\n            var found;\n            var i, j;\n            var changed = [];\n            var unchanged = [];\n            if (selectedLength) {\n                for (i = 0; i < selectedLength; i++) {\n                    dataItem = selected[i];\n                    found = false;\n                    for (j = 0; j < itemsLength; j++) {\n                        if (dataItem === itemsToMatch[j]) {\n                            found = true;\n                            changed.push({\n                                index: i,\n                                item: dataItem\n                            });\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        unchanged.push(dataItem);\n                    }\n                }\n            }\n            return {\n                changed: changed,\n                unchanged: unchanged\n            };\n        }\n        function isValidFilterExpr(expression) {\n            if (!expression || $.isEmptyObject(expression)) {\n                return false;\n            }\n            if (expression.filters && !expression.filters.length) {\n                return false;\n            }\n            return true;\n        }\n        function removeFiltersForField(expression, field) {\n            var filters;\n            var found = false;\n            if (expression.filters) {\n                filters = $.grep(expression.filters, function (filter) {\n                    found = removeFiltersForField(filter, field);\n                    if (filter.filters) {\n                        return filter.filters.length;\n                    } else {\n                        return filter.field != field;\n                    }\n                });\n                if (!found && expression.filters.length !== filters.length) {\n                    found = true;\n                }\n                expression.filters = filters;\n            }\n            return found;\n        }\n    }(window.kendo.jQuery));\n    return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n    (a3 || a2)();\n}));"]}