{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/kendo.popover.js","webpack:///./node_modules/@progress/kendo-ui/js/kendo.pivotgrid.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","1123","1383","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","$","kendo","window","Popup","ui","TooltipBase","extend","proxy","DOCUMENT","document","NS","ARROWWIDTH","TEXTBUTTONTEMPLATE","ICONTEXTBUTTONTEMPLATE","ICONBUTTON","CARDTEMPLATE","TEMPLATE","SHOW","HIDE","REVERSE","POSITIONS","bottom","origin","position","top","left","collision","right","center","DIRCLASSES","EVENTSCOUNTERPART","DIMENSIONS","offset","size","Popover","init","element","options","axis","that","this","fn","match","dimensions","_saveTitle","noop","_documentKeyDownHandler","_documentKeyDown","_actionsHandler","_actionsClick","toggleOnClick","_isShownOnClick","on","support","touch","mousedown","showOn","filter","_showAction","_dismissAction","name","actions","actionsLayout","width","height","animation","open","effects","duration","close","hide","events","_addAria","wrapper","find","length","attr","_isDialog","header","guid","body","_appendContent","target","template","children","remove","append","_buildActions","positioning","e","button","currentTarget","action","parseInt","click","sender","_attachActions","_dettachActions","off","html","index","text","iconClass","keyCode","keys","ESC","_shown","TAB","allFocusables","firstFocusable","first","lastFocusable","last","shiftKey","activeElement","trigger","preventDefault","_initPopup","callout","dir","popup","activate","_offset","_positionCallout","_addDescribedBy","_hovered","copyAnchorStyles","css","_isShownOnMouseEnter","arrow","clearTimeout","timeout","setTimeout","hideAfter","_show","current","kendoStop","anchor","one","_removeDescribedBy","removeAttr","_openPopup","cssClass","flipped","removeClass","addClass","destroy","plugin","jQuery","1057","1069","1381","Class","Comparer","data","Widget","DataSource","outerWidth","_outerWidth","outerHeight","_outerHeight","common","pivotgrid","fetchDiscover","normalizeFilter","Query","normalizeSort","toString","identity","o","map","isFunction","fetchData","createDataState","toColumns","toRows","toTree","toData","headersReducer","RESIZE","READ","CHANGE","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","MEASURES","STATERESET","AUTO","DIV","ROW_TOTAL_KEY","DATABINDING","DATABOUND","EXPANDMEMBER","HEADERTEMPLATE","COLLAPSEMEMBER","STATE_EXPANDED","STATE_COLLAPSED","HEADER_TEMPLATE","KPISTATUS_TEMPLATE","KPITREND_TEMPLATE","DATACELL_TEMPLATE","LAYOUT_TABLE","AXIS_ROWS","AXIS_COLUMNS","normalizeMeasures","measure","descriptor","descriptors","d","type","normalizeMembers","member","expand","slice","normalizeName","indexOf","accumulateMembers","accumulator","rootTuple","tuple","level","idx","members","stringify","buildPath","descriptorsForAxes","tuples","result","k","push","JSON","parse","addMissingPathMembers","firstTuple","tupleMembers","found","j","getName","hierarchy","tupleToDescriptors","descriptorsForMembers","measures","tupletoSearch","findExistingTuple","createAggregateGetter","measureGetter","getter","field","aggregatorContext","state","aggregate","dataItem","isNumber","val","isNaN","isDate","getTime","getScollWidth","div","scrollbar","createElement","style","cssText","innerHTML","appendChild","offsetWidth","scrollWidth","removeChild","functions","sum","value","count","average","max","min","PivotCubeBuilder","_normalizeDescriptors","keyField","fields","_rootTuples","rootNames","measureAggregators","root","parts","aggregatorsLength","dimensionsSchema","measureIdx","rootNamesLength","split","caption","levelName","levelNum","hasChildren","parentName","_sortMap","sortDescriptors","mapItem","key","sortedMaps","sortTree","flattenTree","directParentName","fillSortTree","i","sortItemsTree","pop","create","flatColumns","_expandedTuples","expanded","currentKeys","memberInfo","expandedNames","accumulatorKeys","isEmptyObject","_findExpandedMember","uniquePath","names","expandedIdx","join","_asTuples","rootInfo","expandedInfo","concat","_measuresInfo","rowAxis","aggregateNames","resultFuncs","formats","format","_toDataArray","measuresInfo","rowKeys","columnKeys","aggregates","n","row","column","columnKey","columnMeasureNames","rowMeasureNamesLength","rowMeasureNames","rowLength","columnLength","items","_addData","resultFunc","ordinal","fmtValue","_matchDescriptors","getters","parentField","expectedValue","_calculateAggregate","totalItem","aggregator","_processColumns","columns","rowTotal","updateColumn","path","columnIndex","childrenMap","_measureAggregators","defaultAggregate","measureDescriptors","aggregators","toLowerCase","_buildGetters","_parseDescriptors","parsedDescriptors","parseDescriptors","getRootNames","mapNames","_filter","expr","filters","operator","_normalizeFilter","logic","process","measuresRowAxis","measuresAxis","columnDescriptors","rowDescriptors","rows","rowValue","rowIdx","rowDescriptor","rowName","columnsInfo","rowsInfo","aggregatedData","columnGetters","rowGetters","processed","expandedColumns","expandedRows","hasExpandedRows","sort","axes","PivotTransport","transport","discover","read","update","success","catalog","connection","cube","PivotDataSourceV2","transportOptions","_online","XmlaTransportV2","_columns","_rows","_measuresAxis","values","_measures","serverSorting","serverPaging","serverFiltering","serverGrouping","serverAggregates","normalizeAxis","_mergeState","fetch","_data","_query","isPrevented","params","_params","newDataState","_saveState","response","_preventRefresh","error","err","columnAxes","rowAxes","measureAxes","schemaMeasures","command","restrictions","catalogName","cubeName","schemaKPIs","schemaDimensions","schemaHierarchies","dimensionName","dimensionUniqueName","schemaLevels","hierarchyName","hierarchyUniqueName","schemaCubes","schemaCatalogs","schemaMembers","_columnTuples","_rowTuples","_view","PivotDataSource","schema","cubes","catalogs","hierarchies","levels","_cubeSchema","cubeBuilder","_skipNormalize","_axes","uniqueName","defaultHierarchy","levelUniqueName","memberUniqueName","schemaData","dataGetter","_rawData","distinct","treeOp","childrenCardinality","_clearAxesData","query","rowsAxisDescriptors","columnsAxisDescriptors","_expandPath","other","memberToExpand","_lastExpanded","memberName","_descriptorsForAxis","_process","page","pageSize","group","_updateLocalData","_pristineData","Deferred","resolve","promise","expandColumn","expandRow","originalData","reader","_processResult","processedData","_requestData","columnIndexes","rowIndexes","resultAxis","axisToSkip","hasColumnTuples","_rowMeasures","_normalizeTuples","_columnMeasures","_normalizeData","columnsLength","rowsLength","validateAxis","adjustDataByColumn","membersCount","adjustDataByRow","_mergeAxes","_readData","newData","_createTuple","buildRoot","Number","_hasRoot","source","isRoot","sourceAxes","startIndex","columnMeasures","rowMeasures","oldRowsLength","newRowsLength","oldColumnsLength","newColumnsLength","parseSource","prepareDataOnColumns","mergedColumns","mergeTuples","prepareDataOnRows","mergedRows","findDataIndex","parsedRoot","memberIndex","_mergeColumnData","_mergeRowData","rowIndex","toAdd","toJSON","drop","Math","splice","dataIndex","_observe","_ranges","_addRange","_total","_pristineTotal","memberIdx","roots","indexes","tupleName","_addMissingDataItems","metadata","addEmptyDataItem","_normalizeOrdinals","lastOrdinal","dataIdx","converter","deferred","_handleCustomErrors","status","reject","done","kpis","sortFunction","currentItem","newAxis","sourceTuples","targetTuples","columnIdx","targetColumnsLength","measuresLength","tupleIndex","collection","queue","shift","counter","targetMembers","sourceMembers","equalTuples","second","equal","toFind","membersLength","addMembers","len","findParentMember","parentMember","parentPath","measurePosition","normalizeTupleMeasures","measureIndex","targetIndex","sourceIndex","calcIndex","indices","buildDataIndices","spliceIndex","baseHierarchyPath","expandMemberDescriptor","sortDescriptor","sortDescriptorForMember","crossJoin","r","crossJoinCommand","tmp","measureNames","rootName","rootLength","l","child","serializeMembers","crossJoinCommands","dataSource","filterFunctionFormats","contains","doesnotcontain","startswith","endswith","eq","neq","serializeExpression","expression","serializeFilters","serializeOptions","parentTagName","capitalize","replace","toUpperCase","xmlaDiscoverCommands","convertersMap","properties","Catalog","XmlaTransport","RemoteTransport","originalOptions","url","setup","dataType","contentType","parameterMap","ajax","fetchOptions","then","catch","asArray","object","translateAxis","captionGetter","unameGetter","levelNameGetter","levelNumGetter","childrenGetter","hierarchyGetter","parentNameGetter","Member","schemaDataReaderMap","description","groupName","displayFolder","defaultFormat","goal","trend","statusGraphic","trendGraphic","defaultMember","orderingProperty","xmlaReaderMethods","XmlaDataReader","XmlDataReader","_extend","methodName","option","xml","errors","fault","faultstring","faultcode","cells","ordinalGetter","valueGetter","fmtValueGetter","_mapSchema","obj","transports","xmla","readers","sortExpr","expressions","removeExpr","PivotSettingTarget","_refreshHandler","refresh","ns","enabled","emptyTemplate","_sortable","closest","hasClass","sortable","filterable","fieldMenu","PivotFieldMenu","messages","setting","empty","setDataSource","unbind","kendoSortable","connectWith","hint","cursor","start","item","change","add","move","newIndex","_isKPI","validate","isMeasure","Array","isArray","sortExpressions","_sort","allowUnsort","skipExpr","sortIcon","_sortIcon","icon","PivotSettingTargetV2","parent","PivotFieldMenuV2","_applyState","_sortState","_stateFilter","_savedState","_cancelChanges","deepExtend","_initialState","_redraw","_state","newState","modifyInit","focus","blur","_savedFilter","_emptyState","enable","_targetsHTML","menuenabled","PivotConfiguratorButton","_element","_attachEvents","configurator","setOptions","toggle","pivot","pivotEl","toggleClass","getKendoPivotGridV2","_setContentWidth","_updateDimensions","PivotContainer","_addClasses","configuratorPosition","className","PivotGridV2","_dataSource","_bindConfigurator","_wrapper","_columnHeadersWrapper","_rowHeadersWrapper","_contentWrapper","_columnBuilder","ColumnRowBuilder","columnHeaderTemplate","_rowBuilder","rowHeaderTemplate","_contentBuilder","ContentBuilderV2","dataCellTemplate","_scrollable","isRow","paths","eventName","reducerPayLoad","payload","tree","getTree","currentAxes","newHeaders","autoBind","notify","columnWidth","_windowResizeHandler","_progressHandler","_errorHandler","_requestStart","_error","bind","_resize","setProperty","columnsHeader","rowsHeader","scroll","scrollLeft","scrollTop","_wheelScroll","ctrlKey","delta","wheelDeltaY","_progress","progress","offsetHeight","contentTable","columnTable","calculatedWidth","minWidth","ceil","kendoPivotConfiguratorV2","cellInfoByElement","cellInfo","contentBuilder","columnsCount","rowsCount","hash","columnTuple","rowTuple","setTuples","build","setRowColumnInfo","columnHeaderLeafs","getHeaderLeafs","rowHeaderLeafs","columnHeaderBreadth","getBreadth","rowHeaderDepth","PivotGrid","columnBuilder","rowBuilder","_createLayout","ColumnBuilder","RowBuilder","ContentBuilder","_templates","builder","eventArgs","parseJSON","is","request","childrenLoaded","maxChildren","reorderable","kpiStatusTemplate","kpiTrendTemplate","measureFields","columnFields","rowFields","columnTemplate","rowTemplate","dataTemplate","useWithBlock","kendoPivotConfigurator","columnInfo","rowInfo","view","measuresTarget","rowsTarget","columnsTarget","_headerReflowTimeout","_stateResetHandler","_stateReset","reset","_measureFields","_createSettingTarget","icons","_initSettingTargets","layoutTable","leftContainer","rightContainer","gridWrapper","wrap","content","columnsHeaderTree","dom","Tree","rowsHeaderTree","contentTree","firstChild","_setSectionsWidth","_setSectionsHeight","_setContentHeight","_columnHeaderReflow","browser","mozilla","leftColumn","measureFieldsHeight","columnFieldsHeight","rowFieldsHeight","innerHeight","columnsHeight","padding","firstRowHeight","secondRowHeight","_resetColspan","skipScrollbar","clientHeight","cell","_colspan","_layoutTimeout","_axisMeasures","hasMeasure","columnAxis","render","_indexes","touchScroller","contentResized","movable","x","y","htmlNode","createMetadata","maxMembers","addColElements","table","addRowElements","addColumCell","rowEl","rowItem","cellEl","total","headerTemplate","columnHeaderRows","rowspan","rowSpan","colspan","colSpan","expandable","headerClass","treeData","headerRows","headerLeafs","breadth","rowHeaderBreadth","_tree","_breadth","_headerLeafs","tbody","_tbody","colgroup","_colGroup","_rowLength","_buildRows","_normalize","cellsLength","cellIdx","tupleAll","_rowIndex","_row","parentRow","rowKey","notFirst","collapsed","measureRow","_cell","_content","childRow","childrenLength","allCell","cellAttr","nextMember","cellChildren","memberCollapsed","rootLevelNum","maxcolSpan","allRow","firstMemberName","expandIconAttr","tuplePath","hasChild","axisInfo","axisInfoMember","skipChildren","firstEmpty","_buildRow","templateInfo","cellContent","startIdx","PivotExcelExporter","widget","columnHeaderTable","rowHeaderTable","columnHeaderLength","rowHeaderLength","autoWidth","_cells","callback","background","color","rowHeaderRows","contentRows","columnRows","dataCallback","rowRows","_freezePane","colSplit","rowSplit","workbook","sheets","freezePane","PivotExcelMixin","proto","excel","saveAsExcel","proxyURL","fileName","exporter","book","ooxml","Workbook","toDataURLAsync","dataURI","saveAs","forceProxy","prototype","PDFMixin","_drawPDF","_drawPDFShadow","avoidLinks","pdf","1382"],"mappings":"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","file":"js/chunk-vendors~06d84564.d9e96c53.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1383);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1123:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.tooltip\");\n\n/***/ }),\n\n/***/ 1383:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1123) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"popover\",\n\t name: \"Popover\",\n\t category: \"web\",\n\t description: \"The Popover widget displays a popup with additional information for an element.\",\n\t depends: [ \"tooltip\"],\n\t features: [ {\n\t id: \"popover-fx\",\n\t name: \"Animation\",\n\t description: \"Support for animation\",\n\t depends: [ \"fx\" ]\n\t } ]\n\t};\n\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t Popup = kendo.ui.Popup,\n\t TooltipBase = kendo.ui.TooltipBase,\n\t extend = $.extend,\n\t proxy = $.proxy,\n\t DOCUMENT = $(document),\n\t NS = \".kendoPopover\",\n\t ARROWWIDTH = 28,\n\t TEXTBUTTONTEMPLATE = '',\n\t ICONTEXTBUTTONTEMPLATE = '',\n\t ICONBUTTON = '',\n\t CARDTEMPLATE = '#if (header) {#
#=header#
#}#' +\n\t '
#=body#
' +\n\t '#if (actions){ #
#=actions#
#}#',\n\t TEMPLATE = '
' +\n\t '#if (callout){ #
#}#' +\n\t '
',\n\t SHOW = \"show\",\n\t HIDE = \"hide\",\n\t REVERSE = {\n\t \"top\": \"bottom\",\n\t \"bottom\": \"top\",\n\t \"left\": \"right\",\n\t \"right\": \"left\",\n\t \"center\": \"center\"\n\t },\n\t POSITIONS = {\n\t bottom: {\n\t origin: \"bottom center\",\n\t position: \"top center\"\n\t },\n\t top: {\n\t origin: \"top center\",\n\t position: \"bottom center\"\n\t },\n\t left: {\n\t origin: \"center left\",\n\t position: \"center right\",\n\t collision: \"fit flip\"\n\t },\n\t right: {\n\t origin: \"center right\",\n\t position: \"center left\",\n\t collision: \"fit flip\"\n\t },\n\t center: {\n\t position: \"center center\",\n\t origin: \"center center\"\n\t }\n\t },\n\t DIRCLASSES = {\n\t bottom: \"n\",\n\t top: \"s\",\n\t left: \"e\",\n\t right: \"w\",\n\t center: \"n\"\n\t },\n\t EVENTSCOUNTERPART = {\n\t \"mouseenter\" : \"mouseleave\",\n\t \"focus\": \"blur\",\n\t \"focusin\": \"focusout\"\n\t },\n\t DIMENSIONS = {\n\t \"horizontal\": { offset: \"top\", size: \"outerHeight\" },\n\t \"vertical\": { offset: \"left\", size: \"outerWidth\" }\n\t };\n\n\t var Popover = TooltipBase.extend({\n\t init: function(element, options) {\n\t var that = this,\n\t axis;\n\n\t TooltipBase.fn.init.call(that, element, options);\n\n\t axis = that.options.position.match(/left|right/) ? \"horizontal\" : \"vertical\";\n\n\t that.dimensions = DIMENSIONS[axis];\n\t that._saveTitle = $.noop;\n\n\t that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n\t that._actionsHandler = proxy(that._actionsClick, that);\n\n\t if (that.options.toggleOnClick && that._isShownOnClick()) {\n\t that.element.on((kendo.support.touch ? kendo.support.mousedown: that.options.showOn) + NS, that.options.filter, proxy(that._showAction, that));\n\t }\n\n\t if (!that._isShownOnClick()) {\n\t that.element.on(EVENTSCOUNTERPART[that.options.showOn], that.options.filter, proxy(that._dismissAction, that));\n\t }\n\t },\n\n\t options: {\n\t name: \"Popover\",\n\t filter: \"\",\n\t actions: [],\n\t actionsLayout: \"center\",\n\t position: \"bottom\",\n\t showOn: \"mouseenter\",\n\t toggleOnClick: false,\n\t width: null,\n\t height: null,\n\t animation: {\n\t open: {\n\t effects: \"fade:in\",\n\t duration: 0\n\t },\n\t close: {\n\t duration: 40,\n\t hide: true\n\t }\n\t }\n\t },\n\n\t events: [ SHOW, HIDE ],\n\n\t _addAria: function () {\n\t var that = this;\n\t var options = that.options;\n\t var id;\n\n\t if (that._isShownOnClick() && that.wrapper.find(\"a,input,select,textarea,button\").length) {\n\t that.wrapper.attr(\"role\", \"dialog\");\n\t that._isDialog = true;\n\n\t if (options.header) {\n\t id = kendo.guid();\n\t that.wrapper\n\t .attr(\"aria-labelledby\", id)\n\t .find(\".k-popover-header\").attr(\"id\", id);\n\t }\n\n\t if (options.body) {\n\t id = kendo.guid();\n\t that.wrapper\n\t .attr(\"aria-describedby\", id)\n\t .find(\".k-popover-body\").attr(\"id\", id);\n\t }\n\t } else {\n\t that.wrapper.attr(\"role\", \"tooltip\");\n\t }\n\t },\n\n\t _appendContent: function (target) {\n\t var that = this,\n\t options = that.options,\n\t template = that.options.template;\n\n\t that.wrapper.children(\":not(.k-popover-callout)\").remove();\n\n\t if (template) {\n\t that.wrapper.append(kendo.template(template)({ target: target }));\n\t } else {\n\t that.wrapper.append(kendo.template(CARDTEMPLATE)({\n\t header: kendo.template(options.header || \"\")({ target: target }),\n\t body: kendo.template(options.body || \"\")({ target: target }),\n\t actions: that._buildActions(options.actions),\n\t positioning: options.actionsLayout\n\t }));\n\t }\n\t },\n\n\t _actionsClick: function (e) {\n\t var that = this;\n\t var actions = that.options.actions;\n\t var button = $(e.currentTarget);\n\n\t var action = actions[parseInt(button.attr(kendo.attr(\"index\")), 10)];\n\n\t if (action.click) {\n\t action.click.call(that, {\n\t sender: that,\n\t target: button\n\t });\n\t }\n\t },\n\n\t _attachActions: function () {\n\t var that = this;\n\n\t that.wrapper.on(\"click\" + NS, \".k-popover-actions .k-button\", that._actionsHandler);\n\t },\n\n\t _dettachActions: function () {\n\t var that = this;\n\n\t if (that.wrapper) {\n\t that.wrapper.off(\"click\" + NS, that._actionsHandler);\n\t }\n\t },\n\n\t _buildActions: function (actions) {\n\t if (!actions.length) {\n\t return;\n\t }\n\n\t var html = \"\";\n\t var action;\n\t for (var index = 0; index < actions.length; index++) {\n\t action = actions[index];\n\n\t if (action.text && action.iconClass) {\n\t html += kendo.template(ICONTEXTBUTTONTEMPLATE)( { text: action.text, index: kendo.attr(\"index\") + \"=\" + index, iconClass: action.iconClass });\n\t } else if(action.iconClass && !action.text) {\n\t html += kendo.template(ICONBUTTON)( { index: kendo.attr(\"index\") + \"=\" + index, iconClass: action.iconClass });\n\t } else {\n\t html += kendo.template(TEXTBUTTONTEMPLATE)( { text: action.text, index: kendo.attr(\"index\") + \"=\" + index });\n\t }\n\t }\n\n\t return html;\n\t },\n\n\t _documentKeyDown: function(e) {\n\t if (e.keyCode === kendo.keys.ESC) {\n\t this._shown = false;\n\t this._dismissAction();\n\t }\n\n\t if (e.keyCode === kendo.keys.TAB) {\n\t var allFocusables = this.wrapper.find(\":kendoFocusable\");\n\t var firstFocusable = allFocusables.first();\n\t var lastFocusable = allFocusables.last();\n\t if (e.shiftKey) {\n\t if (document.activeElement === firstFocusable[0]) {\n\t lastFocusable.trigger(\"focus\");\n\t e.preventDefault();\n\t }\n\t } else {\n\t if (document.activeElement === lastFocusable[0]) {\n\t firstFocusable.trigger(\"focus\");\n\t e.preventDefault();\n\t }\n\t }\n\t }\n\t },\n\n\t _initPopup: function() {\n\t var that = this,\n\t options = that.options,\n\t wrapper = $(kendo.template(TEMPLATE)({\n\t callout: options.callout && options.position !== \"center\",\n\t dir: DIRCLASSES[options.position]\n\t }));\n\n\t that.wrapper = wrapper;\n\t that.popup = new Popup(wrapper, extend({\n\t activate: function() {\n\t that._offset(that.options.position, that.options.offset, ARROWWIDTH);\n\t that._positionCallout();\n\n\t that._attachActions();\n\n\t DOCUMENT.on(\"keydown\" + NS, that._documentKeyDownHandler);\n\t if (that._isDialog) {\n\t that.wrapper.find(\":kendoFocusable\").first().trigger(\"focus\");\n\t } else {\n\t that._addDescribedBy();\n\t }\n\t that.trigger(SHOW);\n\t that.popup._hovered = undefined;\n\t },\n\t close: function(e) {\n\t if (that.options.toggleOnClick && that._shown) {\n\t e.preventDefault();\n\t return;\n\t }\n\t that.trigger(HIDE);\n\t },\n\t copyAnchorStyles: false,\n\t animation: options.animation\n\t }, POSITIONS[options.position]));\n\n\t wrapper.css({\n\t width: options.width,\n\t height: options.height\n\t });\n\n\t if (that._isShownOnMouseEnter()) {\n\t wrapper.on(\"mouseleave\" + NS, proxy(that._dismissAction, that));\n\t }\n\n\t that.arrow = wrapper.find(\".k-popover-callout\");\n\t },\n\n\t _dismissAction: function () {\n\t var that = this;\n\n\t clearTimeout(that.timeout);\n\n\t that.timeout = setTimeout(function() {\n\t if (that.popup && !that.popup._hovered) {\n\t that.popup.close();\n\t }\n\t }, that.options.hideAfter);\n\t },\n\n\t _showAction: function () {\n\t var that = this;\n\t that._shown = !that._shown;\n\n\t if (!that._shown) {\n\t that.popup.close();\n\t }\n\t },\n\n\t _show: function(target) {\n\t var that = this,\n\t current = that.target();\n\n\t if (!that.popup) {\n\t that._initPopup();\n\t }\n\n\t if (current && current[0] != target[0]) {\n\t that.popup.close();\n\t that.popup.element.kendoStop(true, true);\n\t }\n\n\t if (!current || current[0] != target[0]) {\n\t that._appendContent(target);\n\t that._addAria();\n\t that.popup.options.anchor = target;\n\t }\n\n\t that.popup.one(\"deactivate\", function() {\n\t DOCUMENT.off(\"keydown\" + NS, that._documentKeyDownHandler);\n\n\t if (!that._isDialog) {\n\t that._removeDescribedBy(that.target());\n\t this.element.removeAttr(\"id\");\n\t }\n\t that._dettachActions();\n\t });\n\n\t that._openPopup();\n\t },\n\n\t _positionCallout: function() {\n\t var that = this,\n\t position = that.options.position,\n\t popup = that.popup,\n\t cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position];\n\n\t that.arrow.removeClass(\"k-callout-s k-callout-w k-callout-e k-callout-n\")\n\t .addClass(\"k-callout-\" + cssClass);\n\t },\n\n\t destroy: function() {\n\t this.element.off(NS);\n\n\t this._dettachActions();\n\t clearTimeout(this.timeout);\n\t DOCUMENT.off(\"keydown\" + NS, this._documentKeyDownHandler);\n\t TooltipBase.fn.destroy.call(this);\n\t }\n\t });\n\n\t kendo.ui.plugin(Popover);\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1381);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1057:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.dom\");\n\n/***/ }),\n\n/***/ 1069:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./kendo.data\");\n\n/***/ }),\n\n/***/ 1381:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1382), __webpack_require__(1057), __webpack_require__(1069) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\tvar __meta__ = { // jshint ignore:line\n\t id: \"pivotgrid\",\n\t name: \"PivotGrid\",\n\t category: \"web\",\n\t description: \"The PivotGrid widget is a data summarization tool.\",\n\t depends: [ \"dom\", \"data\", \"data.xml\", \"sortable\" ],\n\t features: [{\n\t id: \"pivotgrid-configurator\",\n\t name: \"Configurator\",\n\t description: \"The PivotConfigurator widget allows the user to select data slices displayed in PivotGrid\",\n\t depends: [ \"pivot.configurator\" ]\n\t }, {\n\t id: \"pivotgrid-filtering\",\n\t name: \"Filtering\",\n\t description: \"Support for filtering\",\n\t depends: [ \"pivot.fieldmenu\" ]\n\t }, {\n\t id: \"pivotgrid-excel-export\",\n\t name: \"Excel export\",\n\t description: \"Export pivot grid data as Excel spreadsheet\",\n\t depends: [ \"ooxml\" ]\n\t }, {\n\t id: \"pivotgrid-pdf-export\",\n\t name: \"PDF export\",\n\t description: \"Export pivot grid data as PDF\",\n\t depends: [ \"pdf\", \"drawing\" ]\n\t }, {\n\t id: \"mobile-scroller\",\n\t name: \"Mobile scroller\",\n\t description: \"Support for kinetic scrolling in mobile device\",\n\t depends: [ \"mobile.scroller\" ]\n\t }]\n\t};\n\n\t/*jshint eqnull: true*/\n\t(function($, undefined) {\n\t var kendo = window.kendo,\n\t ui = kendo.ui,\n\t Class = kendo.Class,\n\t Comparer = kendo.data.Comparer,\n\t Widget = ui.Widget,\n\t DataSource = kendo.data.DataSource,\n\t outerWidth = kendo._outerWidth,\n\t outerHeight = kendo._outerHeight,\n\t common = window.kendo.pivotgrid.common,\n\t fetchDiscover = common.fetchDiscover,\n\t normalizeFilter = kendo.data.Query.normalizeFilter,\n\t normalizeSort = kendo.data.Query.normalizeSort,\n\t toString = {}.toString,\n\t identity = function(o) { return o; },\n\t map = $.map,\n\t extend = $.extend,\n\t isFunction = kendo.isFunction,\n\t fetchData = common.fetchData,\n\t createDataState = common.createDataState,\n\t toColumns = common.toColumns,\n\t toRows = common.toRows,\n\t toTree = common.toTree,\n\t toData = common.toData,\n\t headersReducer = common.headersReducer,\n\t RESIZE = \"resize\",\n\t READ = \"read\",\n\t CHANGE = \"change\",\n\t ERROR = \"error\",\n\t REQUESTSTART = \"requestStart\",\n\t PROGRESS = \"progress\",\n\t REQUESTEND = \"requestEnd\",\n\t MEASURES = \"Measures\",\n\t STATERESET = \"stateReset\",\n\t AUTO = \"auto\",\n\t DIV = \"
\",\n\t NS = \".kendoPivotGrid\",\n\t ROW_TOTAL_KEY = \"__row_total__\",\n\t DATABINDING = \"dataBinding\",\n\t DATABOUND = \"dataBound\",\n\t EXPANDMEMBER = \"expandMember\",\n\t HEADERTEMPLATE = ''+\n\t '#if (expandable) {# #}#'+\n\t '',\n\t COLLAPSEMEMBER = \"collapseMember\",\n\t STATE_EXPANDED = \"k-i-collapse\",\n\t STATE_COLLAPSED = \"k-i-expand\",\n\t HEADER_TEMPLATE = \"#: data.member.caption || data.member.name #\",\n\t KPISTATUS_TEMPLATE = ' 0 ? \\\"open\\\" : data.dataItem.value < 0 ? \\\"deny\\\" : \\\"hold\\\"#\" title=\"#:data.dataItem.value#\">',\n\t KPITREND_TEMPLATE = ' 0 ? \\\"increase\\\" : data.dataItem.value < 0 ? \\\"decrease\\\" : \\\"equal\\\"#\" title=\"#:data.dataItem.value#\">',\n\t DATACELL_TEMPLATE = '#= data.dataItem ? kendo.htmlEncode(data.dataItem.fmtValue || data.dataItem.value) || \" \" : \" \" #',\n\t LAYOUT_TABLE = '' +\n\t '' +\n\t '' +\n\t '' +\n\t '' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
' +\n\t '
';\n\t var AXIS_ROWS = \"rows\";\n\t var AXIS_COLUMNS = \"columns\";\n\n\t function normalizeMeasures(measure) {\n\t var descriptor = typeof measure === \"string\" ? [{ name: measure }] : measure;\n\t var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n\t return map(descriptors, function(d) {\n\t if (typeof d === \"string\") {\n\t return { name: d };\n\t }\n\t return { name: d.name, type: d.type };\n\t });\n\t }\n\n\t function normalizeMembers(member) {\n\t var descriptor = typeof member === \"string\" ? [{ name: [member], expand: false }] : member;\n\t var descriptors = toString.call(descriptor) === \"[object Array]\" ? descriptor : (descriptor !== undefined ? [descriptor] : []);\n\n\t return map(descriptors, function(d) {\n\t if (typeof d === \"string\") {\n\t return { name: [d], expand: false };\n\t }\n\t return { name: (toString.call(d.name) === \"[object Array]\" ? d.name.slice() : [d.name]), expand: d.expand };\n\t });\n\t }\n\n\t function normalizeName(name) {\n\t if (name.indexOf(\" \") !== -1) {\n\t name = '[\"' + name + '\"]';\n\t }\n\n\t return name;\n\t }\n\n\t function accumulateMembers(accumulator, rootTuple, tuple, level) {\n\t var idx, length;\n\t var children;\n\t var member;\n\n\t if (!tuple) {\n\t tuple = rootTuple;\n\t }\n\n\t if (!level) {\n\t level = 0;\n\t }\n\n\t member = tuple.members[level];\n\n\t if (!member || member.measure) { //return if no member or measure\n\t return;\n\t }\n\n\t children = member.children;\n\t length = children.length;\n\n\t if (tuple === rootTuple) {\n\t accumulator[kendo.stringify([member.name])] = !!length;\n\t } else if (length) {\n\t accumulator[kendo.stringify(buildPath(tuple, level))] = true;\n\t }\n\n\t if (length) {\n\t for (idx = 0; idx < length; idx++) {\n\t accumulateMembers(accumulator, rootTuple, children[idx], level);\n\t }\n\t }\n\n\t accumulateMembers(accumulator, rootTuple, tuple, level + 1);\n\t }\n\n\t function descriptorsForAxes(tuples) {\n\t var result = {};\n\n\t if (tuples.length) {\n\t accumulateMembers(result, tuples[0]);\n\t }\n\n\t var descriptors = [];\n\t for (var k in result) {\n\t descriptors.push({ name: JSON.parse(k), expand: result[k] });\n\t }\n\n\t return descriptors;\n\t }\n\n\t function addMissingPathMembers(members, axis) {\n\t var tuples = axis.tuples || [];\n\t var firstTuple = tuples[0];\n\n\t if (firstTuple && members.length < firstTuple.members.length) {\n\t var tupleMembers = firstTuple.members;\n\n\t for (var idx = 0; idx < tupleMembers.length; idx++) {\n\t if (tupleMembers[idx].measure) {\n\t continue;\n\t }\n\n\t var found = false;\n\t for (var j = 0; j < members.length; j++) {\n\t if (getName(members[j]).indexOf(tupleMembers[idx].hierarchy) === 0) {\n\t found = true;\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t members.push({ name: [tupleMembers[idx].name], expand: false }); //calling normalize here to make name from string to array\n\t }\n\t }\n\t }\n\t }\n\n\t function tupleToDescriptors(tuple) {\n\t var result = [];\n\t var members = tuple.members;\n\n\t for (var idx = 0; idx < members.length; idx++) {\n\t if (members[idx].measure) {\n\t continue;\n\t }\n\n\t //make tuple name an array\n\t result.push({ name: [members[idx].name], expand: members[idx].children.length > 0});\n\t }\n\n\t return result;\n\t }\n\n\t function descriptorsForMembers(axis, members, measures) {\n\t axis = axis || {};\n\n\t addMissingPathMembers(members, axis);\n\n\t if (measures.length > 1) {\n\t members.push({\n\t name: MEASURES,\n\t measure: true,\n\t children: normalizeMembers(measures)\n\t });\n\t }\n\n\t var tupletoSearch = {\n\t members: members\n\t };\n\n\t if (axis.tuples) {\n\t var result = findExistingTuple(axis.tuples, tupletoSearch);\n\t if (result.tuple) {\n\t members = tupleToDescriptors(result.tuple);\n\t }\n\t }\n\n\t return members;\n\t }\n\n\t function createAggregateGetter(m) {\n\t var measureGetter = kendo.getter(m.field, true);\n\t return function(aggregatorContext, state) {\n\t return m.aggregate(measureGetter(aggregatorContext.dataItem), state, aggregatorContext);\n\t };\n\t }\n\n\t function isNumber(val) {\n\t return typeof val === \"number\" && !isNaN(val);\n\t }\n\n\t function isDate(val) {\n\t return val && val.getTime;\n\t }\n\n\t function getScollWidth() {\n\t var scrollbar = 0;\n\t var div;\n\t if (document && document.createElement) {\n\t div = document.createElement('div');\n\n\t div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n\t div.innerHTML = ' ';\n\t document.body.appendChild(div);\n\n\t scrollbar = div.offsetWidth - div.scrollWidth;\n\n\t document.body.removeChild(div);\n\t }\n\n\t return scrollbar;\n\t }\n\n\t var functions = {\n\t sum: function(value, state) {\n\t var accumulator = state.accumulator;\n\n\t if (!isNumber(accumulator)) {\n\t accumulator = value;\n\t } else if (isNumber(value)) {\n\t accumulator += value;\n\t }\n\n\t return accumulator;\n\t },\n\t count: function(value, state) {\n\t return (state.accumulator || 0) + 1;\n\t },\n\t average: {\n\t aggregate: function(value, state) {\n\t var accumulator = state.accumulator;\n\n\t if (state.count === undefined) {\n\t state.count = 0;\n\t }\n\n\t if (!isNumber(accumulator)) {\n\t accumulator = value;\n\t } else if (isNumber(value)) {\n\t accumulator += value;\n\t }\n\n\t if (isNumber(value)) {\n\t state.count++;\n\t }\n\n\t return accumulator;\n\t },\n\t result: function(state) {\n\t var accumulator = state.accumulator;\n\n\t if (isNumber(accumulator)) {\n\t accumulator = accumulator / state.count;\n\t }\n\n\t return accumulator;\n\t }\n\t },\n\t max: function(value, state) {\n\t var accumulator = state.accumulator;\n\n\t if (!isNumber(accumulator) && !isDate(accumulator)) {\n\t accumulator = value;\n\t }\n\n\t if(accumulator < value && (isNumber(value) || isDate(value))) {\n\t accumulator = value;\n\t }\n\t return accumulator;\n\t },\n\t min: function(value, state) {\n\t var accumulator = state.accumulator;\n\n\t if (!isNumber(accumulator) && !isDate(accumulator)) {\n\t accumulator = value;\n\t }\n\n\t if(accumulator > value && (isNumber(value) || isDate(value))) {\n\t accumulator = value;\n\t }\n\t return accumulator;\n\t }\n\t };\n\n\t var PivotCubeBuilder = Class.extend({\n\t init: function(options) {\n\t this.options = extend({}, this.options, options);\n\t this.dimensions = this._normalizeDescriptors(\"field\", this.options.dimensions);\n\t this.measures = this._normalizeDescriptors(\"name\", this.options.measures);\n\t },\n\n\t _normalizeDescriptors: function(keyField, descriptors) {\n\t descriptors = descriptors || {};\n\t var fields = {};\n\t var field;\n\n\t if (toString.call(descriptors) === \"[object Array]\") {\n\t for (var idx = 0, length = descriptors.length; idx < length; idx++) {\n\t field = descriptors[idx];\n\t if (typeof field === \"string\") {\n\t fields[field] = {};\n\t } else if (field[keyField]) {\n\t fields[field[keyField]] = field;\n\t }\n\t }\n\t descriptors = fields;\n\t }\n\n\t return descriptors;\n\t },\n\n\t _rootTuples: function(rootNames, measureAggregators) {\n\t var aggregatorsLength = measureAggregators.length || 1;\n\t var dimensionsSchema = this.dimensions || [];\n\t var root, name, parts;\n\t var measureIdx = 0;\n\t var idx;\n\n\t var rootNamesLength = rootNames.length;\n\t var result = [];\n\t var keys = [];\n\n\t if (rootNamesLength || measureAggregators.length) {\n\t for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n\n\t root = { members: [] };\n\n\t for (idx = 0; idx < rootNamesLength; idx++) {\n\t name = rootNames[idx];\n\t parts = name.split(\"&\");\n\n\t root.members[root.members.length] = {\n\t children: [],\n\t caption: (dimensionsSchema[name] || {}).caption || \"All\",\n\t name: name,\n\t levelName: name,\n\t levelNum: \"0\",\n\t hasChildren: true,\n\t parentName: parts.length > 1 ? parts[0] : undefined,\n\t hierarchy: name\n\t };\n\t }\n\n\t if (aggregatorsLength > 1) {\n\t root.members[root.members.length] = {\n\t children: [],\n\t caption: (measureAggregators[measureIdx]).caption,\n\t name: measureAggregators[measureIdx].descriptor.name,\n\t levelName: \"MEASURES\",\n\t levelNum: \"0\",\n\t hasChildren: false,\n\t parentName: undefined,\n\t hierarchy: \"MEASURES\"\n\t };\n\t }\n\n\t result[result.length] = root;\n\t }\n\n\t keys.push(ROW_TOTAL_KEY);\n\t }\n\n\t return {\n\t keys: keys,\n\t tuples: result\n\t };\n\t },\n\n\t _sortMap: function(map, sortDescriptors) {\n\t var sortedMaps = [];\n\t var sortTree = [];\n\t var flattenTree = [];\n\t var mapItem;\n\t var key;\n\n\t for (key in map) {\n\t if (!map[key].directParentName) {\n\t sortTree.push($.extend({}, { name :key, parentName: map[key].parentName }));\n\t }\n\t }\n\n\t //if there are no root this means that something is expanding\n\t //and we should only sort that part of the tree\n\t if (!sortTree.length) {\n\t for (key in map) {\n\t sortTree.push($.extend({}, { name :key, parentName: map[key].parentName }));\n\t }\n\t }\n\n\t fillSortTree(sortTree, map);\n\n\t // fill tree recursive\n\t for (var i = 0; i < sortDescriptors.length; i++) {\n\t sortItemsTree(sortDescriptors[i].field.split(\".\").pop(), sortTree, Comparer.create({ field: \"name\", dir: sortDescriptors[i].dir }));\n\t }\n\n\t flattenTree = flatColumns(sortTree);\n\n\t //we need to flatten the structure so the tuples can build correctly\n\t for (var j = 0; j < flattenTree.length; j++) {\n\t mapItem = map[flattenTree[j].name];\n\t mapItem.index = j;\n\t sortedMaps[j] = mapItem;\n\t }\n\n\t return sortedMaps;\n\t },\n\n\t _expandedTuples: function(map, expanded, measureAggregators, sortDescriptors) {\n\t var aggregatorsLength = measureAggregators.length || 1;\n\t var dimensionsSchema = this.dimensions || [];\n\t var measureIdx;\n\t var tuple;\n\n\t var key;\n\t var mapItem;\n\t var current;\n\t var currentKeys;\n\t var accumulator = [];\n\t var accumulatorKeys = [];\n\t var memberInfo;\n\n\t var expandedNames;\n\t var parts;\n\t var name;\n\t var idx;\n\n\t if (sortDescriptors && sortDescriptors.length && !$.isEmptyObject(map)) {\n\t map = this._sortMap(map, sortDescriptors);\n\t }\n\n\t for (key in map) {\n\t mapItem = map[key];\n\t memberInfo = this._findExpandedMember(expanded, mapItem.uniquePath);\n\n\t current = accumulator[memberInfo.index] || [];\n\t currentKeys = accumulatorKeys[memberInfo.index] || [];\n\n\t expandedNames = memberInfo.member.names;\n\n\t for (measureIdx = 0; measureIdx < aggregatorsLength; measureIdx++) {\n\t tuple = { members: [] };\n\t for (idx = 0; idx < expandedNames.length; idx++) {\n\t if (idx === memberInfo.member.expandedIdx) {\n\t tuple.members[tuple.members.length] = {\n\t children: [],\n\t caption: mapItem.value,\n\t name: mapItem.name,\n\t hasChildren: false,\n\t levelNum: 1,\n\t levelName: mapItem.parentName + mapItem.name,\n\t parentName: mapItem.parentName,\n\t hierarchy: mapItem.parentName + mapItem.name\n\t };\n\n\t if (measureIdx === 0) {\n\t currentKeys.push(buildPath(tuple, idx).join(\"\"));\n\t }\n\t } else {\n\t name = expandedNames[idx];\n\t parts = name.split(\"&\");\n\t tuple.members[tuple.members.length] = {\n\t children: [],\n\t caption: (dimensionsSchema[name] || {}).caption || \"All\",\n\t name: name,\n\t levelName: name,\n\t levelNum: \"0\",\n\t hasChildren: true,\n\t parentName: parts.length > 1 ? parts[0] : undefined,\n\t hierarchy: name\n\t };\n\t }\n\t }\n\n\t if (aggregatorsLength > 1) {\n\t tuple.members[tuple.members.length] = {\n\t children: [],\n\t caption: measureAggregators[measureIdx].caption,\n\t name: measureAggregators[measureIdx].descriptor.name,\n\t levelName: \"MEASURES\",\n\t levelNum: \"0\",\n\t hasChildren: true,\n\t parentName: undefined,\n\t hierarchy: \"MEASURES\"\n\t };\n\t }\n\n\t current[current.length] = tuple;\n\t }\n\n\t accumulator[memberInfo.index] = current;\n\t accumulatorKeys[memberInfo.index] = currentKeys;\n\t }\n\n\t return {\n\t keys: accumulatorKeys,\n\t tuples: accumulator\n\t };\n\t },\n\n\t _findExpandedMember: function(members, parentName) {\n\t for (var idx = 0; idx < members.length; idx++) {\n\t if (members[idx].uniquePath === parentName) {\n\t return {\n\t member: members[idx],\n\t index: idx\n\t };\n\t }\n\t }\n\t },\n\n\t _asTuples: function(map, descriptor, measureAggregators, sortDescriptors) {\n\t measureAggregators = measureAggregators || [];\n\n\t var rootInfo = this._rootTuples(descriptor.root, measureAggregators);\n\t var expandedInfo = this._expandedTuples(map, descriptor.expanded, measureAggregators, sortDescriptors);\n\n\t return {\n\t keys: [].concat.apply(rootInfo.keys, expandedInfo.keys),\n\t tuples: [].concat.apply(rootInfo.tuples, expandedInfo.tuples)\n\t };\n\t },\n\n\t _measuresInfo: function(measures, rowAxis) {\n\t var idx = 0;\n\t var length = measures && measures.length;\n\n\t var aggregateNames = [];\n\t var resultFuncs= {};\n\t var formats = {};\n\n\t var descriptors = (this.measures || {});\n\t var measure;\n\t var name;\n\n\t for (; idx < length; idx++) {\n\t name = measures[idx].descriptor.name;\n\t measure = descriptors[name] || {};\n\n\t aggregateNames.push(name);\n\n\t if (measure.result) {\n\t resultFuncs[name] = measure.result;\n\t }\n\n\t if (measure.format) {\n\t formats[name] = measure.format;\n\t }\n\t }\n\n\t return {\n\t names: aggregateNames,\n\t formats: formats,\n\t resultFuncs: resultFuncs,\n\t rowAxis: rowAxis\n\t };\n\t },\n\n\t _toDataArray: function(map, measuresInfo, rowKeys, columnKeys) {\n\t var result = [];\n\n\t var aggregates;\n\t var name, i, j, k, n;\n\t var row, column, columnKey;\n\n\t var rowMeasureNamesLength = 1;\n\t var rowMeasureNames = [];\n\t var columnMeasureNames;\n\n\t var rowLength = rowKeys.length || 1;\n\t var columnLength = columnKeys.length || 1;\n\n\t if (measuresInfo.rowAxis) {\n\t rowMeasureNames = measuresInfo.names;\n\t rowMeasureNamesLength = rowMeasureNames.length;\n\t } else {\n\t columnMeasureNames = measuresInfo.names;\n\t }\n\n\t for (i = 0; i < rowLength; i++) {\n\t row = map[rowKeys[i] || ROW_TOTAL_KEY];\n\n\t for (n = 0; n < rowMeasureNamesLength; n++) {\n\t if (measuresInfo.rowAxis) {\n\t columnMeasureNames = [rowMeasureNames[n]];\n\t }\n\n\t for (j = 0; j < columnLength; j++) {\n\t columnKey = columnKeys[j] || ROW_TOTAL_KEY;\n\t column = row.items[columnKey];\n\n\t if (columnKey === ROW_TOTAL_KEY) {\n\t aggregates = row.aggregates;\n\t } else {\n\t aggregates = column ? column.aggregates : {};\n\t }\n\n\t for (k = 0; k < columnMeasureNames.length; k++) {\n\t name = columnMeasureNames[k];\n\t this._addData(result, aggregates[name], measuresInfo.formats[name], measuresInfo.resultFuncs[name]);\n\t }\n\t }\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t _addData: function(result, value, format, resultFunc) {\n\t var fmtValue = \"\";\n\t var ordinal;\n\n\t if (value) {\n\t value = resultFunc ? resultFunc(value) : value.accumulator;\n\t fmtValue = format ? kendo.format(format, value) : value;\n\t }\n\n\t ordinal = result.length;\n\n\t result[ordinal] = {\n\t ordinal: ordinal,\n\t value: value || \"\",\n\t fmtValue: fmtValue\n\t };\n\t },\n\n\t _matchDescriptors: function(dataItem, descriptor, getters) {\n\t var parts;\n\t var parentField;\n\t var expectedValue;\n\n\t var names = descriptor.names;\n\t var idx = descriptor.expandedIdx;\n\t var value;\n\n\t while (idx > 0) {\n\t parts = names[--idx].split(\"&\");\n\t if (parts.length > 1) {\n\t parentField = parts[0];\n\t expectedValue = parts[1];\n\n\t value = getters[parentField](dataItem);\n\t value = (value !== undefined && value !== null) ? value.toString() : value;\n\n\t if (value != expectedValue) {\n\t return false;\n\t }\n\t }\n\t }\n\t return true;\n\t },\n\n\t _calculateAggregate: function(measureAggregators, aggregatorContext, totalItem) {\n\t var result = {};\n\t var state;\n\t var name;\n\n\t for (var measureIdx = 0; measureIdx < measureAggregators.length; measureIdx++) {\n\t name = measureAggregators[measureIdx].descriptor.name;\n\t state = totalItem.aggregates[name] || { };\n\t state.accumulator = measureAggregators[measureIdx].aggregator(aggregatorContext, state);\n\t result[name] = state;\n\t }\n\n\t return result;\n\t },\n\n\t _processColumns: function(measureAggregators, descriptors, getters, columns, aggregatorContext, rowTotal, state, updateColumn) {\n\t var value;\n\t var descriptor;\n\t var column;\n\t var totalItem;\n\t var key, name, parentName, path;\n\t var dataItem = aggregatorContext.dataItem;\n\t var idx = 0;\n\n\t for (; idx < descriptors.length; idx++) {\n\t descriptor = descriptors[idx];\n\n\t //checks whether the dataItem is relevant to the descriptors\n\t if (!this._matchDescriptors(dataItem, descriptor, getters)) {\n\t continue;\n\t }\n\n\t path = descriptor.names.slice(0, descriptor.expandedIdx).join(\"\");\n\t name = descriptor.names[descriptor.expandedIdx];\n\n\n\t value = getters[name](dataItem);\n\t value = (value !== undefined && value !== null) ? value.toString() : value;\n\n\t parentName = name;\n\t name = name + \"&\" + value;\n\t key = path + name;\n\n\t column = columns[key] || {\n\t index: state.columnIndex,\n\t parentName: parentName,\n\t name: name,\n\t directParentName: path.indexOf(\"&\") !== -1 ? path: \"\",\n\t uniquePath: path + parentName,\n\t childrenMap : {},\n\t value: value\n\t };\n\n\t if (path && columns[path] && !columns[path].childrenMap[path + parentName + \"&\" + value]) {\n\t columns[path].childrenMap[path + parentName + \"&\" + value] = true;\n\t }\n\n\t totalItem = rowTotal.items[key] || {\n\t aggregates: {}\n\t };\n\n\t rowTotal.items[key] = {\n\t index: column.index,\n\t aggregates: this._calculateAggregate(measureAggregators, aggregatorContext, totalItem)\n\t };\n\n\t if (updateColumn) {\n\t if (!columns[key]) {\n\t state.columnIndex++;\n\t }\n\t columns[key] = column;\n\t }\n\t }\n\t },\n\n\t _measureAggregators: function(options) {\n\t var measureDescriptors = options.measures || [];\n\t var measures = this.measures || {};\n\t var aggregators = [];\n\t var descriptor, measure, idx, length;\n\t var defaultAggregate, aggregate;\n\n\t if (measureDescriptors.length) {\n\t for (idx = 0, length = measureDescriptors.length; idx < length; idx++) {\n\t descriptor = measureDescriptors[idx];\n\t measure = measures[descriptor.name];\n\t defaultAggregate = null;\n\n\t if (measure) {\n\t aggregate = measure.aggregate;\n\t if (typeof aggregate === \"string\") {\n\t defaultAggregate = functions[aggregate.toLowerCase()];\n\n\t if (!defaultAggregate) {\n\t throw new Error(\"There is no such aggregate function\");\n\t }\n\n\t measure.aggregate = defaultAggregate.aggregate || defaultAggregate;\n\t measure.result = defaultAggregate.result;\n\t }\n\n\n\t aggregators.push({\n\t descriptor: descriptor,\n\t caption: measure.caption,\n\t result: measure.result,\n\t aggregator: createAggregateGetter(measure)\n\t });\n\t }\n\t }\n\t } else {\n\t aggregators.push({\n\t descriptor: { name: \"default\"},\n\t caption: \"default\",\n\t aggregator: function() { return 1; }\n\t });\n\t }\n\n\t return aggregators;\n\t },\n\n\t _buildGetters: function(names) {\n\t var result = {};\n\t var parts;\n\t var name;\n\n\t for (var idx = 0; idx < names.length; idx++) {\n\t name = names[idx];\n\t parts = name.split(\"&\");\n\n\t if (parts.length > 1) {\n\t result[parts[0]] = kendo.getter(parts[0], true);\n\t } else {\n\t result[name] = kendo.getter(normalizeName(name), true);\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t _parseDescriptors: function (descriptors) {\n\t var parsedDescriptors = parseDescriptors(descriptors);\n\t var rootNames = getRootNames(parsedDescriptors.root);\n\t var expanded = parsedDescriptors.expanded;\n\t var result = [];\n\n\t for (var idx = 0; idx < expanded.length; idx++) {\n\t result.push(mapNames(expanded[idx].name, rootNames));\n\t }\n\n\t return {\n\t root: rootNames,\n\t expanded: result\n\t };\n\t },\n\n\t _filter: function(data, filter) {\n\t if (!filter) {\n\t return data;\n\t }\n\n\t var expr;\n\t var idx = 0;\n\t var filters = filter.filters;\n\n\t for (; idx < filters.length; idx++) {\n\t expr = filters[idx];\n\n\t if (expr.operator === \"in\") {\n\t filters[idx] = this._normalizeFilter(expr);\n\t }\n\t }\n\n\t return new kendo.data.Query(data).filter(filter).data;\n\t },\n\n\t _normalizeFilter: function(filter) {\n\t var value = filter.value.split(\",\");\n\t var result = [];\n\n\t if (!value.length) {\n\t return value;\n\t }\n\n\t for (var idx = 0; idx < value.length; idx++) {\n\t result.push({\n\t field: filter.field,\n\t operator: \"eq\",\n\t value: value[idx]\n\t });\n\t }\n\n\t return {\n\t logic: \"or\",\n\t filters: result\n\t };\n\t },\n\n\t process: function(data, options) {\n\t data = data || [];\n\t options = options || {};\n\n\t data = this._filter(data, options.filter);\n\n\t var measures = options.measures || [];\n\n\t var measuresRowAxis = options.measuresAxis === \"rows\";\n\n\t var columnDescriptors = options.columns || [];\n\t var rowDescriptors = options.rows || [];\n\n\t if (!columnDescriptors.length && rowDescriptors.length && (!measures.length || (measures.length && measuresRowAxis))) {\n\t columnDescriptors = rowDescriptors;\n\t rowDescriptors = [];\n\t measuresRowAxis = false;\n\t }\n\n\t if (!columnDescriptors.length && !rowDescriptors.length) {\n\t measuresRowAxis = false;\n\t }\n\n\t if (!columnDescriptors.length && measures.length) {\n\t columnDescriptors = normalizeMembers(options.measures);\n\t }\n\n\t columnDescriptors = this._parseDescriptors(columnDescriptors);\n\t rowDescriptors = this._parseDescriptors(rowDescriptors);\n\n\t var aggregatedData = {};\n\t var columns = {};\n\t var rows = {};\n\n\t var rowValue;\n\t var state = { columnIndex: 0 };\n\n\t var measureAggregators = this._measureAggregators(options);\n\n\t var columnGetters = this._buildGetters(columnDescriptors.root);\n\t var rowGetters = this._buildGetters(rowDescriptors.root);\n\n\t var processed = false;\n\n\t var expandedColumns = columnDescriptors.expanded;\n\t var expandedRows = rowDescriptors.expanded;\n\n\t var dataItem;\n\t var aggregatorContext;\n\t var hasExpandedRows = expandedRows.length !== 0;\n\n\t var rowIdx, rowDescriptor, rowName, rowTotal;\n\t var key, path, parentName, value;\n\t var columnsInfo, rowsInfo;\n\t var length = data.length;\n\t var idx = 0;\n\n\t if (columnDescriptors.root.length || rowDescriptors.root.length) {\n\t processed = true;\n\n\t for (idx = 0; idx < length; idx++) {\n\t dataItem = data[idx];\n\n\t aggregatorContext = {\n\t dataItem: dataItem,\n\t index: idx\n\t };\n\n\t rowTotal = aggregatedData[ROW_TOTAL_KEY] || {\n\t items: {},\n\t aggregates: {}\n\t };\n\n\t this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, rowTotal, state, !hasExpandedRows);\n\n\t rowTotal.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, rowTotal);\n\t aggregatedData[ROW_TOTAL_KEY] = rowTotal;\n\n\t for (rowIdx = 0; rowIdx < expandedRows.length; rowIdx++) {\n\t rowDescriptor = expandedRows[rowIdx];\n\n\t if (!this._matchDescriptors(dataItem, rowDescriptor, rowGetters)) {\n\t this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, { items: {}, aggregates: {} }, state, true);\n\t continue;\n\t }\n\n\t path = rowDescriptor.names.slice(0, rowDescriptor.expandedIdx).join(\"\");\n\t rowName = rowDescriptor.names[rowDescriptor.expandedIdx];\n\n\t parentName = rowName;\n\n\t rowValue = rowGetters[rowName](dataItem);\n\t rowValue = rowValue !== undefined ? rowValue.toString() : rowValue;\n\n\t rowName = rowName + \"&\" + rowValue;\n\t key = path + rowName;\n\n\t rows[key] = {\n\t uniquePath: path + parentName,\n\t parentName: parentName,\n\t name: rowName,\n\t value: rowValue\n\t };\n\n\t value = aggregatedData[key] || {\n\t items: {},\n\t aggregates: {}\n\t };\n\n\t this._processColumns(measureAggregators, expandedColumns, columnGetters, columns, aggregatorContext, value, state, true);\n\n\t value.aggregates = this._calculateAggregate(measureAggregators, aggregatorContext, value);\n\t aggregatedData[key] = value;\n\t }\n\t }\n\t }\n\n\t if (processed && length) {\n\t if (measureAggregators.length > 1 && (!options.columns || !options.columns.length)) {\n\t columnDescriptors = {\n\t root: [],\n\t expanded: []\n\t };\n\t }\n\n\t columnsInfo = this._asTuples(columns, columnDescriptors, measuresRowAxis ? [] : measureAggregators, options.sort ? options.sort: []);\n\t rowsInfo = this._asTuples(rows, rowDescriptors, measuresRowAxis ? measureAggregators : [], options.sort ? options.sort: []);\n\n\t columns = columnsInfo.tuples;\n\t rows = rowsInfo.tuples;\n\n\t aggregatedData = this._toDataArray(aggregatedData, this._measuresInfo(measureAggregators, measuresRowAxis), rowsInfo.keys, columnsInfo.keys);\n\t } else {\n\t aggregatedData = columns = rows = [];\n\t }\n\n\t return {\n\t axes: {\n\t columns: { tuples: columns },\n\t rows: { tuples: rows }\n\t },\n\t data: aggregatedData\n\t };\n\t }\n\t });\n\n\t var PivotTransport = Class.extend({\n\t init: function(options, transport) {\n\t this.transport = transport;\n\t this.options = transport.options || {};\n\n\t if (!this.transport.discover) {\n\t if (isFunction(options.discover)) {\n\t this.discover = options.discover;\n\t }\n\t }\n\t },\n\t read: function(options) {\n\t return this.transport.read(options);\n\t },\n\t update: function(options) {\n\t return this.transport.update(options);\n\t },\n\t create: function(options) {\n\t return this.transport.create(options);\n\t },\n\t destroy: function(options) {\n\t return this.transport.destroy(options);\n\t },\n\t discover: function(options) {\n\t if (this.transport.discover) {\n\t return this.transport.discover(options);\n\t }\n\t options.success({});\n\t },\n\t catalog: function(val) {\n\t var options = this.options || {};\n\n\t if (val === undefined) {\n\t return (options.connection || {}).catalog;\n\n\t }\n\n\t var connection = options.connection || {};\n\t connection.catalog = val;\n\n\t this.options.connection = connection;\n\t $.extend(this.transport.options, { connection: connection });\n\t },\n\t cube: function(val) {\n\t var options = this.options || {};\n\n\t if (val === undefined) {\n\t return (options.connection || {}).cube;\n\t }\n\n\t var connection = options.connection || {};\n\t connection.cube = val;\n\n\t this.options.connection = connection;\n\t extend(true, this.transport.options, { connection: connection });\n\t }\n\t });\n\n\t var PivotDataSourceV2 = DataSource.extend({\n\t init: function(options) {\n\n\t DataSource.fn.init.call(this, extend(true, {}, {\n\t //schema: schema\n\t }, options));\n\n\t var transportOptions = this.options.transport || {};\n\t if ((this.options.type || \"xmla\").toLowerCase() === \"xmla\") {\n\t this._online = true;\n\t this.transport = new XmlaTransportV2(transportOptions);\n\t }\n\n\t this._columns = normalizeMembers(this.options.columns);\n\t this._rows = normalizeMembers(this.options.rows);\n\n\t var measures = this.options.measures || [];\n\n\t if (toString.call(measures) === \"[object Object]\") {\n\t this._measuresAxis = measures.axis || \"columns\";\n\t measures = measures.values || [];\n\t }\n\n\t this._measures = normalizeMeasures(measures);\n\t },\n\n\t options: {\n\t serverSorting: true,\n\t serverPaging: true,\n\t serverFiltering: true,\n\t serverGrouping: true,\n\t serverAggregates: true\n\t },\n\n\t axes: function() {\n\t return {\n\t columns: normalizeAxis(this.columns()),\n\t rows: normalizeAxis(this.rows())\n\t };\n\t },\n\n\t catalog: function(val) {\n\t if (val === undefined) {\n\t return this.transport.catalog();\n\t }\n\n\t this.transport.catalog(val);\n\t this._mergeState({});// clears current state\n\t this.read();\n\t },\n\n\t cube: function(val) {\n\t if (val === undefined) {\n\t return this.transport.cube();\n\t }\n\n\t this.transport.cube(val);\n\t this._mergeState({});// clears current state\n\t this.read();\n\t },\n\n\t measuresAxis: function() {\n\t return this._measuresAxis || \"columns\";\n\t },\n\n\t fetch: function () {\n\t if (this.options.type.toLowerCase() === \"xmla\" && (this._data === undefined || this._data.length === 0)) {\n\t this._query();\n\t }\n\t },\n\n\t read: function (data) {\n\t var that = this;\n\t var isPrevented = that.trigger(REQUESTSTART, { type: READ });\n\t var params = that._params(data);\n\t if (!isPrevented) {\n\t that.trigger(PROGRESS);\n\n\t that.transport.read({\n\t data: params,\n\t success: function(newDataState) {\n\t that._saveState(newDataState);\n\t that.trigger(REQUESTEND, { response: newDataState, type: READ });\n\t that.trigger(CHANGE);\n\t if (that._preventRefresh) {\n\t that._preventRefresh = false;\n\t }\n\t },\n\t error: function (err) {\n\t that.trigger(ERROR, { error: err });\n\t }\n\t });\n\t }\n\t },\n\n\t _params: function(data) {\n\t var that = this;\n\t var options = DataSource.fn._params.call(that, data);\n\n\t options = extend({\n\t connection: that.options.transport.connection,\n\t columnAxes:JSON.parse(JSON.stringify(that._columns)),\n\t rowAxes: JSON.parse(JSON.stringify(that._rows)),\n\t measuresAxis: that.measuresAxis(),\n\t measureAxes: that._measures\n\t }, options);\n\n\t if (options.filter) {\n\t options.filter = normalizeFilter(options.filter);\n\t options.filter = (options.filter || {}).filters;\n\t }\n\n\t if (options.sort) {\n\t options.sort = normalizeSort(options.sort);\n\t }\n\n\t return options;\n\t },\n\n\t discover: function(options) {\n\t var that = this,\n\t transport = that.transport;\n\n\t if (transport.discover) {\n\t return transport.discover(options);\n\t }\n\t },\n\n\t schemaMeasures: function() {\n\t var that = this;\n\t return that.discover(\n\t {\n\t command: \"schemaMeasures\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaKPIs: function() {\n\t var that = this;\n\n\t return that.discover(\n\t {\n\t command: \"schemaKPIs\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaDimensions: function() {\n\t var that = this;\n\n\t return that.discover(\n\t {\n\t command: \"schemaDimensions\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaHierarchies: function(dimensionName) {\n\t var that = this;\n\n\t return that.discover({\n\t command: \"schemaHierarchies\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube(),\n\t dimensionUniqueName: dimensionName\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaLevels: function(hierarchyName) {\n\t var that = this;\n\n\t return that.discover({\n\t command: \"schemaLevels\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube(),\n\t hierarchyUniqueName: hierarchyName\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaCubes: function() {\n\t var that = this;\n\n\t return that.discover({\n\t command: \"schemaCubes\",\n\t restrictions: {\n\t catalogName: that.transport.catalog()\n\t }\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaCatalogs: function() {\n\t var that = this;\n\n\t return that.discover({\n\t command: \"schemaCatalogs\"\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t schemaMembers: function(restrictions) {\n\t var that = this;\n\n\t return that.discover({\n\t command: \"schemaMembers\",\n\t restrictions: extend({\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }, restrictions)\n\t }, function(response) {\n\t return response;\n\t });\n\t },\n\n\t _saveState: function(state) {\n\t var that = this;\n\n\t that._columnTuples = state.columns;\n\t that._rowTuples = state.rows;\n\t that._view = state.data;\n\t },\n\n\t columns: function(val) {\n\t if (val === undefined) {\n\t return this._columns;\n\t }\n\n\t this._columns = normalizeMembers(val);\n\t this.read();\n\t },\n\n\t rows: function(val) {\n\t if (val === undefined) {\n\t return this._rows;\n\t }\n\n\t this._rows = normalizeMembers(val);\n\n\t this.read();\n\t },\n\n\t measures: function(val) {\n\t if (val === undefined) {\n\t return this._measures;\n\t }\n\n\t this._measures = normalizeMeasures(val);\n\n\t this.read();\n\t },\n\n\t _mergeState: function(options) {\n\t options = DataSource.fn._mergeState.call(this, options);\n\n\t return options;\n\t },\n\n\t _query: function(options) {\n\t var that = this;\n\t var params = extend({}, {\n\t sort: that.sort(),\n\t measuresAxis: that.measuresAxis(),\n\t filter: that.filter()\n\t }, options);\n\t var state = this._mergeState(params);\n\n\t return this.read(state);\n\t },\n\t });\n\n\t var PivotDataSource = DataSource.extend({\n\t init: function(options) {\n\t var cube = ((options || {}).schema || {}).cube;\n\t var measuresAxis = \"columns\";\n\t var measures;\n\n\t var schema = {\n\t axes: identity,\n\t cubes: identity,\n\t catalogs: identity,\n\t measures: identity,\n\t dimensions: identity,\n\t hierarchies: identity,\n\t levels: identity,\n\t members: identity\n\t };\n\n\t if (cube) {\n\t schema = $.extend(schema, this._cubeSchema(cube));\n\t this.cubeBuilder = new PivotCubeBuilder(cube);\n\t }\n\n\t DataSource.fn.init.call(this, extend(true, {}, {\n\t schema: schema\n\t }, options));\n\n\t this.transport = new PivotTransport(this.options.transport || {}, this.transport);\n\n\t this._columns = normalizeMembers(this.options.columns);\n\t this._rows = normalizeMembers(this.options.rows);\n\n\t measures = this.options.measures || [];\n\n\t if (toString.call(measures) === \"[object Object]\") {\n\t measuresAxis = measures.axis || \"columns\";\n\t measures = measures.values || [];\n\t }\n\n\t this._measures = normalizeMeasures(measures);\n\t this._measuresAxis = measuresAxis;\n\n\t this._skipNormalize = 0;\n\t this._axes = {};\n\t },\n\n\t _cubeSchema: function(cube) {\n\t return {\n\t dimensions: function() {\n\t var result = [];\n\t var dimensions = cube.dimensions;\n\n\t for (var key in dimensions) {\n\t result.push({\n\t name: key,\n\t caption: dimensions[key].caption || key,\n\t uniqueName: key,\n\t defaultHierarchy: key,\n\t type: 1\n\t });\n\t }\n\n\t if (cube.measures) {\n\t result.push({\n\t name: MEASURES,\n\t caption: MEASURES,\n\t uniqueName: MEASURES,\n\t type: 2\n\t });\n\t }\n\n\t return result;\n\t },\n\t hierarchies: function(){\n\t return [];\n\t },\n\t measures: function() {\n\t var result = [];\n\t var measures = cube.measures;\n\n\t for (var key in measures) {\n\t result.push({\n\t name: key,\n\t caption: key,\n\t uniqueName: key,\n\t aggregator: key\n\t });\n\t }\n\n\t return result;\n\t },\n\t members: $.proxy(function(response, restrictions) {\n\t var name = restrictions.levelUniqueName || restrictions.memberUniqueName;\n\t var schemaData = this.options.schema.data;\n\t var dataGetter = isFunction(schemaData) ? schemaData : kendo.getter(schemaData, true);\n\t var data = (this.options.data && dataGetter(this.options.data)) || this._rawData || [];\n\t var result = [];\n\t var getter;\n\t var value;\n\t var idx = 0;\n\t var distinct = {};\n\n\t if (name) {\n\t name = name.split(\".\")[0];\n\t }\n\n\t if (!restrictions.treeOp) {\n\t result.push({\n\t caption: cube.dimensions[name].caption || name,\n\t childrenCardinality: \"1\",\n\t dimensionUniqueName: name,\n\t hierarchyUniqueName: name,\n\t levelUniqueName: name,\n\t name: name,\n\t uniqueName: name\n\t });\n\n\t return result;\n\t }\n\n\t getter = kendo.getter(normalizeName(name), true);\n\n\t for (; idx < data.length; idx++) {\n\t value = getter(data[idx]);\n\t if ((value || value === 0) && !distinct[value]) {\n\t distinct[value] = true;\n\n\t result.push({\n\t caption: value,\n\t childrenCardinality: \"0\",\n\t dimensionUniqueName: name,\n\t hierarchyUniqueName: name,\n\t levelUniqueName: name,\n\t name: value,\n\t uniqueName: value\n\t });\n\t }\n\t }\n\n\t return result;\n\t }, this)\n\t };\n\t },\n\n\t options: {\n\t serverSorting: true,\n\t serverPaging: true,\n\t serverFiltering: true,\n\t serverGrouping: true,\n\t serverAggregates: true\n\t },\n\n\t catalog: function(val) {\n\t if (val === undefined) {\n\t return this.transport.catalog();\n\t }\n\n\t this.transport.catalog(val);\n\t this._mergeState({});// clears current state\n\t this._axes = {};\n\t this.data([]);\n\t },\n\n\t cube: function(val) {\n\t if (val === undefined) {\n\t return this.transport.cube();\n\t }\n\n\t this.transport.cube(val);\n\t this._axes = {};\n\t this._mergeState({});// clears current state\n\t this.data([]);\n\t },\n\n\t axes: function() {\n\t return this._axes;\n\t },\n\n\t columns: function(val) {\n\t if (val === undefined) {\n\t return this._columns;\n\t }\n\n\t this._skipNormalize += 1;\n\t this._clearAxesData = true;\n\n\t this._columns = normalizeMembers(val);\n\t this.query({\n\t columns: val,\n\t rows: this.rowsAxisDescriptors(),\n\t measures: this.measures(),\n\t sort: this.sort(),\n\t filter: this.filter()\n\t });\n\t },\n\n\t rows: function(val) {\n\t if (val === undefined) {\n\t return this._rows;\n\t }\n\n\t this._skipNormalize += 1;\n\t this._clearAxesData = true;\n\n\t this._rows = normalizeMembers(val);\n\n\t this.query({\n\t columns: this.columnsAxisDescriptors(),\n\t rows: val,\n\t measures: this.measures(),\n\t sort: this.sort(),\n\t filter: this.filter()\n\t });\n\t },\n\n\t measures: function(val) {\n\t if (val === undefined) {\n\t return this._measures;\n\t }\n\n\t this._skipNormalize += 1;\n\t this._clearAxesData = true;\n\n\t this.query({\n\t columns: this.columnsAxisDescriptors(),\n\t rows: this.rowsAxisDescriptors(),\n\t measures: normalizeMeasures(val),\n\t sort: this.sort(),\n\t filter: this.filter()\n\t });\n\t },\n\n\t measuresAxis: function() {\n\t return this._measuresAxis || \"columns\";\n\t },\n\n\t _expandPath: function(path, axis) {\n\t var origin = axis === \"columns\" ? \"columns\" : \"rows\";\n\t var other = axis === \"columns\" ? \"rows\" : \"columns\";\n\n\t var members = normalizeMembers(path);\n\t var memberToExpand = getName(members[members.length - 1]);\n\n\t this._lastExpanded = origin;\n\n\t members = descriptorsForMembers(this.axes()[origin], members, this.measures());\n\n\t for (var idx = 0; idx < members.length; idx++) {\n\t var memberName = getName(members[idx]);\n\n\t if (memberName === memberToExpand) {\n\t if (members[idx].expand) {\n\t return;\n\t }\n\t members[idx].expand = true;\n\t } else {\n\t members[idx].expand = false;\n\t }\n\t }\n\n\t var descriptors = {};\n\t descriptors[origin] = members;\n\t descriptors[other] = this._descriptorsForAxis(other);\n\n\t this._query(descriptors);\n\t },\n\n\t _descriptorsForAxis: function(axis) {\n\t var axes = this.axes();\n\t var descriptors = this[axis]() || [];\n\n\t if (axes && axes[axis] && axes[axis].tuples && axes[axis].tuples[0]) {\n\t descriptors = descriptorsForAxes(axes[axis].tuples || []);\n\t }\n\t return descriptors;\n\t },\n\n\t columnsAxisDescriptors: function() {\n\t return this._descriptorsForAxis(\"columns\");\n\t },\n\n\t rowsAxisDescriptors: function() {\n\t return this._descriptorsForAxis(\"rows\");\n\t },\n\n\t _process: function (data, e) {\n\t this._view = data;\n\n\t e = e || {};\n\t e.items = e.items || this._view;\n\n\t this.trigger(CHANGE, e);\n\t },\n\n\t _query: function(options) {\n\t var that = this;\n\n\t if (!options) {\n\t this._skipNormalize += 1;\n\t this._clearAxesData = true;\n\t }\n\n\t return that.query(extend({}, {\n\t page: that.page(),\n\t pageSize: that.pageSize(),\n\t sort: that.sort(),\n\t filter: that.filter(),\n\t group: that.group(),\n\t aggregate: that.aggregate(),\n\t columns: this.columnsAxisDescriptors(),\n\t rows: this.rowsAxisDescriptors(),\n\t measures: this.measures()\n\t }, options));\n\t },\n\n\t query: function(options) {\n\t var state = this._mergeState(options);\n\n\t if (this._data.length && this.cubeBuilder) {\n\t this._params(state);\n\t this._updateLocalData(this._pristineData);\n\n\t return $.Deferred().resolve().promise();\n\t }\n\n\t return this.read(state);\n\t },\n\n\t _mergeState: function(options) {\n\t options = DataSource.fn._mergeState.call(this, options);\n\n\t if (options !== undefined) {\n\t this._measures = normalizeMeasures(options.measures);\n\n\t if (options.columns) {\n\t options.columns = normalizeMembers(options.columns);\n\t } else if (!options.columns) {\n\t this._columns = [];\n\t }\n\n\t if (options.rows) {\n\t options.rows = normalizeMembers(options.rows);\n\t } else if (!options.rows) {\n\t this._rows = [];\n\t }\n\t }\n\t return options;\n\t },\n\n\t filter: function(val) {\n\t if (val === undefined) {\n\t return this._filter;\n\t }\n\n\t this._skipNormalize += 1;\n\t this._clearAxesData = true;\n\t this._query({ filter: val, page: 1 });\n\t },\n\n\t expandColumn: function(path) {\n\t this._expandPath(path, \"columns\");\n\t },\n\n\t expandRow: function(path) {\n\t this._expandPath(path, \"rows\");\n\t },\n\n\t success: function(data) {\n\t var originalData;\n\t if (this.cubeBuilder) {\n\t originalData = (this.reader.data(data) || []).slice(0);\n\t }\n\t DataSource.fn.success.call(this, data);\n\t if (originalData) {\n\t this._pristineData = originalData;\n\t }\n\t },\n\n\t _processResult: function(data, axes) {\n\t if (this.cubeBuilder) {\n\t var processedData = this.cubeBuilder.process(data, this._requestData);\n\n\t data = processedData.data;\n\t axes = processedData.axes;\n\t }\n\n\t var columnIndexes, rowIndexes;\n\t var tuples, resultAxis, measures, axisToSkip;\n\t var columnDescriptors = this.columns();\n\t var rowDescriptors = this.rows();\n\t var hasColumnTuples = axes.columns && axes.columns.tuples;\n\n\t if (!columnDescriptors.length && rowDescriptors.length && hasColumnTuples && (this._rowMeasures().length || !this.measures().length)) {\n\t axes = {\n\t columns: {},\n\t rows: axes.columns\n\t };\n\t }\n\n\t if (!columnDescriptors.length && !rowDescriptors.length && this.measuresAxis() === \"rows\" && hasColumnTuples) {\n\t axes = {\n\t columns: {},\n\t rows: axes.columns\n\t };\n\t }\n\n\t this._axes = {\n\t columns: normalizeAxis(this._axes.columns),\n\t rows: normalizeAxis(this._axes.rows)\n\t };\n\n\t axes = {\n\t columns: normalizeAxis(axes.columns),\n\t rows: normalizeAxis(axes.rows)\n\t };\n\n\t columnIndexes = this._normalizeTuples(axes.columns.tuples, this._axes.columns.tuples, columnDescriptors, this._columnMeasures());\n\t rowIndexes = this._normalizeTuples(axes.rows.tuples, this._axes.rows.tuples, rowDescriptors, this._rowMeasures());\n\n\t if (this._skipNormalize > 0) {\n\t this._skipNormalize -= 1;\n\t }\n\n\t if (!this.cubeBuilder) {\n\t data = this._normalizeData({\n\t columnsLength: axes.columns.tuples.length,\n\t rowsLength: axes.rows.tuples.length,\n\t columnIndexes: columnIndexes,\n\t rowIndexes: rowIndexes,\n\t data: data\n\t });\n\t }\n\n\t if (this._lastExpanded == \"rows\") {\n\t tuples = axes.columns.tuples;\n\t measures = this._columnMeasures();\n\t resultAxis = validateAxis(axes.columns, this._axes.columns, measures);\n\n\t if (resultAxis) {\n\t axisToSkip = \"columns\";\n\t axes.columns = resultAxis;\n\t adjustDataByColumn(tuples, resultAxis.tuples, axes.rows.tuples.length, measures, data);\n\t if (!this.cubeBuilder) {\n\t data = this._normalizeData({\n\t columnsLength: membersCount(axes.columns.tuples, measures),\n\t rowsLength: axes.rows.tuples.length,\n\t data: data\n\t });\n\t }\n\t }\n\t } else if (this._lastExpanded == \"columns\") {\n\t tuples = axes.rows.tuples;\n\t measures = this._rowMeasures();\n\t resultAxis = validateAxis(axes.rows, this._axes.rows, measures);\n\n\t if (resultAxis) {\n\t axisToSkip = \"rows\";\n\t axes.rows = resultAxis;\n\t adjustDataByRow(tuples, resultAxis.tuples, axes.columns.tuples.length, measures, data);\n\n\t if (!this.cubeBuilder) {\n\t data = this._normalizeData({\n\t columnsLength: membersCount(axes.rows.tuples, measures),\n\t rowsLength: axes.columns.tuples.length,\n\t data: data\n\t });\n\t }\n\t }\n\t }\n\n\t this._lastExpanded = null;\n\n\t var result = this._mergeAxes(axes, data, axisToSkip);\n\t this._axes = result.axes;\n\n\t return result.data;\n\t },\n\n\t _readData: function(data) {\n\t var axes = this.reader.axes(data);\n\t var newData = this.reader.data(data);\n\n\t if (this.cubeBuilder) {\n\t this._rawData = newData;\n\t }\n\n\t return this._processResult(newData, axes);\n\t },\n\n\t _createTuple: function(tuple, measure, buildRoot) {\n\t var members = tuple.members;\n\t var length = members.length;\n\t var root = { members: [] };\n\t var levelName, levelNum;\n\t var name, parentName;\n\t var hasChildren;\n\t var hierarchy;\n\t var caption;\n\t var member;\n\t var idx = 0;\n\n\t if (measure) {\n\t length -= 1;\n\t }\n\n\t for (; idx < length; idx++) {\n\t member = members[idx];\n\t levelNum = Number(member.levelNum);\n\n\t name = member.name;\n\t parentName = member.parentName;\n\t caption = member.caption || name;\n\t hasChildren = member.hasChildren;\n\t hierarchy = member.hierarchy;\n\t levelName = member.levelName;\n\n\t if (buildRoot) {\n\t caption = \"All\";\n\t if (levelNum === 0) {\n\t parentName = member.name;\n\t } else {\n\t levelNum -= 1;\n\t }\n\n\t hasChildren = true;\n\t name = hierarchy = levelName = parentName;\n\t }\n\n\t root.members.push({\n\t name: name,\n\t children: [],\n\t caption: caption,\n\t levelName: levelName,\n\t levelNum: levelNum.toString(),\n\t hasChildren: hasChildren,\n\t hierarchy: hierarchy,\n\t parentName: !buildRoot ? parentName: \"\"\n\t });\n\t }\n\n\t if (measure) {\n\t root.members.push({\n\t name: measure.name,\n\t children: []\n\t });\n\t }\n\n\t return root;\n\t },\n\n\t _hasRoot: function(target, source, descriptors) {\n\t if (source.length) {\n\t return findExistingTuple(source, target).tuple;\n\t }\n\n\t var members = target.members;\n\t var member;\n\t var descriptor;\n\n\t var isRoot = true;\n\t var levelNum;\n\n\t for (var idx = 0, length = members.length; idx < length; idx++) {\n\t member = members[idx];\n\t levelNum = Number(member.levelNum) || 0;\n\t descriptor = descriptors[idx];\n\n\t if (!(levelNum === 0 || (descriptor && member.name === getName(descriptor)))) {\n\t isRoot = false;\n\t break;\n\t }\n\t }\n\n\t return isRoot;\n\t },\n\n\t _mergeAxes: function(sourceAxes, data, axisToSkip) {\n\t var columnMeasures = this._columnMeasures();\n\t var rowMeasures = this._rowMeasures();\n\t var axes = this.axes();\n\t var startIndex, tuples;\n\n\t var oldRowsLength = membersCount(axes.rows.tuples, rowMeasures);\n\t var newRowsLength = sourceAxes.rows.tuples.length;\n\n\t var oldColumnsLength = membersCount(axes.columns.tuples, columnMeasures);\n\t var newColumnsLength = sourceAxes.columns.tuples.length;\n\n\t if (axisToSkip == \"columns\") {\n\t newColumnsLength = oldColumnsLength;\n\t tuples = sourceAxes.columns.tuples;\n\t } else {\n\t tuples = parseSource(sourceAxes.columns.tuples, columnMeasures);\n\t data = prepareDataOnColumns(tuples, data);\n\t }\n\n\t var mergedColumns = mergeTuples(axes.columns.tuples, tuples, columnMeasures);\n\n\t if (axisToSkip == \"rows\") {\n\t newRowsLength = membersCount(sourceAxes.rows.tuples, rowMeasures);\n\t tuples = sourceAxes.rows.tuples;\n\t } else {\n\t tuples = parseSource(sourceAxes.rows.tuples, rowMeasures);\n\t data = prepareDataOnRows(tuples, data);\n\t }\n\t var mergedRows = mergeTuples(axes.rows.tuples, tuples, rowMeasures);\n\n\t axes.columns.tuples = mergedColumns.tuples;\n\t axes.rows.tuples = mergedRows.tuples;\n\n\t if (oldColumnsLength !== membersCount(axes.columns.tuples, columnMeasures)) {\n\t //columns are expanded\n\t startIndex = mergedColumns.index + findDataIndex(mergedColumns.parsedRoot, mergedColumns.memberIndex, columnMeasures);\n\t var offset = oldColumnsLength + newColumnsLength;\n\t data = this._mergeColumnData(data, startIndex, newRowsLength, newColumnsLength, offset);\n\t } else if (oldRowsLength !== membersCount(axes.rows.tuples, rowMeasures)) {\n\t //rows are expanded\n\t startIndex = mergedRows.index + findDataIndex(mergedRows.parsedRoot, mergedRows.memberIndex, rowMeasures);\n\t data = this._mergeRowData(data, startIndex, newRowsLength, newColumnsLength);\n\t }\n\n\t if (axes.columns.tuples.length === 0 && axes.rows.tuples.length === 0) {\n\t data = [];\n\t }\n\n\t return {\n\t axes: axes,\n\t data: data\n\t };\n\t },\n\n\t _mergeColumnData: function(newData, columnIndex, rowsLength, columnsLength, offset) {\n\t var data = this.data().toJSON();\n\t var rowIndex, index, drop = 0, toAdd;\n\t var columnMeasures = Math.max(this._columnMeasures().length, 1);\n\n\t rowsLength = Math.max(rowsLength, 1);\n\n\t if (data.length > 0) {\n\t //if there is already data, drop the first new data item\n\t drop = columnMeasures;\n\t offset -= columnMeasures;\n\t }\n\n\t for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n\t index = columnIndex + (rowIndex * offset);\n\t toAdd = newData.splice(0, columnsLength);\n\t toAdd.splice(0, drop);\n\t [].splice.apply(data, [index, 0].concat(toAdd));\n\t }\n\n\t return data;\n\t },\n\n\t _mergeRowData: function(newData, rowIndex, rowsLength, columnsLength) {\n\t var data = this.data().toJSON();\n\t var idx, dataIndex, toAdd;\n\t var rowMeasures = Math.max(this._rowMeasures().length, 1);\n\n\t columnsLength = Math.max(columnsLength, 1);\n\t if (data.length > 0) {\n\t //if there is already data, drop the first new data item\n\t rowsLength -= rowMeasures;\n\t newData.splice(0, columnsLength * rowMeasures);\n\t }\n\n\t for (idx = 0; idx < rowsLength; idx++) {\n\t toAdd = newData.splice(0, columnsLength);\n\t dataIndex = (rowIndex * columnsLength) + (idx * columnsLength);\n\t [].splice.apply(data, [dataIndex, 0].concat(toAdd));\n\t }\n\n\t return data;\n\t },\n\n\t _columnMeasures: function() {\n\t var measures = this.measures();\n\t var columnMeasures = [];\n\n\t if (this.measuresAxis() === \"columns\") {\n\t if (this.columns().length === 0) {\n\t columnMeasures = measures;\n\t } else if (measures.length > 1) {\n\t columnMeasures = measures;\n\t }\n\t }\n\n\t return columnMeasures;\n\t },\n\n\t _rowMeasures: function() {\n\t var measures = this.measures();\n\t var rowMeasures = [];\n\n\t if (this.measuresAxis() === \"rows\") {\n\t if (this.rows().length === 0) {\n\t rowMeasures = measures;\n\t } else if (measures.length > 1) {\n\t rowMeasures = measures;\n\t }\n\t }\n\n\t return rowMeasures;\n\t },\n\n\t _updateLocalData: function(data, state) {\n\t if (this.cubeBuilder) {\n\t if (state) {\n\t this._requestData = state;\n\t }\n\t data = this._processResult(data);\n\t }\n\n\t this._data = this._observe(data);\n\n\t this._ranges = [];\n\t this._addRange(this._data);\n\n\t this._total = this._data.length;\n\t this._pristineTotal = this._total;\n\t this._process(this._data);\n\t },\n\n\t data: function(value) {\n\t var that = this;\n\t if (value !== undefined) {\n\t this._pristineData = value.slice(0);\n\t this._updateLocalData(value, {\n\t columns: this.columns(),\n\t rows: this.rows(),\n\t measures: this.measures()\n\t });\n\t } else {\n\t return that._data;\n\t }\n\t },\n\n\t _normalizeTuples: function(tuples, source, descriptors, measures) {\n\t var length = measures.length || 1;\n\t var idx = 0;\n\n\t var roots = [];\n\t var indexes = {};\n\t var measureIdx = 0;\n\t var tuple, memberIdx, last;\n\n\t if (!tuples.length) {\n\t return;\n\t }\n\n\t if (this._skipNormalize <= 0 && !this._hasRoot(tuples[0], source, descriptors)) {\n\t this._skipNormalize = 0;\n\t for (; idx < length; idx++) {\n\t roots.push(this._createTuple(tuples[0], measures[idx], true));\n\t indexes[idx] = idx;\n\t }\n\n\t tuples.splice.apply(tuples, [0, tuples.length].concat(roots).concat(tuples));\n\t idx = length;\n\t }\n\n\t if (measures.length) {\n\t last = tuple = tuples[idx];\n\t memberIdx = tuple.members.length - 1;\n\n\t while (tuple) {\n\t if (measureIdx >= length) {\n\t measureIdx = 0;\n\t }\n\n\t if (tuple.members[memberIdx].name !== measures[measureIdx].name) {\n\t tuples.splice(idx, 0, this._createTuple(tuple, measures[measureIdx]));\n\t indexes[idx] = idx;\n\t }\n\n\t idx += 1;\n\t measureIdx += 1;\n\t tuple = tuples[idx];\n\n\t if (length > measureIdx && (!tuple || tupleName(last, memberIdx - 1) !== tupleName(tuple, memberIdx - 1))) {\n\t for (; measureIdx < length; measureIdx++) {\n\t tuples.splice(idx, 0, this._createTuple(last, measures[measureIdx]));\n\t indexes[idx] = idx;\n\t idx += 1;\n\t }\n\t tuple = tuples[idx];\n\t }\n\t last = tuple;\n\t }\n\t }\n\n\t return indexes;\n\t },\n\n\t _addMissingDataItems: function(result, metadata) {\n\t while (metadata.rowIndexes[parseInt(result.length / metadata.columnsLength, 10)] !== undefined) {\n\t for (var idx = 0; idx < metadata.columnsLength; idx++) {\n\t result = addEmptyDataItem(result);\n\t }\n\t }\n\n\t while (metadata.columnIndexes[result.length % metadata.columnsLength] !== undefined) {\n\t result = addEmptyDataItem(result);\n\t }\n\n\t return result;\n\t },\n\n\t _normalizeOrdinals: function(result, dataItem, metadata) {\n\t var lastOrdinal = metadata.lastOrdinal;\n\n\t if (!dataItem) {\n\t return addEmptyDataItem(result);\n\t }\n\n\t if ((dataItem.ordinal - lastOrdinal) > 1) {\n\t lastOrdinal += 1;\n\n\t while (lastOrdinal < dataItem.ordinal && result.length < metadata.length) {\n\t result = this._addMissingDataItems(addEmptyDataItem(result), metadata);\n\t lastOrdinal += 1;\n\t }\n\t }\n\n\t dataItem.ordinal = result.length;\n\t result[result.length] = dataItem;\n\n\t return result;\n\t },\n\n\t _normalizeData: function(options) {\n\t var data = options.data;\n\t var dataIdx = 0;\n\t var dataItem;\n\t var result = [];\n\t var lastOrdinal;\n\t var length;\n\n\t options.lastOrdinal = 0;\n\t options.columnIndexes = options.columnIndexes || {};\n\t options.rowIndexes = options.rowIndexes || {};\n\t options.columnsLength = options.columnsLength || 1;\n\t options.rowsLength = options.rowsLength || 1;\n\t options.length = options.columnsLength * options.rowsLength;\n\t length = options.length;\n\n\t if (data.length === length) {\n\t return data;\n\t }\n\n\t while(result.length < length) {\n\t dataItem = data[dataIdx++];\n\t if (dataItem) {\n\t lastOrdinal = dataItem.ordinal;\n\t }\n\n\t result = this._normalizeOrdinals(this._addMissingDataItems(result, options), dataItem, options);\n\n\t options.lastOrdinal = lastOrdinal;\n\t }\n\n\t return result;\n\t },\n\n\t discover: function(options, converter) {\n\t var that = this,\n\t transport = that.transport;\n\n\t return $.Deferred(function(deferred) {\n\t transport.discover(extend({\n\t success: function(response) {\n\t response = that.reader.parse(response);\n\n\t if (that._handleCustomErrors(response)) {\n\t return;\n\t }\n\n\t if (converter) {\n\t response = converter(response);\n\t }\n\t deferred.resolve(response);\n\t },\n\t error: function(response, status, error) {\n\t deferred.reject(response);\n\t that.error(response, status, error);\n\t }\n\t }, options));\n\t }).promise().done(function() {\n\t that.trigger(\"schemaChange\");\n\t });\n\t },\n\n\t schemaMeasures: function() {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaMeasures\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.measures(response);\n\t });\n\t },\n\n\t schemaKPIs: function() {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaKPIs\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.kpis(response);\n\t });\n\t },\n\n\t schemaDimensions: function() {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaDimensions\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.dimensions(response);\n\t });\n\t },\n\n\t schemaHierarchies: function(dimensionName) {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaHierarchies\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube(),\n\t dimensionUniqueName: dimensionName\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.hierarchies(response);\n\t });\n\t },\n\n\t schemaLevels: function(hierarchyName) {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaLevels\",\n\t restrictions: {\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube(),\n\t hierarchyUniqueName: hierarchyName\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.levels(response);\n\t });\n\t },\n\n\t schemaCubes: function() {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaCubes\",\n\t restrictions: {\n\t catalogName: that.transport.catalog()\n\t }\n\t }\n\t }, function(response) {\n\t return that.reader.cubes(response);\n\t });\n\t },\n\n\t schemaCatalogs: function() {\n\t var that = this;\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaCatalogs\"\n\t }\n\t }, function(response) {\n\t return that.reader.catalogs(response);\n\t });\n\t },\n\n\t schemaMembers: function(restrictions) {\n\t var that = this;\n\t var success = (function(restrictions) {\n\t return function(response) {\n\t return that.reader.members(response, restrictions);\n\t };\n\t }(restrictions));\n\n\t return that.discover({\n\t data: {\n\t command: \"schemaMembers\",\n\t restrictions: extend({\n\t catalogName: that.transport.catalog(),\n\t cubeName: that.transport.cube()\n\t }, restrictions)\n\t }\n\t }, success);\n\t },\n\n\t _params: function(data) {\n\t if (this._clearAxesData) {\n\t this._axes = {};\n\t this._data = this._observe([]);\n\t this._clearAxesData = false;\n\t this.trigger(STATERESET);\n\t }\n\n\t var options = DataSource.fn._params.call(this, data);\n\n\t options = extend({\n\t measures: this.measures(),\n\t measuresAxis: this.measuresAxis(),\n\t columns: this.columns(),\n\t rows: this.rows()\n\t }, options);\n\n\t if (this.cubeBuilder) {\n\t this._requestData = options;\n\t }\n\n\t return options;\n\t }\n\t });\n\n\t function flatColumns(columns) {\n\t var result = [];\n\t for (var idx = 0; idx < columns.length; idx++) {\n\t result.push(columns[idx]);\n\t if (columns[idx].children) {\n\t result = result.concat(flatColumns(columns[idx].children));\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t function sortItemsTree(field, items, sortFunction) {\n\t for(var i = 0; i < items.length; i++) {\n\t if (items[i].children && items[i].children.length) {\n\t sortItemsTree(field, items[i].children, sortFunction);\n\t }\n\t }\n\t if (items[0].parentName != field) {\n\t return;\n\t }\n\t items = items.sort(sortFunction);\n\t }\n\n\t function fillSortTree(items, map) {\n\t for (var i = 0; i < items.length; i++) {\n\t var currentItem = map[items[i].name];\n\n\t if (!$.isEmptyObject(currentItem.childrenMap)) {\n\t items[i].children = [];\n\t for (var name in currentItem.childrenMap) {\n\t items[i].children.push($.extend({}, { name :name, parentName: map[name].parentName }));\n\t }\n\n\t fillSortTree(items[i].children, map);\n\t }\n\t }\n\t }\n\n\t function addEmptyDataItem(result) {\n\t result[result.length] = { value: \"\", fmtValue: \"\", ordinal: result.length };\n\t return result;\n\t }\n\n\t function validateAxis(newAxis, axis, measures) {\n\t if (newAxis.tuples.length < membersCount(axis.tuples, measures)) {\n\n\t return axis;\n\t }\n\n\t return;\n\t }\n\n\t function adjustDataByColumn(sourceTuples, targetTuples, rowsLength, measures, data) {\n\t var columnIdx, rowIdx, dataIdx;\n\t var columnsLength = sourceTuples.length;\n\t var targetColumnsLength = membersCount(targetTuples, measures);\n\t var measuresLength = measures.length || 1;\n\n\t for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n\t for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n\t dataIdx = tupleIndex(sourceTuples[columnIdx], targetTuples) * measuresLength;\n\t dataIdx += columnIdx % measuresLength;\n\n\t data[rowIdx * columnsLength + columnIdx].ordinal = rowIdx * targetColumnsLength + dataIdx;\n\t }\n\t }\n\t }\n\n\t function adjustDataByRow(sourceTuples, targetTuples, columnsLength, measures, data) {\n\t var columnIdx, rowIdx, dataIdx;\n\t var rowsLength = sourceTuples.length;\n\t var measuresLength = measures.length || 1;\n\n\t for (rowIdx = 0; rowIdx < rowsLength; rowIdx++) {\n\t dataIdx = tupleIndex(sourceTuples[rowIdx], targetTuples);\n\t dataIdx *= measuresLength;\n\t dataIdx += rowIdx % measuresLength;\n\n\t for (columnIdx = 0; columnIdx < columnsLength; columnIdx++) {\n\t data[rowIdx * columnsLength + columnIdx].ordinal = dataIdx * columnsLength + columnIdx;\n\t }\n\t }\n\t }\n\n\t function tupleIndex(tuple, collection) {\n\t return findExistingTuple(collection, tuple).index;\n\t }\n\n\t function membersCount(tuples, measures) {\n\t if (!tuples.length) {\n\t return 0;\n\t }\n\n\t var queue = tuples.slice();\n\t var current = queue.shift();\n\t var result = 1;\n\n\t while (current) {\n\t if (current.members) {\n\t [].push.apply(queue, current.members);\n\t } else if (current.children) {\n\t if (!current.measure) {\n\t result += current.children.length;\n\t }\n\t [].push.apply(queue, current.children);\n\t }\n\n\t current = queue.shift();\n\t }\n\n\t if (measures.length) {\n\t result = result * measures.length;\n\t }\n\n\t return result;\n\t }\n\n\t function normalizeAxis(axis) {\n\t if (!axis) {\n\t axis = {\n\t tuples: []\n\t };\n\t }\n\n\t if (!axis.tuples) {\n\t axis.tuples = [];\n\t }\n\n\t return axis;\n\t }\n\n\t function findDataIndex(tuple, memberIndex, measures) {\n\t if (!tuple) {\n\t return 0;\n\t }\n\n\t var measuresLength = Math.max(measures.length, 1);\n\t var tuples = tuple.members.slice(0, memberIndex);\n\t var current = tuples.shift();\n\n\t //the initial value is equal to the total number of measures\n\t //as the measures member is not extracted from the members of the starting tuple\n\t //but should be calculated in the final result\n\t var counter = measuresLength;\n\n\t while (current) {\n\t if (current.name === MEASURES) {\n\t //subtract 1 as the measures member has been already counted as a single standard member\n\t //but we are interested in the total number of measures instead\n\t counter += (measuresLength - 1);\n\t } else if (current.children) {\n\t //is member\n\t [].push.apply(tuples, current.children);\n\t } else {\n\t //is tuple\n\t counter ++;\n\t [].push.apply(tuples, current.members);\n\t }\n\n\t current = tuples.shift();\n\t }\n\n\t return counter;\n\t }\n\n\t function mergeTuples(target, source, measures) {\n\t if (!source[0]) {\n\t return {\n\t parsedRoot: null,\n\t tuples: target,\n\t memberIndex: 0,\n\t index: 0\n\t };\n\t }\n\n\t var result = findExistingTuple(target, source[0]);\n\n\t if (!result.tuple) {\n\t return {\n\t parsedRoot: null,\n\t tuples: source,\n\t memberIndex: 0,\n\t index: 0\n\t };\n\t }\n\n\t var targetMembers = result.tuple.members;\n\t var sourceMembers = source[0].members;\n\t var memberIndex = -1;\n\n\t if (targetMembers.length !== sourceMembers.length) {\n\t return {\n\t parsedRoot: null,\n\t tuples: source,\n\t memberIndex: 0,\n\t index: 0\n\t };\n\t }\n\n\t for (var idx = 0, length = targetMembers.length; idx < length; idx++) {\n\t if (!targetMembers[idx].measure && sourceMembers[idx].children[0]) {\n\t if (memberIndex == -1 && sourceMembers[idx].children.length) {\n\t memberIndex = idx;\n\t }\n\n\t targetMembers[idx].children = sourceMembers[idx].children;\n\t }\n\t }\n\n\t measures = Math.max(measures.length, 1);\n\n\t return {\n\t parsedRoot: result.tuple,\n\t index: result.index * measures,\n\t memberIndex: memberIndex,\n\t tuples: target\n\t };\n\t }\n\n\t function equalTuples(first, second) {\n\t var equal = true;\n\t var idx, length;\n\n\t first = first.members;\n\t second = second.members;\n\n\t for (idx = 0, length = first.length; idx < length; idx++) {\n\t if (first[idx].measure || second[idx].measure) {\n\t continue;\n\t }\n\n\t equal = equal && (getName(first[idx]) === getName(second[idx]));\n\t }\n\n\t return equal;\n\t }\n\n\t function findExistingTuple(tuples, toFind) {\n\t var idx, length, tuple, found, counter = 0;\n\t var memberIndex, membersLength, member;\n\n\t for (idx = 0, length = tuples.length; idx < length; idx++) {\n\t tuple = tuples[idx];\n\t if (equalTuples(tuple, toFind)) {\n\t return {\n\t tuple: tuple,\n\t index: counter\n\t };\n\t }\n\n\t counter ++;\n\n\t for (memberIndex = 0, membersLength = tuple.members.length; memberIndex < membersLength; memberIndex++) {\n\t member = tuple.members[memberIndex];\n\t if (member.measure) {\n\t //counter += member.children.length;\n\t continue;\n\t }\n\t found = findExistingTuple(member.children, toFind);\n\t counter += found.index;\n\t if (found.tuple) {\n\t return {\n\t tuple: found.tuple,\n\t index: counter\n\t };\n\t }\n\t }\n\t }\n\n\t return {\n\t index: counter\n\t };\n\t }\n\n\t function addMembers(members, map) {\n\t var member, i, len, path = \"\";\n\t for (i = 0, len = members.length; i < len; i++) {\n\t member = members[i];\n\t path += member.name;\n\t if (!map[path]) {\n\t map[path] = member;\n\t }\n\t }\n\t }\n\n\n\t function findParentMember(tuple, map) {\n\t var members = tuple.members;\n\t var i, len, member, path = \"\";\n\t var parentPath = \"\";\n\t var parentMember;\n\n\t for (i = 0, len = members.length; i < len; i++) {\n\t member = members[i];\n\t if (parentMember) {\n\t if (map[path + member.name]) {\n\t path += member.name;\n\t parentMember = map[path];\n\t continue;\n\t } else if (map[path + member.parentName]) {\n\t return map[path + member.parentName];\n\t } else if (map[parentPath + member.parentName]) {\n\t return map[parentPath + member.parentName];\n\t } else {\n\t return map[parentPath];\n\t }\n\t }\n\n\t path += member.name;\n\t parentMember = map[member.parentName];\n\n\t if (!parentMember) {\n\t parentMember = map[path];\n\t if (!parentMember) {\n\t return null;\n\t }\n\t }\n\n\t if (parentMember) {\n\t parentPath += parentMember.name;\n\t }\n\t }\n\n\t return parentMember;\n\t }\n\n\t function measurePosition(tuple, measures) {\n\t if (measures.length === 0) {\n\t return -1;\n\t }\n\n\t var measure = measures[0];\n\t var members = tuple.members;\n\t for (var idx = 0, len = members.length; idx < len; idx ++) {\n\t if (members[idx].name == measure.name) {\n\t return idx;\n\t }\n\t }\n\t }\n\n\t function normalizeTupleMeasures(tuple, index) {\n\t if (index < 0) {\n\t return;\n\t }\n\t var member = {\n\t name: MEASURES,\n\t measure: true,\n\t children: [\n\t $.extend({ members: [], dataIndex: tuple.dataIndex }, tuple.members[index])\n\t ]\n\t };\n\t tuple.members.splice(index, 1, member);\n\t tuple.dataIndex = undefined;\n\t }\n\n\t function parseSource(tuples, measures) {\n\t if (tuples.length < 1) {\n\t return [];\n\t }\n\t var result = [];\n\t var map = { };\n\t var measureIndex = measurePosition(tuples[0], measures);\n\n\t for (var i = 0; i < tuples.length; i++) {\n\t var tuple = tuples[i];\n\n\t //keep the old data index of the tuple\n\t tuple.dataIndex = i;\n\n\t normalizeTupleMeasures(tuple, measureIndex);\n\t var parentMember = findParentMember(tuple, map);\n\n\t if (parentMember) {\n\t if (measureIndex < 0 || !parentMember.measure) {\n\t parentMember.children.push(tuple);\n\t } else {\n\t parentMember.children.push(tuple.members[measureIndex].children[0]);\n\t }\n\t } else {\n\t result.push(tuple);\n\t }\n\n\t addMembers(tuple.members, map);\n\t }\n\n\t return result;\n\t }\n\n\t function prepareDataOnRows(tuples, data) {\n\t if (!tuples || !tuples.length) {\n\t return data;\n\t }\n\n\t var result = [];\n\t var indices = buildDataIndices(tuples);\n\t var rowsLength = indices.length;\n\t var columnsLength = Math.max(data.length / rowsLength, 1);\n\t var rowIndex, columnIndex, targetIndex, sourceIndex;\n\t var calcIndex;\n\n\t for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n\t targetIndex = columnsLength * rowIndex;\n\t sourceIndex = columnsLength * indices[rowIndex];\n\t for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n\t calcIndex = parseInt(sourceIndex + columnIndex, 10);\n\t result[parseInt(targetIndex + columnIndex, 10)] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t function prepareDataOnColumns(tuples, data) {\n\t if (!tuples || !tuples.length) {\n\t return data;\n\t }\n\n\t var result = [];\n\t var indices = buildDataIndices(tuples);\n\t var columnsLength = indices.length;\n\t var rowsLength = Math.max(data.length / columnsLength, 1);\n\t var columnIndex, rowIndex, dataIndex, calcIndex;\n\n\t for (rowIndex = 0; rowIndex < rowsLength; rowIndex++) {\n\t dataIndex = columnsLength * rowIndex;\n\t for (columnIndex = 0; columnIndex < columnsLength; columnIndex++) {\n\t calcIndex = indices[columnIndex] + dataIndex;\n\t result[dataIndex + columnIndex] = data[calcIndex] || { value: \"\", fmtValue: \"\", ordinal: calcIndex };\n\t }\n\t }\n\n\t return result;\n\t }\n\n\t function buildDataIndices(tuples) {\n\t tuples = tuples.slice();\n\t var result = [];\n\t var tuple = tuples.shift();\n\t var idx, length, spliceIndex, children, member;\n\n\t while (tuple) {\n\t //required for multiple measures\n\t if (tuple.dataIndex !== undefined) {\n\t result.push(tuple.dataIndex);\n\t }\n\n\t spliceIndex = 0;\n\t for (idx = 0, length = tuple.members.length; idx < length; idx++) {\n\t member = tuple.members[idx];\n\t children = member.children;\n\t if (member.measure) {\n\t [].splice.apply(tuples, [0, 0].concat(children));\n\t } else {\n\t [].splice.apply(tuples, [spliceIndex, 0].concat(children));\n\t }\n\t spliceIndex += children.length;\n\t }\n\n\t tuple = tuples.shift();\n\t }\n\n\t return result;\n\t }\n\n\t PivotDataSourceV2.create = function(options) {\n\t options = options && options.push ? { data: options } : options;\n\n\t var dataSource = options || {},\n\t data = dataSource.data;\n\n\t dataSource.data = data;\n\n\t if (!(dataSource instanceof PivotDataSourceV2) && dataSource instanceof kendo.data.DataSource) {\n\t throw new Error(\"Incorrect DataSource type. Only PivotDataSource instances are supported\");\n\t }\n\n\t return dataSource instanceof PivotDataSourceV2 ? dataSource : new PivotDataSourceV2(dataSource);\n\t };\n\n\t PivotDataSource.create = function(options) {\n\t options = options && options.push ? { data: options } : options;\n\n\t var dataSource = options || {},\n\t data = dataSource.data;\n\n\t dataSource.data = data;\n\n\t if (!(dataSource instanceof PivotDataSource) && dataSource instanceof kendo.data.DataSource) {\n\t throw new Error(\"Incorrect DataSource type. Only PivotDataSource instances are supported\");\n\t }\n\n\t return dataSource instanceof PivotDataSource ? dataSource : new PivotDataSource(dataSource);\n\t };\n\n\t function baseHierarchyPath(memberName) {\n\t var parts = memberName.split(\".\");\n\t if (parts.length > 2) {\n\t return parts[0] + \".\" + parts[1];\n\t }\n\t return memberName;\n\t }\n\n\t function expandMemberDescriptor(names, sort) {\n\t var idx = names.length - 1;\n\t var name = names[idx];\n\t var sortDescriptor;\n\n\t sortDescriptor = sortDescriptorForMember(sort, name);\n\n\t if (sortDescriptor && sortDescriptor.dir) {\n\t name = \"ORDER(\" + name + \".Children,\" + sortDescriptor.field + \".CurrentMember.MEMBER_CAPTION,\" + sortDescriptor.dir + \")\";\n\t } else {\n\t name += \".Children\";\n\t }\n\n\t names[idx] = name;\n\n\t return names;\n\t }\n\n\t function sortDescriptorForMember(sort, member) {\n\t for (var idx = 0, length = sort.length; idx < length; idx++) {\n\t if (member.indexOf(sort[idx].field) === 0) {\n\t return sort[idx];\n\t }\n\t }\n\t return null;\n\t }\n\n\t function crossJoin(names) {\n\t var result = \"CROSSJOIN({\";\n\t var r;\n\n\t if (names.length > 2) {\n\t r = names.pop();\n\t result += crossJoin(names);\n\t } else {\n\t result += names.shift();\n\t r = names.pop();\n\t }\n\n\t result += \"},{\";\n\t result += r;\n\t result += \"})\";\n\t return result;\n\t }\n\n\t function crossJoinCommand(members, measures) {\n\t var tmp = members.slice(0);\n\n\t if (measures.length > 1) {\n\t tmp.push(\"{\" + measureNames(measures).join(\",\") + \"}\");\n\t }\n\n\t return crossJoin(tmp);\n\t }\n\n\t function measureNames(measures) {\n\t var idx = 0;\n\t var length = measures.length;\n\t var result = [];\n\t var measure;\n\n\t for (; idx < length; idx++) {\n\t measure = measures[idx];\n\t result.push(measure.name !== undefined ? measure.name : measure);\n\t }\n\n\t return result;\n\t }\n\n\t function indexOf(name, items) {\n\t var idx, length, index = -1;\n\n\t for (idx = 0, length = items.length; idx < length; idx++) {\n\t if (getName(items[idx]) === name) {\n\t index = idx;\n\t break;\n\t }\n\t }\n\t return index;\n\t }\n\n\t function getName(name) {\n\t name = name.name || name;\n\n\t if (toString.call(name) === \"[object Array]\") {\n\t name = name[name.length - 1];\n\t }\n\n\t return name;\n\t }\n\n\t function getRootNames(members) {\n\t var length = members.length;\n\t var names = [];\n\t var idx = 0;\n\n\t for (; idx < length; idx++) {\n\t names.push(members[idx].name[0]);\n\t }\n\n\t return names;\n\t }\n\n\t function mapNames(names, rootNames) {\n\t var name;\n\t var rootName;\n\n\t var j;\n\t var idx = 0;\n\t var length = names.length;\n\t var rootLength = rootNames.length;\n\n\t rootNames = rootNames.slice(0);\n\n\t for (; idx < length; idx++) {\n\t name = names[idx];\n\n\t for (j = 0; j < rootLength; j++) {\n\t rootName = baseHierarchyPath(rootNames[j]);\n\n\t if (name.indexOf(rootName) !== -1) {\n\t rootNames[j] = name;\n\t break;\n\t }\n\t }\n\t }\n\n\t return {\n\t names: rootNames,\n\t expandedIdx: j,\n\t uniquePath: rootNames.slice(0, j + 1).join(\"\")\n\t };\n\t }\n\n\t function parseDescriptors(members) {\n\t var expanded = [];\n\t var child = [];\n\t var root = [];\n\t var member;\n\n\t var j, l;\n\t var idx = 0;\n\t var length = members.length;\n\n\t var name;\n\t var hierarchyName;\n\n\t var found;\n\n\t for (; idx < length; idx++) {\n\t member = members[idx];\n\t name = member.name;\n\t found = false;\n\n\t if (toString.call(name) !== \"[object Array]\") {\n\t member.name = name = [name];\n\t }\n\n\t if (name.length > 1) {\n\t child.push(member);\n\t } else {\n\t hierarchyName = baseHierarchyPath(name[0]);\n\n\t for (j = 0, l = root.length; j < l; j++) {\n\t if (root[j].name[0].indexOf(hierarchyName) === 0) {\n\t found = true;\n\t break;\n\t }\n\t }\n\n\t if (!found) {\n\t root.push(member);\n\t }\n\n\t if (member.expand) {\n\t expanded.push(member);\n\t }\n\t }\n\t }\n\n\t expanded = expanded.concat(child);\n\n\t return {\n\t root: root,\n\t expanded: expanded\n\t };\n\t }\n\n\t function serializeMembers(members, measures, sort) {\n\t var command = \"\";\n\n\t members = members || [];\n\n\t var expanded = parseDescriptors(members);\n\t var root = expanded.root;\n\n\t var rootNames = getRootNames(root);\n\t var crossJoinCommands = [];\n\n\t expanded = expanded.expanded;\n\n\t var length = expanded.length;\n\t var idx = 0;\n\n\t var memberName;\n\t var names = [];\n\n\t if (rootNames.length > 1 || measures.length > 1) {\n\t crossJoinCommands.push(crossJoinCommand(rootNames, measures));\n\n\t for (; idx < length; idx++) {\n\t memberName = expandMemberDescriptor(expanded[idx].name, sort);\n\t names = mapNames(memberName, rootNames).names;\n\n\t crossJoinCommands.push(crossJoinCommand(names, measures));\n\t }\n\n\t command += crossJoinCommands.join(\",\");\n\t } else {\n\t for (; idx < length; idx++) {\n\t memberName = expandMemberDescriptor(expanded[idx].name, sort);\n\t names.push(memberName[0]); //check if this is ok\n\t }\n\n\t command += rootNames.concat(names).join(\",\");\n\t }\n\n\t return command;\n\t }\n\n\t var filterFunctionFormats = {\n\t contains: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\") > 0\",\n\t doesnotcontain: \", InStr({0}.CurrentMember.MEMBER_CAPTION,\\\"{1}\\\")\",\n\t startswith: \", Left({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n\t endswith: \", Right({0}.CurrentMember.MEMBER_CAPTION,Len(\\\"{1}\\\"))=\\\"{1}\\\"\",\n\t eq: \", {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\",\n\t neq: \", {0}.CurrentMember.MEMBER_CAPTION = \\\"{1}\\\"\"\n\t };\n\n\t function serializeExpression(expression) {\n\t var command = \"\";\n\t var value = expression.value;\n\t var field = expression.field;\n\t var operator = expression.operator;\n\n\t if (operator == \"in\") {\n\t command += \"{\";\n\t command += value;\n\t command += \"}\";\n\t } else {\n\t command += operator == \"neq\" || operator == \"doesnotcontain\" ? \"-\" : \"\";\n\t command += \"Filter(\";\n\t command += field + \".MEMBERS\";\n\t command += kendo.format(filterFunctionFormats[operator], field, value);\n\t command += \")\";\n\t }\n\n\t return command;\n\t }\n\n\t function serializeFilters(filter, cube) {\n\t var command = \"\", current;\n\t var filters = filter.filters;\n\t var length = filters.length;\n\t var idx;\n\n\t for (idx = length - 1; idx >= 0; idx--) {\n\n\t current = \"SELECT (\";\n\t current += serializeExpression(filters[idx]);\n\t current += \") ON 0\";\n\n\t if (idx == length - 1) {\n\t current += \" FROM [\" + cube + \"]\";\n\t command = current;\n\t } else {\n\t command = current + \" FROM ( \" + command + \" )\";\n\t }\n\t }\n\n\t return command;\n\t }\n\n\t function serializeOptions(parentTagName, options, capitalize) {\n\t var result = \"\";\n\n\t if (options) {\n\t result += \"<\" + parentTagName + \">\";\n\t var value;\n\t for (var key in options) {\n\t value = options[key] ;\n\t if (capitalize) {\n\t key = key.replace(/([A-Z]+(?=$|[A-Z][a-z])|[A-Z]?[a-z]+)/g, \"$1_\").toUpperCase().replace(/_$/, \"\");\n\t }\n\t result += \"<\" + key + \">\" + value + \"\";\n\t }\n\t result += \"\";\n\t } else {\n\t result += \"<\" + parentTagName + \"/>\";\n\t }\n\t return result;\n\t }\n\n\t var xmlaDiscoverCommands = {\n\t schemaCubes: \"MDSCHEMA_CUBES\",\n\t schemaCatalogs: \"DBSCHEMA_CATALOGS\",\n\t schemaMeasures: \"MDSCHEMA_MEASURES\",\n\t schemaDimensions: \"MDSCHEMA_DIMENSIONS\",\n\t schemaHierarchies: \"MDSCHEMA_HIERARCHIES\",\n\t schemaLevels: \"MDSCHEMA_LEVELS\",\n\t schemaMembers: \"MDSCHEMA_MEMBERS\",\n\t schemaKPIs: \"MDSCHEMA_KPIS\"\n\t };\n\n\t var convertersMap = {\n\t read: function(options) {\n\t var command = '
';\n\n\t command += \"SELECT NON EMPTY {\";\n\n\t var columns = options.columns || [];\n\t var rows = options.rows || [];\n\n\t var measures = options.measures || [];\n\t var measuresRowAxis = options.measuresAxis === \"rows\";\n\t var sort = options.sort || [];\n\n\t if (!columns.length && rows.length && (!measures.length || (measures.length && measuresRowAxis))) {\n\t columns = rows;\n\t rows = [];\n\t measuresRowAxis = false;\n\t }\n\n\t if (!columns.length && !rows.length) {\n\t measuresRowAxis = false;\n\t }\n\n\t if (columns.length) {\n\t command += serializeMembers(columns, !measuresRowAxis ? measures : [], sort);\n\t } else if (measures.length && !measuresRowAxis) {\n\t command += measureNames(measures).join(\",\");\n\t }\n\n\t command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON COLUMNS\";\n\n\t if (rows.length || (measuresRowAxis && measures.length > 1)) {\n\t command += \", NON EMPTY {\";\n\n\t if (rows.length) {\n\t command += serializeMembers(rows, measuresRowAxis ? measures : [], sort);\n\t } else {\n\t command += measureNames(measures).join(\",\");\n\t }\n\n\t command += \"} DIMENSION PROPERTIES CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON ROWS\";\n\t }\n\n\t if (options.filter) {\n\t command += \" FROM \";\n\t command += \"(\";\n\t command += serializeFilters(options.filter, options.connection.cube);\n\t command += \")\";\n\t } else {\n\t command += \" FROM [\" + options.connection.cube + \"]\";\n\t }\n\n\t if (measures.length == 1 && columns.length) {\n\t command += \" WHERE (\" + measureNames(measures).join(\",\") + \")\";\n\t }\n\n\t command += '' + options.connection.catalog + 'Multidimensional';\n\t return command.replace(/\\&/g, \"&\");\n\t },\n\t discover: function(options) {\n\t options = options || {};\n\n\t var command = '
';\n\t command += \"\" + (xmlaDiscoverCommands[options.command] || options.command) + \"\";\n\n\t command += \"\" + serializeOptions(\"RestrictionList\", options.restrictions, true) + \"\";\n\n\t if (options.connection && options.connection.catalog) {\n\t options.properties = $.extend({}, {\n\t Catalog: options.connection.catalog\n\t }, options.properties);\n\t }\n\n\t command += \"\" + serializeOptions(\"PropertyList\", options.properties) + \"\";\n\n\t command += '';\n\t return command;\n\t }\n\t };\n\n\t var XmlaTransport = kendo.data.RemoteTransport.extend({\n\t init: function(options) {\n\t var originalOptions = options;\n\n\t options = this.options = extend(true, {}, this.options, options);\n\n\t kendo.data.RemoteTransport.call(this, options);\n\n\t if (isFunction(originalOptions.discover)) {\n\t this.discover = originalOptions.discover;\n\t } else if (typeof originalOptions.discover === \"string\") {\n\t this.options.discover = {\n\t url: originalOptions.discover\n\t };\n\t } else if (!originalOptions.discover) {\n\t this.options.discover = this.options.read;\n\t }\n\t },\n\t setup: function(options, type) {\n\t options.data = options.data || {};\n\t $.extend(true, options.data, { connection: this.options.connection });\n\n\t return kendo.data.RemoteTransport.fn.setup.call(this, options, type);\n\t },\n\t options: {\n\t read: {\n\t dataType: \"text\",\n\t contentType: \"text/xml\",\n\t type: \"POST\"\n\t },\n\t discover: {\n\t dataType: \"text\",\n\t contentType: \"text/xml\",\n\t type: \"POST\"\n\t },\n\t parameterMap: function(options, type) {\n\t return convertersMap[type](options,type);\n\t }\n\t },\n\n\t discover: function(options) {\n\t return $.ajax(this.setup(options, \"discover\"));\n\t }\n\t });\n\n\t var XmlaTransportV2 = Class.extend({\n\t init: function(options) {\n\t options = this.options = extend(true, {}, this.options, options);\n\t },\n\t setup: function(options) {\n\t return $.extend(true, options || {}, { connection: this.options.connection });\n\t },\n\t read: function(options) {\n\t var that = this,\n\t success,\n\t error;\n\n\t var fetchOptions = that.setup(options.data, READ);\n\n\t success = options.success || $.noop;\n\t error = options.error || $.noop;\n\n\t if (options.parameterMap) {\n\t fetchOptions = that.parameterMap(fetchOptions, READ);\n\t }\n\n\t fetchData({ url: that.options.read }, fetchOptions)\n\t .then(createDataState)\n\t .then(function (newDataState) {\n\t success(newDataState);\n\t })\n\t .catch(function (err) { error(err); });\n\t },\n\n\t catalog: function(val) {\n\t var options = this.options || {};\n\n\t if (val === undefined) {\n\t return (options.connection || {}).catalog;\n\n\t }\n\n\t var connection = options.connection || {};\n\t connection.catalog = val;\n\n\t this.options.connection = connection;\n\t $.extend(this.transport.options, { connection: connection });\n\t },\n\t cube: function(val) {\n\t var options = this.options || {};\n\n\t if (val === undefined) {\n\t return (options.connection || {}).cube;\n\t }\n\n\t var connection = options.connection || {};\n\t connection.cube = val;\n\n\t this.options.connection = connection;\n\t extend(true, this.transport.options, { connection: connection });\n\t },\n\n\t discover: function(options) {\n\t return fetchDiscover({ url: this.options.read }, options);\n\t }\n\t });\n\n\t function asArray(object) {\n\t if (object == null) {\n\t return [];\n\t }\n\n\t var type = toString.call(object);\n\t if (type !== \"[object Array]\") {\n\t return [object];\n\t }\n\n\t return object;\n\t }\n\n\t function translateAxis(axis) {\n\t var result = { tuples: [] };\n\t var tuples = asArray(kendo.getter(\"Tuples.Tuple\", true)(axis));\n\t var captionGetter = kendo.getter(\"Caption['#text']\");\n\t var unameGetter = kendo.getter(\"UName['#text']\");\n\t var levelNameGetter = kendo.getter(\"LName['#text']\");\n\t var levelNumGetter = kendo.getter(\"LNum['#text']\");\n\t var childrenGetter = kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true);\n\t var hierarchyGetter = kendo.getter(\"['@Hierarchy']\");\n\t var parentNameGetter = kendo.getter(\"PARENT_UNIQUE_NAME['#text']\", true);\n\n\t for (var idx = 0; idx < tuples.length; idx++) {\n\t var members = [];\n\t var member = asArray(tuples[idx].Member);\n\t for (var memberIdx = 0; memberIdx < member.length; memberIdx++) {\n\t members.push({\n\t children: [],\n\t caption: captionGetter(member[memberIdx]),\n\t name: unameGetter(member[memberIdx]),\n\t levelName: levelNameGetter(member[memberIdx]),\n\t levelNum: levelNumGetter(member[memberIdx]),\n\t hasChildren: parseInt(childrenGetter(member[memberIdx]), 10) > 0,\n\t parentName: parentNameGetter(member[memberIdx]),\n\t hierarchy: hierarchyGetter(member[memberIdx])\n\t });\n\t }\n\n\t result.tuples.push({ members: members });\n\t }\n\t return result;\n\t }\n\n\t var schemaDataReaderMap = {\n\t cubes: {\n\t name: kendo.getter(\"CUBE_NAME['#text']\", true),\n\t caption: kendo.getter(\"CUBE_CAPTION['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true),\n\t type: kendo.getter(\"CUBE_TYPE['#text']\", true)\n\t },\n\t catalogs: {\n\t name: kendo.getter(\"CATALOG_NAME['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true)\n\t },\n\t measures: {\n\t name: kendo.getter(\"MEASURE_NAME['#text']\", true),\n\t caption: kendo.getter(\"MEASURE_CAPTION['#text']\", true),\n\t uniqueName: kendo.getter(\"MEASURE_UNIQUE_NAME['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true),\n\t aggregator: kendo.getter(\"MEASURE_AGGREGATOR['#text']\", true),\n\t groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true),\n\t displayFolder: kendo.getter(\"MEASURE_DISPLAY_FOLDER['#text']\", true),\n\t defaultFormat: kendo.getter(\"DEFAULT_FORMAT_STRING['#text']\", true)\n\t },\n\t kpis: {\n\t name: kendo.getter(\"KPI_NAME['#text']\", true),\n\t caption: kendo.getter(\"KPI_CAPTION['#text']\", true),\n\t value: kendo.getter(\"KPI_VALUE['#text']\", true),\n\t goal: kendo.getter(\"KPI_GOAL['#text']\", true),\n\t status: kendo.getter(\"KPI_STATUS['#text']\", true),\n\t trend: kendo.getter(\"KPI_TREND['#text']\", true),\n\t statusGraphic: kendo.getter(\"KPI_STATUS_GRAPHIC['#text']\", true),\n\t trendGraphic: kendo.getter(\"KPI_TREND_GRAPHIC['#text']\", true),\n\t description: kendo.getter(\"KPI_DESCRIPTION['#text']\", true),\n\t groupName: kendo.getter(\"MEASUREGROUP_NAME['#text']\", true)\n\t },\n\t dimensions: {\n\t name: kendo.getter(\"DIMENSION_NAME['#text']\", true),\n\t caption: kendo.getter(\"DIMENSION_CAPTION['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true),\n\t uniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n\t defaultHierarchy: kendo.getter(\"DEFAULT_HIERARCHY['#text']\", true),\n\t type: kendo.getter(\"DIMENSION_TYPE['#text']\", true)\n\t//unknown = 0; time = 1; measure = 2; other = 3; quantitative = 5; accounts = 6; customers = 7; products = 8; scenario = 9; utility = 10; currency = 11; rates = 12; channel = 13; promotion = 14; organization = 15; billOfMaterials = 16; geography = 17;\n\n\t },\n\t hierarchies: {\n\t name: kendo.getter(\"HIERARCHY_NAME['#text']\", true),\n\t caption: kendo.getter(\"HIERARCHY_CAPTION['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true),\n\t uniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n\t dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n\t displayFolder: kendo.getter(\"HIERARCHY_DISPLAY_FOLDER['#text']\", true),\n\t origin: kendo.getter(\"HIERARCHY_ORIGIN['#text']\", true),\n\t defaultMember: kendo.getter(\"DEFAULT_MEMBER['#text']\", true)\n\t },\n\t levels: {\n\t name: kendo.getter(\"LEVEL_NAME['#text']\", true),\n\t caption: kendo.getter(\"LEVEL_CAPTION['#text']\", true),\n\t description: kendo.getter(\"DESCRIPTION['#text']\", true),\n\t uniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n\t dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n\t displayFolder: kendo.getter(\"LEVEL_DISPLAY_FOLDER['#text']\", true),\n\t orderingProperty: kendo.getter(\"LEVEL_ORDERING_PROPERTY['#text']\", true),\n\t origin: kendo.getter(\"LEVEL_ORIGIN['#text']\", true),\n\t hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true)\n\t },\n\t members: {\n\t name: kendo.getter(\"MEMBER_NAME['#text']\", true),\n\t caption: kendo.getter(\"MEMBER_CAPTION['#text']\", true),\n\t uniqueName: kendo.getter(\"MEMBER_UNIQUE_NAME['#text']\", true),\n\t dimensionUniqueName: kendo.getter(\"DIMENSION_UNIQUE_NAME['#text']\", true),\n\t hierarchyUniqueName: kendo.getter(\"HIERARCHY_UNIQUE_NAME['#text']\", true),\n\t levelUniqueName: kendo.getter(\"LEVEL_UNIQUE_NAME['#text']\", true),\n\t childrenCardinality: kendo.getter(\"CHILDREN_CARDINALITY['#text']\", true)\n\t }\n\t };\n\n\t var xmlaReaderMethods = [\"axes\", \"catalogs\", \"cubes\", \"dimensions\", \"hierarchies\", \"levels\", \"measures\"];\n\n\t var XmlaDataReader = kendo.data.XmlDataReader.extend({\n\t init: function(options) {\n\t kendo.data.XmlDataReader.call(this, options);\n\n\t this._extend(options);\n\t },\n\t _extend: function(options) {\n\t var idx = 0;\n\t var length = xmlaReaderMethods.length;\n\t var methodName;\n\t var option;\n\n\t for (; idx < length; idx++) {\n\t methodName = xmlaReaderMethods[idx];\n\t option = options[methodName];\n\n\t if (option && option !== identity) {\n\t this[methodName] = option;\n\t }\n\t }\n\t },\n\t parse: function(xml) {\n\t var result = kendo.data.XmlDataReader.fn.parse(xml.replace(/<(\\/?)(\\w|-)+:/g, \"<$1\"));\n\t return kendo.getter(\"['Envelope']['Body']\", true)(result);\n\t },\n\t errors: function(root) {\n\t var fault = kendo.getter(\"['Fault']\", true)(root);\n\t if (fault) {\n\t return [{\n\t faultstring: kendo.getter(\"faultstring['#text']\", true)(fault),\n\t faultcode: kendo.getter(\"faultcode['#text']\", true)(fault)\n\t }];\n\t }\n\t return null;\n\t },\n\t axes: function(root) {\n\t root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n\t var axes = asArray(kendo.getter(\"Axes.Axis\", true)(root));\n\t var axis;\n\n\t var result = {\n\t columns: {},\n\t rows: {}\n\t };\n\n\t for (var idx = 0; idx < axes.length; idx++) {\n\t axis = axes[idx];\n\n\t if (axis[\"@name\"].toLowerCase() !== \"sliceraxis\") {\n\t if (!result.columns.tuples) {\n\t result.columns = translateAxis(axis);\n\t } else {\n\t result.rows = translateAxis(axis);\n\t }\n\t }\n\t }\n\n\t return result;\n\t },\n\t data: function(root) {\n\t root = kendo.getter(\"ExecuteResponse[\\\"return\\\"].root\", true)(root);\n\n\t var cells = asArray(kendo.getter(\"CellData.Cell\", true)(root));\n\n\t var result = [];\n\t var ordinalGetter = kendo.getter(\"['@CellOrdinal']\");\n\t var valueGetter = kendo.getter(\"Value['#text']\");\n\t var fmtValueGetter = kendo.getter(\"FmtValue['#text']\");\n\n\t for (var idx = 0; idx < cells.length; idx++) {\n\t result.push({\n\t value: valueGetter(cells[idx]),\n\t fmtValue: fmtValueGetter(cells[idx]),\n\t ordinal: parseInt(ordinalGetter(cells[idx]), 10)\n\t });\n\t }\n\n\t return result;\n\t },\n\t _mapSchema: function(root, getters) {\n\t root = kendo.getter(\"DiscoverResponse[\\\"return\\\"].root\", true)(root);\n\t var rows = asArray(kendo.getter(\"row\", true)(root));\n\n\t var result = [];\n\n\t for (var idx = 0; idx < rows.length; idx++) {\n\t var obj = {};\n\t for (var key in getters) {\n\t obj[key] = getters[key](rows[idx]);\n\t }\n\t result.push(obj);\n\t }\n\n\t return result;\n\t },\n\t measures: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.measures);\n\t },\n\t kpis: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.kpis);\n\t },\n\t hierarchies: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.hierarchies);\n\t },\n\t levels: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.levels);\n\t },\n\t dimensions: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.dimensions);\n\t },\n\t cubes: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.cubes);\n\t },\n\t catalogs: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.catalogs);\n\t },\n\t members: function(root) {\n\t return this._mapSchema(root, schemaDataReaderMap.members);\n\t }\n\t });\n\n\t extend(true, kendo.data, {\n\t PivotDataSource: PivotDataSource,\n\t PivotDataSourceV2: PivotDataSourceV2,\n\t XmlaTransport: XmlaTransport,\n\t XmlaDataReader: XmlaDataReader,\n\t PivotCubeBuilder: PivotCubeBuilder,\n\t transports: {\n\t xmla: XmlaTransport\n\t },\n\t readers: {\n\t xmla: XmlaDataReader\n\t }\n\t });\n\n\t var sortExpr = function(expressions, name) {\n\t if (!expressions) {\n\t return null;\n\t }\n\n\t for (var idx = 0, length = expressions.length; idx < length; idx++) {\n\t if (expressions[idx].field === name) {\n\t return expressions[idx];\n\t }\n\t }\n\n\t return null;\n\t };\n\n\t var removeExpr = function(expressions, name) {\n\t var result = [];\n\n\t for (var idx = 0, length = expressions.length; idx < length; idx++) {\n\t if (expressions[idx].field !== name) {\n\t result.push(expressions[idx]);\n\t }\n\t }\n\n\t return result;\n\t };\n\n\t kendo.ui.PivotSettingTarget = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that.element.addClass(\"k-pivot-setting\");\n\n\t that.dataSource = kendo.data.PivotDataSource.create(options.dataSource);\n\n\t that._refreshHandler = $.proxy(that.refresh, that);\n\t that.dataSource.first(CHANGE, that._refreshHandler);\n\n\t if (!options.template) {\n\t that.options.template = \"
${data.name || data}' +\n\t (that.options.enabled ?\n\t '' : \"\") + '
';\n\t }\n\n\t that.template = kendo.template(that.options.template);\n\t that.emptyTemplate = kendo.template(that.options.emptyTemplate);\n\n\t that._sortable();\n\n\t that.element.on(\"click\" + NS, \".k-button,.k-item\", function(e) {\n\t var target = $(e.target);\n\t var name = target.closest(\"[\" + kendo.attr(\"name\") + \"]\")\n\t .attr(kendo.attr(\"name\"));\n\n\t if (!name) {\n\t return;\n\t }\n\n\t if (target.hasClass(\"k-i-close\")) {\n\t that.remove(name);\n\t } else if (that.options.sortable && target[0] === e.currentTarget) {\n\t that.sort({\n\t field: name,\n\t dir: target.find(\".k-i-sort-asc-sm\")[0] ? \"desc\" : \"asc\"\n\t });\n\t }\n\t });\n\n\t if (options.filterable || options.sortable) {\n\t that.fieldMenu = new ui.PivotFieldMenu(that.element, {\n\t messages: that.options.messages.fieldMenu,\n\t filter: \".k-setting-fieldmenu\",\n\t filterable: options.filterable,\n\t sortable: options.sortable,\n\t dataSource: that.dataSource\n\t });\n\t }\n\n\t that.refresh();\n\t },\n\n\t options: {\n\t name: \"PivotSettingTarget\",\n\t template: null,\n\t filterable: false,\n\t sortable: false,\n\t emptyTemplate: \"
${data}
\",\n\t setting: \"columns\",\n\t enabled: true,\n\t messages: {\n\t empty: \"Drop Fields Here\"\n\t }\n\t },\n\t setDataSource: function(dataSource) {\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t this.dataSource = this.options.dataSource = dataSource;\n\n\t if (this.fieldMenu) {\n\t this.fieldMenu.setDataSource(dataSource);\n\t }\n\t dataSource.first(CHANGE, this._refreshHandler);\n\n\t this.refresh();\n\t },\n\n\t _sortable: function() {\n\t var that = this;\n\n\t if (that.options.enabled) {\n\t this.sortable = this.element.kendoSortable({\n\t connectWith: this.options.connectWith,\n\t hint: that.options.hint,\n\t filter: \">*:not(.k-empty)\",\n\t cursor: \"move\",\n\t start: function(e) {\n\t e.item.trigger(\"focus\").trigger(\"blur\");\n\t },\n\t change: function(e) {\n\t var name = e.item.attr(kendo.attr(\"name\"));\n\n\t if (e.action == \"receive\") {\n\t that.add(name);\n\t } else if (e.action == \"remove\") {\n\t that.remove(name);\n\t } else if (e.action == \"sort\") {\n\t that.move(name, e.newIndex);\n\t }\n\t }\n\t }).data(\"kendoSortable\");\n\t }\n\t },\n\n\t _isKPI: function(data) {\n\t return data.type === \"kpi\" || data.measure;\n\t },\n\n\t validate: function(data) {\n\t var isMeasure = (data.type == 2 || \"aggregator\" in data || this._isKPI(data));\n\n\t if (isMeasure) {\n\t return this.options.setting === \"measures\";\n\t }\n\n\t if (this.options.setting === \"measures\") {\n\t return isMeasure;\n\t }\n\n\t var items = this.dataSource[this.options.setting]();\n\t var name = data.defaultHierarchy || data.uniqueName;\n\t if (indexOf(name, items) > -1) {\n\t return false;\n\t }\n\n\t items = this.dataSource[this.options.setting === \"columns\" ? \"rows\" : \"columns\"]();\n\t if (indexOf(name, items) > -1) {\n\t return false;\n\t }\n\n\t return true;\n\t },\n\n\t add: function(name) {\n\t var items = this.dataSource[this.options.setting]();\n\t var i, l;\n\n\t name = Array.isArray(name) ? name.slice(0) : [name];\n\n\t for (i = 0, l = name.length; i < l; i++) {\n\t if (indexOf(name[i], items) !== -1) {\n\t name.splice(i, 1);\n\t i -= 1;\n\t l -= 1;\n\t }\n\t }\n\n\t if (name.length) {\n\t items = items.concat(name);\n\t this.dataSource[this.options.setting](items);\n\t }\n\t },\n\n\t move: function(name, index) {\n\t var items = this.dataSource[this.options.setting]();\n\t var idx = indexOf(name, items);\n\n\t if (idx > -1) {\n\t name = items.splice(idx, 1)[0];\n\n\t items.splice(index, 0, name);\n\n\t this.dataSource[this.options.setting](items);\n\t }\n\t },\n\n\t remove: function (name) {\n\t var items = this.dataSource[this.options.setting]();\n\t var idx = indexOf(name, items);\n\t var sortExpressions = this.dataSource.sort();\n\t var filter = this.dataSource.filter();\n\n\t if (idx > -1) {\n\t if (filter) {\n\t filter.filters = removeExpr(filter.filters, name);\n\t this.dataSource._filter.filters = filter.filters;\n\t if (!filter.filters.length) {\n\t this.dataSource._filter = null;\n\t }\n\t }\n\t if (sortExpressions) {\n\t sortExpressions = removeExpr(sortExpressions, name);\n\t this.dataSource._sort = sortExpressions;\n\t }\n\t items.splice(idx, 1);\n\t this.dataSource[this.options.setting](items);\n\t }\n\t },\n\n\t sort: function(expr) {\n\t var sortable = this.options.sortable;\n\t var allowUnsort = sortable === true || sortable.allowUnsort;\n\t var skipExpr = allowUnsort && expr.dir === \"asc\";\n\n\t var expressions = (this.dataSource.sort() || []);\n\t var result = removeExpr(expressions, expr.field);\n\n\t if (skipExpr && expressions.length !== result.length) {\n\t expr = null;\n\t }\n\n\t if (expr) {\n\t result.push(expr);\n\t }\n\n\t this.dataSource.sort(result);\n\t },\n\n\t refresh: function() {\n\t var html = \"\";\n\t var items = this.dataSource[this.options.setting]();\n\t var length = items.length;\n\t var idx = 0;\n\t var item;\n\n\t if (length) {\n\t for (; idx < length; idx++) {\n\t item = items[idx];\n\t item = item.name === undefined ? { name: item } : item;\n\n\t html += this.template(extend({ sortIcon: this._sortIcon(item.name) }, item));\n\t }\n\t } else {\n\t html = this.emptyTemplate(this.options.messages.empty);\n\t }\n\n\t this.element.html(html);\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t this.element.off(NS);\n\n\t if (this.sortable) {\n\t this.sortable.destroy();\n\t }\n\n\t if (this.fieldMenu) {\n\t this.fieldMenu.destroy();\n\t }\n\n\t this.element = null;\n\t this._refreshHandler = null;\n\t },\n\n\t _sortIcon: function(name) {\n\t var expressions = this.dataSource.sort();\n\t var expr = sortExpr(expressions, getName(name));\n\t var icon = \"\";\n\n\t if (expr) {\n\t icon = \"k-i-sort-\" + expr.dir;\n\t }\n\n\t return icon;\n\t }\n\t });\n\n\t kendo.ui.PivotSettingTargetV2 = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that.dataSource = kendo.data.PivotDataSourceV2.create(options.dataSource);\n\n\t that._refreshHandler = $.proxy(that.refresh, that);\n\t that.dataSource.first(CHANGE, that._refreshHandler);\n\n\t that.template = kendo.template(that.options.template);\n\n\t that._sortable();\n\n\t that.element.on(\"click\" + NS, \".k-i-close-circle\", function(e) {\n\t var target = $(e.target);\n\t var parent = target.closest(\".k-chip\");\n\t var name = parent.find(\".k-chip-label\").text();\n\n\t if (!name) {\n\t return;\n\t }\n\n\t that.remove(name);\n\t parent.remove();\n\t that.trigger(\"remove\", { name: name });\n\t });\n\n\t if (options.filterable || options.sortable) {\n\t that.fieldMenu = new ui.PivotFieldMenuV2(that.element, {\n\t messages: that.options.messages.fieldMenu,\n\t filterable: options.filterable,\n\t filter: \".k-i-more-vertical\",\n\t sortable: options.sortable,\n\t dataSource: that.dataSource\n\t });\n\t }\n\n\t that.refresh();\n\t },\n\n\t events: [\"remove\"],\n\n\t options: {\n\t name: \"PivotSettingTargetV2\",\n\t template: null,\n\t filterable: false,\n\t sortable: false,\n\t setting: \"columns\",\n\t enabled: true,\n\t messages: {\n\t empty: \"Drop Fields Here\"\n\t }\n\t },\n\t setDataSource: function(dataSource) {\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t this.dataSource = this.options.dataSource = dataSource;\n\n\t if (this.fieldMenu) {\n\t this.fieldMenu.setDataSource(dataSource);\n\t }\n\t dataSource.first(CHANGE, this._refreshHandler);\n\n\t this.refresh();\n\t },\n\n\t _applyState: function () {\n\t if (this._sortState !== undefined) {\n\t this.dataSource._sort = this._sortState;\n\t this._sortState = undefined;\n\t }\n\n\t if (this._stateFilter !== undefined) {\n\t this.dataSource._filter = this._stateFilter;\n\t this._stateFilter = undefined;\n\t }\n\n\t this.dataSource[\"_\"+this.options.setting] = this.options.setting === \"measures\" ? normalizeMeasures(this._savedState) : normalizeMembers(this._savedState);\n\t },\n\n\t _cancelChanges: function () {\n\t this._sortState = undefined;\n\t this._stateFilter = undefined;\n\t this._savedState = kendo.deepExtend([], this._initialState);\n\t this._redraw();\n\t },\n\n\t _state: function (newState, modifyInit) {\n\t var that = this;\n\n\t if (!newState) {\n\t return that._savedState || [];\n\t } else {\n\t if (!that._savedState || modifyInit) {\n\t that._initialState = kendo.deepExtend([], newState);\n\t }\n\t that._savedState = kendo.deepExtend([], newState);\n\t }\n\t },\n\n\t _sortable: function() {\n\t var that = this;\n\n\t this.sortable = this.element.kendoSortable({\n\t connectWith: this.options.connectWith,\n\t hint: that.options.hint,\n\t filter: \">*:not(.k-empty)\",\n\t cursor: \"move\",\n\t start: function(e) {\n\t e.item.focus().blur();\n\t },\n\t change: function(e) {\n\t var name = e.item.find(\".k-chip-label\").text();\n\n\t if (e.action == \"receive\") {\n\t that.add(name);\n\t } else if (e.action == \"remove\") {\n\t that.remove(name);\n\t } else if (e.action == \"sort\") {\n\t that.move(name, e.newIndex);\n\t }\n\t }\n\t }).data(\"kendoSortable\");\n\t },\n\n\t add: function(name) {\n\t var items = this._state();\n\t var i, l;\n\n\t name = $.isArray(name) ? name.slice(0) : [name];\n\n\t for (i = 0, l = name.length; i < l; i++) {\n\t if (indexOf(name[i], items) !== -1) {\n\t name.splice(i, 1);\n\t i -= 1;\n\t l -= 1;\n\t }\n\t }\n\n\t if (name.length) {\n\t items = items.concat(name);\n\t this._state(items);\n\t this._redraw();\n\t }\n\t },\n\n\t move: function(name, index) {\n\t var items = this._state();\n\t var idx = indexOf(name, items);\n\n\t if (idx > -1) {\n\t name = items.splice(idx, 1)[0];\n\n\t items.splice(index, 0, name);\n\n\t this._state(items);\n\t this._redraw();\n\t }\n\t },\n\n\t remove: function (name) {\n\t var items = this._state();\n\t var idx = indexOf(name, items);\n\t var sortExpressions = this.dataSource.sort();\n\t var filter = this.dataSource.filter();\n\n\t if (idx > -1) {\n\t if (filter) {\n\t filter.filters = removeExpr(filter.filters, name);\n\t this._savedFilter = this.dataSource._filter;\n\t this._savedFilter.filters = filter.filters;\n\t if (!filter.filters.length) {\n\t this._savedFilter = null;\n\t }\n\t }\n\t if (sortExpressions) {\n\t sortExpressions = removeExpr(sortExpressions, name);\n\t this._sortState = sortExpressions;\n\t }\n\t items.splice(idx, 1);\n\t this._state(items);\n\t this._redraw();\n\t }\n\t },\n\n\t _emptyState: function (enable) {\n\t var that = this;\n\t if (enable) {\n\t that.element.html(this.options.messages.empty)\n\t .addClass(\"k-settings-description\")\n\t .removeClass(\"k-chip-list\");\n\t } else {\n\t that.element\n\t .removeClass(\"k-settings-description\")\n\t .addClass(\"k-chip-list\");\n\t }\n\t },\n\n\t _redraw: function () {\n\t var items = this._state() || [];\n\t this._emptyState(!items.length);\n\t if (items.length) {\n\t this.element.html(this._targetsHTML(items));\n\t }\n\t },\n\n\t _targetsHTML: function(items) {\n\t var item;\n\t var html = \"\";\n\t var idx = 0;\n\t var options = this.options;\n\t var enabled = false;\n\n\t if (this.options.setting != \"measures\") {\n\t enabled = options.filterable || options.sortable;\n\t }\n\n\t if (items.length) {\n\t for (; idx < items.length; idx++) {\n\t item = items[idx];\n\t item = item.name === undefined ? { name: item } : item;\n\n\t html += this.template({ name: item.name, menuenabled: enabled});\n\t }\n\t }\n\t return html;\n\t },\n\n\t refresh: function() {\n\t if (this.dataSource._preventRefresh) {\n\t return;\n\t }\n\t var items = this.dataSource[this.options.setting]();\n\t this._emptyState(!this._state().length);\n\t this._state(items, true);\n\t if (items.length) {\n\t this.element.html(this._targetsHTML(items));\n\t }\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\n\t this.dataSource.unbind(CHANGE, this._refreshHandler);\n\t this.element.off(NS);\n\n\t if (this.sortable) {\n\t this.sortable.destroy();\n\t }\n\n\t if (this.fieldMenu) {\n\t this.fieldMenu.destroy();\n\t }\n\n\t this.element = null;\n\t this._refreshHandler = null;\n\t }\n\t });\n\n\t var PivotConfiguratorButton = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\t Widget.fn.init.call(that, element, options);\n\t that.element = $(element);\n\n\t that._element();\n\t that._attachEvents();\n\t },\n\n\t options: {\n\t name: \"PivotConfiguratorButton\",\n\t text: \"Change settings\",\n\t configurator: \"\"\n\t },\n\n\t destroy: function () {\n\t this.element.off(NS);\n\t },\n\n\t setOptions: function(options) {\n\t var that = this;\n\t kendo.deepExtend(that.options, options);\n\t this.init(this.element, this.options);\n\t },\n\n\t toggle: function () {\n\t var attr = kendo.attr(\"role\");\n\t var pivotEl = this.element\n\t .closest(\"[\"+attr+\"=pivotcontainer]\")\n\t .find(\"[\"+attr+\"=pivotgridv2]\");\n\t var pivot;\n\n\t $(\"#\"+this.options.configurator).toggleClass(\"k-hidden\");\n\n\t if (pivotEl.length) {\n\t pivot = pivotEl.getKendoPivotGridV2();\n\t pivot._setContentWidth();\n\t pivot._updateDimensions();\n\t }\n\t },\n\n\t _attachEvents: function () {\n\t this.element.on(\"click\"+NS, $.proxy(this.toggle, this));\n\t },\n\n\t _element: function () {\n\t var options = this.options;\n\t this.element.addClass(\"k-pivotgrid-configurator-button\");\n\t this.element.html(kendo.format(\"{0}\",options.text));\n\t }\n\t });\n\n\t var PivotContainer = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\t Widget.fn.init.call(that, element, options);\n\t that.element = $(element);\n\t that.options = options;\n\n\n\t that._addClasses();\n\t },\n\n\t options: {\n\t name: \"PivotContainer\",\n\t configuratorPosition: \"left\"\n\t },\n\n\t setOptions: function(options) {\n\t var that = this;\n\t kendo.deepExtend(that.options, options);\n\t this.init(this.element, this.options);\n\t },\n\n\t _addClasses: function () {\n\t var options = this.options;\n\t var className;\n\t this.element.removeClass(\"k-flex-row k-flex-row-reverse k-flex-column k-flex-column-reverse\");\n\n\t switch (options.configuratorPosition) {\n\t case \"right\":\n\t className = \"k-flex-row\";\n\t break;\n\t case \"left\":\n\t className = \"k-flex-row-reverse\";\n\t break;\n\t case \"bottom\":\n\t className = \"k-flex-column\";\n\t break;\n\t case \"top\":\n\t className = \"k-flex-column-reverse\";\n\t break;\n\t default:\n\t className = \"k-flex-row\";\n\t }\n\n\t this.element\n\t .addClass(\"k-d-flex k-pos-relative\")\n\t .addClass(className);\n\t }\n\t });\n\n\t var PivotGridV2 = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that._dataSource();\n\n\t that._bindConfigurator();\n\n\t that._wrapper();\n\n\t that._columnHeadersWrapper = $('
');\n\t that._rowHeadersWrapper = $('
');\n\t that._contentWrapper = $('
');\n\n\t that.wrapper.append(that._columnHeadersWrapper);\n\t that.wrapper.append(that._rowHeadersWrapper);\n\t that.wrapper.append(that._contentWrapper);\n\n\t that._columnBuilder = new ColumnRowBuilder( { template: this.options.columnHeaderTemplate, axes: \"columns\" });\n\t that._rowBuilder = new ColumnRowBuilder( { template: this.options.rowHeaderTemplate, axes: \"rows\" });\n\t that._contentBuilder = new ContentBuilderV2( { template: this.options.dataCellTemplate ||DATACELL_TEMPLATE });\n\n\t that._scrollable();\n\t that._rowHeadersWrapper\n\t .add(that._columnHeadersWrapper)\n\t .on(\"click\", \"span.k-icon\", function() {\n\t var button = $(this);\n\t var path = button.parent().attr(kendo.attr(\"key\"));\n\t var expanded = button.hasClass(\"k-i-arrow-chevron-up\");\n\t var isRow = button.closest(\".k-pivotgrid-row-headers\").length !== 0;\n\t var paths = path.split(\",\");\n\t var eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n\n\t if (that.trigger(eventName, { path: paths, axis: isRow ? \"rows\": \"columns\"})) {\n\t return;\n\t }\n\n\t var reducerPayLoad = {\n\t type: \"HEADERS_ACTION_TOGGLE\",\n\t payload: paths,\n\t tree: isRow ? that._rowBuilder.getTree() : that._columnBuilder.getTree()\n\t };\n\t var currentAxes = isRow ? that.dataSource._rows : that.dataSource._columns;\n\t var newHeaders = headersReducer(currentAxes, reducerPayLoad);\n\n\t that.dataSource._preventRefresh = true;\n\n\t if (isRow) {\n\t that.dataSource.rows(newHeaders);\n\t } else {\n\t that.dataSource.columns(newHeaders);\n\t }\n\t });\n\n\t if (that.options.autoBind) {\n\t that.dataSource.fetch();\n\t }\n\n\t kendo.notify(that);\n\t },\n\n\t events: [\n\t DATABINDING,\n\t DATABOUND,\n\t EXPANDMEMBER,\n\t COLLAPSEMEMBER\n\t ],\n\n\t options: {\n\t name: \"PivotGridV2\",\n\t autoBind: true,\n\t height: null,\n\t columnWidth: null,\n\t configurator: \"\",\n\t columnHeaderTemplate: null,\n\t rowHeaderTemplate: null,\n\t dataCellTemplate: null\n\t },\n\n\t destroy: function () {\n\t var that = this;\n\t Widget.fn.destroy.call(that);\n\n\t if (that._windowResizeHandler) {\n\t $(window).off(RESIZE + NS, that._windowResizeHandler);\n\t that._windowResizeHandler = null;\n\t }\n\t },\n\n\t _dataSource: function() {\n\t var that = this;\n\t var dataSource = that.options.dataSource;\n\n\t dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n\n\t if (that.dataSource && this._refreshHandler) {\n\t that.dataSource.unbind(CHANGE, that._refreshHandler)\n\t .unbind(PROGRESS, that._progressHandler)\n\t .unbind(ERROR, that._errorHandler);\n\t } else {\n\t that._refreshHandler = $.proxy(that.refresh, that);\n\t that._progressHandler = $.proxy(that._requestStart, that);\n\t that._errorHandler = $.proxy(that._error, that);\n\t }\n\n\t that.dataSource = kendo.data.PivotDataSourceV2.create(dataSource)\n\t .bind(CHANGE, that._refreshHandler)\n\t .bind(PROGRESS, that._progressHandler)\n\t .bind(ERROR, that._errorHandler);\n\t },\n\n\t _resize: function() {\n\t var that = this;\n\t that.wrapper[0].style.setProperty('--kendo-scrollbar-width', kendo.format(\"{0}px\", getScollWidth()));\n\t },\n\n\t _scrollable: function() {\n\t var that = this;\n\t var columnsHeader = that._columnHeadersWrapper;\n\t var rowsHeader = that._rowHeadersWrapper;\n\n\t that._resize();\n\t that._windowResizeHandler = $.proxy(that._resize, that);\n\n\t that._contentWrapper.scroll(function() {\n\t kendo.scrollLeft(columnsHeader, this.scrollLeft);\n\t rowsHeader.scrollTop(this.scrollTop);\n\t });\n\n\t rowsHeader.bind(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, $.proxy(that._wheelScroll, that));\n\t $(window).on(RESIZE + NS, that._windowResizeHandler);\n\t },\n\n\t _wheelScroll: function (e) {\n\t if (e.ctrlKey) {\n\t return;\n\t }\n\n\t var delta = kendo.wheelDeltaY(e);\n\t var scrollTop = this._contentWrapper.scrollTop();\n\n\t if (delta) {\n\t e.preventDefault();\n\t $(e.currentTarget).one(\"wheel\" + NS, false);\n\n\t this._rowHeadersWrapper.scrollTop(scrollTop + (-delta));\n\t this._contentWrapper.scrollTop(scrollTop + (-delta));\n\t }\n\t },\n\n\t _wrapper: function() {\n\t var height = this.options.height;\n\n\t this.wrapper = this.element.addClass(\"k-widget k-pivotgrid\");\n\n\t this.wrapper.append('');\n\n\t if (height) {\n\t this.wrapper.css(\"height\", height);\n\t }\n\t },\n\n\t _progress: function(toggle) {\n\t kendo.ui.progress(this.wrapper, toggle);\n\t },\n\n\t _error: function() {\n\t this._progress(false);\n\t },\n\n\t _requestStart: function() {\n\t this._progress(true);\n\t },\n\n\t _updateDimensions: function () {\n\t var that = this;\n\t that.wrapper.css({\n\t \"grid-template-columns\": kendo.format(\"{0}px 1fr\", that._rowHeadersWrapper.find(\".k-pivotgrid-table\")[0].offsetWidth),\n\t \"grid-template-rows\": kendo.format(\"{0}px 1fr\", that._columnHeadersWrapper.find(\".k-pivotgrid-table\")[0].offsetHeight),\n\t });\n\t },\n\n\t _setContentWidth: function() {\n\t if (!this.options.columnWidth) {\n\t return;\n\t }\n\t var contentTable = this._contentWrapper.find(\"table\");\n\t var columnTable = this._columnHeadersWrapper.children(\"table\");\n\n\t var rowLength = contentTable.children(\"colgroup\").children().length;\n\n\t var calculatedWidth = rowLength * this.options.columnWidth;\n\t var minWidth = Math.ceil((calculatedWidth / this._contentWrapper.width()) * 100);\n\n\t if (minWidth < 100) {\n\t minWidth = 100;\n\t }\n\n\t contentTable.add(columnTable).css(\"width\", minWidth + \"%\");\n\t },\n\n\t _bindConfigurator: function() {\n\t var configurator = this.options.configurator;\n\t if (configurator) {\n\t $(configurator).kendoPivotConfiguratorV2(\"setDataSource\", this.dataSource);\n\t }\n\t },\n\n\t cellInfoByElement: function(element) {\n\t element = $(element);\n\n\t return this.cellInfo(element.index(), element.parent(\"tr\").index());\n\t },\n\n\t cellInfo: function(columnIndex, rowIndex) {\n\t var contentBuilder = this._contentBuilder;\n\t var dataIndex;\n\t var dataItem;\n\n\t if (columnIndex >= contentBuilder.columnsCount || columnIndex < 0 ||\n\t rowIndex >= contentBuilder.rowsCount || rowIndex < 0) {\n\t return null;\n\t }\n\n\t dataIndex = rowIndex*contentBuilder.columnsCount + columnIndex;\n\t dataItem = contentBuilder.hash[dataIndex < 0 ? 0 :dataIndex];\n\n\t return {\n\t columnTuple: dataItem.columnTuple,\n\t rowTuple: dataItem.rowTuple,\n\t dataItem: dataItem.data\n\t };\n\t },\n\n\t refresh: function () {\n\t var that = this;\n\n\t var dataSource = that.dataSource;\n\n\t if (that.trigger(DATABINDING, { action: \"rebind\" } )) {\n\t return;\n\t }\n\n\t that._columnBuilder.setTuples(dataSource._columnTuples);\n\t that._columnHeadersWrapper.html(that._columnBuilder.build());\n\n\t that._rowBuilder.setTuples(dataSource._rowTuples);\n\t that._rowHeadersWrapper.html(that._rowBuilder.build());\n\n\t that._contentBuilder.setRowColumnInfo({\n\t columnHeaderLeafs: that._columnBuilder.getHeaderLeafs(),\n\t rowHeaderLeafs: that._rowBuilder.getHeaderLeafs(),\n\t columnHeaderBreadth: that._columnBuilder.getBreadth(),\n\t rowHeaderDepth: that._rowBuilder.getBreadth(),\n\t data: dataSource._view\n\t });\n\n\t that._contentWrapper.html(that._contentBuilder.build());\n\n\t that._setContentWidth();\n\t that._updateDimensions();\n\n\t that._progress(false);\n\n\t that.trigger(DATABOUND);\n\t }\n\t });\n\n\t ui.plugin(PivotConfiguratorButton);\n\t ui.plugin(PivotContainer);\n\t ui.plugin(PivotGridV2);\n\n\t var PivotGrid = Widget.extend({\n\t init: function(element, options) {\n\t var that = this;\n\t var columnBuilder;\n\t var rowBuilder;\n\n\t Widget.fn.init.call(that, element, options);\n\n\t that._dataSource();\n\n\t that._bindConfigurator();\n\n\t that._wrapper();\n\t that._createLayout();\n\n\t that._columnBuilder = columnBuilder = new ColumnBuilder();\n\t that._rowBuilder = rowBuilder = new RowBuilder();\n\t that._contentBuilder = new ContentBuilder();\n\n\t that._templates();\n\n\t that.columnsHeader\n\t .add(that.rowsHeader)\n\t .on(\"click\", \"span.k-icon\", function() {\n\t var button = $(this);\n\t var builder = columnBuilder;\n\t var action = \"expandColumn\";\n\t var eventName;\n\t var path = button.attr(kendo.attr(\"path\"));\n\t var eventArgs = {\n\t axis: \"columns\",\n\t path: $.parseJSON(path)\n\t };\n\n\t if (button.parent().is(\"td\")) {\n\t builder = rowBuilder;\n\t action = \"expandRow\";\n\t eventArgs.axis = \"rows\";\n\t }\n\n\t var expanded = button.hasClass(STATE_EXPANDED);\n\t var metadata = builder.metadata[path];\n\t var request = metadata.expanded === undefined;\n\n\t eventName = expanded ? COLLAPSEMEMBER : EXPANDMEMBER;\n\t eventArgs.childrenLoaded = metadata.maxChildren > metadata.children;\n\n\t if (that.trigger(eventName, eventArgs)) {\n\t return;\n\t }\n\n\t builder.metadata[path].expanded = !expanded;\n\n\t button.toggleClass(STATE_EXPANDED, !expanded)\n\t .toggleClass(STATE_COLLAPSED, expanded);\n\n\t if (!expanded && request) {\n\t that.dataSource[action](eventArgs.path);\n\t } else {\n\t that.refresh();\n\t }\n\t });\n\n\t that._scrollable();\n\n\t if (that.options.autoBind) {\n\t that.dataSource.fetch();\n\t }\n\n\t kendo.notify(that);\n\t },\n\n\t events: [\n\t DATABINDING,\n\t DATABOUND,\n\t EXPANDMEMBER,\n\t COLLAPSEMEMBER\n\t ],\n\n\t options: {\n\t name: \"PivotGrid\",\n\t autoBind: true,\n\t reorderable: true,\n\t filterable: false,\n\t sortable: false,\n\t height: null,\n\t columnWidth: 100,\n\t configurator: \"\",\n\t columnHeaderTemplate: null,\n\t rowHeaderTemplate: null,\n\t dataCellTemplate: null,\n\t kpiStatusTemplate: null,\n\t kpiTrendTemplate: null,\n\t messages: {\n\t measureFields: \"Drop Data Fields Here\",\n\t columnFields: \"Drop Column Fields Here\",\n\t rowFields: \"Drop Rows Fields Here\"\n\t }\n\t },\n\n\t _templates: function() {\n\t var columnTemplate = this.options.columnHeaderTemplate;\n\t var rowTemplate = this.options.rowHeaderTemplate;\n\t var dataTemplate = this.options.dataCellTemplate;\n\t var kpiStatusTemplate = this.options.kpiStatusTemplate;\n\t var kpiTrendTemplate = this.options.kpiTrendTemplate;\n\n\t this._columnBuilder.template = kendo.template(columnTemplate || HEADER_TEMPLATE, { useWithBlock: !!columnTemplate });\n\t this._contentBuilder.dataTemplate = kendo.template(dataTemplate || DATACELL_TEMPLATE, { useWithBlock: !!dataTemplate });\n\t this._contentBuilder.kpiStatusTemplate = kendo.template(kpiStatusTemplate || KPISTATUS_TEMPLATE, { useWithBlock: !!kpiStatusTemplate });\n\t this._contentBuilder.kpiTrendTemplate = kendo.template(kpiTrendTemplate || KPITREND_TEMPLATE, { useWithBlock: !!kpiTrendTemplate });\n\t this._rowBuilder.template = kendo.template(rowTemplate || HEADER_TEMPLATE, { useWithBlock: !!rowTemplate });\n\t },\n\n\t _bindConfigurator: function() {\n\t var configurator = this.options.configurator;\n\t if (configurator) {\n\t $(configurator).kendoPivotConfigurator(\"setDataSource\", this.dataSource);\n\t }\n\t },\n\n\t cellInfoByElement: function(element) {\n\t element = $(element);\n\n\t return this.cellInfo(element.index(), element.parent(\"tr\").index());\n\t },\n\n\t cellInfo: function(columnIndex, rowIndex) {\n\t var contentBuilder = this._contentBuilder;\n\t var columnInfo = contentBuilder.columnIndexes[columnIndex || 0];\n\t var rowInfo = contentBuilder.rowIndexes[rowIndex || 0];\n\t var dataIndex;\n\n\t if (!columnInfo || !rowInfo) {\n\t return null;\n\t }\n\n\t dataIndex = (rowInfo.index * contentBuilder.rowLength) + columnInfo.index;\n\n\t return {\n\t columnTuple: columnInfo.tuple,\n\t rowTuple: rowInfo.tuple,\n\t measure: columnInfo.measure || rowInfo.measure,\n\t dataItem: this.dataSource.view()[dataIndex]\n\t };\n\t },\n\n\t setDataSource: function(dataSource) {\n\t this.options.dataSource = dataSource;\n\n\t this._dataSource();\n\n\t if (this.measuresTarget) {\n\t this.measuresTarget.setDataSource(dataSource);\n\t }\n\n\t if (this.rowsTarget) {\n\t this.rowsTarget.setDataSource(dataSource);\n\t }\n\n\t if (this.columnsTarget) {\n\t this.columnsTarget.setDataSource(dataSource);\n\t }\n\n\t this._bindConfigurator();\n\n\t if (this.options.autoBind) {\n\t dataSource.fetch();\n\t }\n\t },\n\n\t setOptions: function(options) {\n\t Widget.fn.setOptions.call(this, options);\n\n\t this._templates();\n\t },\n\n\t destroy: function() {\n\t Widget.fn.destroy.call(this);\n\n\t clearTimeout(this._headerReflowTimeout);\n\t },\n\n\t _dataSource: function() {\n\t var that = this;\n\t var dataSource = that.options.dataSource;\n\n\t dataSource = Array.isArray(dataSource) ? { data: dataSource } : dataSource;\n\n\t if (that.dataSource && this._refreshHandler) {\n\t that.dataSource.unbind(CHANGE, that._refreshHandler)\n\t .unbind(STATERESET, that._stateResetHandler)\n\t .unbind(PROGRESS, that._progressHandler)\n\t .unbind(ERROR, that._errorHandler);\n\t } else {\n\t that._refreshHandler = $.proxy(that.refresh, that);\n\t that._progressHandler = $.proxy(that._requestStart, that);\n\t that._stateResetHandler = $.proxy(that._stateReset, that);\n\t that._errorHandler = $.proxy(that._error, that);\n\t }\n\n\t that.dataSource = kendo.data.PivotDataSource.create(dataSource)\n\t .bind(CHANGE, that._refreshHandler)\n\t .bind(PROGRESS, that._progressHandler)\n\t .bind(STATERESET, that._stateResetHandler)\n\t .bind(ERROR, that._errorHandler);\n\t },\n\n\t _error: function() {\n\t this._progress(false);\n\t },\n\n\t _requestStart: function() {\n\t this._progress(true);\n\t },\n\n\t _stateReset: function() {\n\t this._columnBuilder.reset();\n\t this._rowBuilder.reset();\n\t },\n\n\t _wrapper: function() {\n\t var height = this.options.height;\n\n\t this.wrapper = this.element.addClass(\"k-widget k-pivot\");\n\n\t if (height) {\n\t this.wrapper.css(\"height\", height);\n\t }\n\t },\n\n\t _measureFields: function() {\n\t this.measureFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-header k-settings-measures\");\n\n\t this.measuresTarget = this._createSettingTarget(this.measureFields, {\n\t setting: \"measures\",\n\t messages: {\n\t empty: this.options.messages.measureFields\n\t }\n\t });\n\t },\n\n\t _createSettingTarget: function(element, options) {\n\t var template = '${data.name}';\n\t var sortable = options.sortable;\n\t var icons = \"\";\n\n\t if (sortable) {\n\t icons += '#if (data.sortIcon) {#';\n\t icons += '';\n\t icons += '#}#';\n\t }\n\n\t if (options.filterable || sortable) {\n\t icons += '';\n\t }\n\t if (this.options.reorderable) {\n\t icons += '';\n\t }\n\n\t if (icons) {\n\t template += '' + icons + '';\n\t }\n\n\t template += '';\n\n\t return new kendo.ui.PivotSettingTarget(element, $.extend({\n\t template: template,\n\t emptyTemplate: '${data}',\n\t enabled: this.options.reorderable,\n\t dataSource: this.dataSource\n\t }, options));\n\t },\n\n\t _initSettingTargets: function() {\n\t this.columnsTarget = this._createSettingTarget(this.columnFields, {\n\t connectWith: this.rowFields,\n\t setting: \"columns\",\n\t filterable: this.options.filterable,\n\t sortable: this.options.sortable,\n\t messages: {\n\t empty: this.options.messages.columnFields,\n\t fieldMenu: this.options.messages.fieldMenu\n\t }\n\t });\n\n\t this.rowsTarget = this._createSettingTarget(this.rowFields, {\n\t connectWith: this.columnFields,\n\t setting: \"rows\",\n\t filterable: this.options.filterable,\n\t sortable: this.options.sortable,\n\t messages: {\n\t empty: this.options.messages.rowFields,\n\t fieldMenu: this.options.messages.fieldMenu\n\t }\n\t });\n\t },\n\n\t _createLayout: function() {\n\t var that = this;\n\t var layoutTable = $(LAYOUT_TABLE);\n\t var leftContainer = layoutTable.find(\".k-pivot-rowheaders\");\n\t var rightContainer = layoutTable.find(\".k-pivot-table\");\n\t var gridWrapper = $(DIV).addClass(\"k-grid k-widget\");\n\n\t that._measureFields();\n\t that.columnFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-header k-settings-columns\");\n\n\t that.rowFields = $(DIV).addClass(\"k-pivot-toolbar k-toolbar k-header k-settings-rows\");\n\t that.columnsHeader = $('
')\n\t .wrap('
');\n\n\t that.columnsHeader.parent().css(\"padding-right\", kendo.support.scrollbar());\n\n\t that.rowsHeader = $('
');\n\t that.content = $('
');\n\n\t leftContainer.append(that.measureFields);\n\t leftContainer.append(that.rowFields);\n\t leftContainer.append(that.rowsHeader);\n\n\t gridWrapper.append(that.columnsHeader.parent());\n\t gridWrapper.append(that.content);\n\n\t rightContainer.append(that.columnFields);\n\t rightContainer.append(gridWrapper);\n\n\t that.wrapper.append(layoutTable);\n\n\t that.columnsHeaderTree = new kendo.dom.Tree(that.columnsHeader[0]);\n\t that.rowsHeaderTree = new kendo.dom.Tree(that.rowsHeader[0]);\n\t that.contentTree = new kendo.dom.Tree(that.content[0]);\n\n\t that._initSettingTargets();\n\t },\n\n\t _progress: function(toggle) {\n\t kendo.ui.progress(this.wrapper, toggle);\n\t },\n\n\t _resize: function() {\n\t if (this.content[0].firstChild) {\n\t this._setSectionsWidth();\n\t this._setSectionsHeight();\n\t this._setContentWidth();\n\t this._setContentHeight();\n\t this._columnHeaderReflow();\n\t }\n\t },\n\n\t _columnHeaderReflow: function() {\n\t var columnTable = this.columnsHeader.children(\"table\");\n\n\t if (!kendo.support.browser.mozilla) {\n\t return;\n\t }\n\n\t clearTimeout(this._headerReflowTimeout);\n\n\t columnTable.css(\"table-layout\", \"auto\");\n\n\t this._headerReflowTimeout = setTimeout(function() {\n\t columnTable.css(\"table-layout\", \"\");\n\t });\n\t },\n\n\t _setSectionsWidth: function() {\n\t var rowsHeader = this.rowsHeader;\n\t var leftColumn = rowsHeader.parent(\".k-pivot-rowheaders\").width(AUTO);\n\t var width;\n\n\t width = Math.max(outerWidth(this.measureFields), outerWidth(this.rowFields));\n\t width = Math.max(rowsHeader.children(\"table\").width(), width);\n\n\t leftColumn.width(width);\n\t },\n\n\t _setSectionsHeight: function() {\n\t var measureFieldsHeight = this.measureFields.height(AUTO).height();\n\t var columnFieldsHeight = this.columnFields.height(AUTO).height();\n\t var rowFieldsHeight = this.rowFields.height(AUTO).innerHeight();\n\t var columnsHeight = this.columnsHeader.height(AUTO).innerHeight();\n\n\t var padding = rowFieldsHeight - this.rowFields.height();\n\n\t var firstRowHeight = columnFieldsHeight > measureFieldsHeight ? columnFieldsHeight : measureFieldsHeight;\n\t var secondRowHeight = columnsHeight > rowFieldsHeight ? columnsHeight : rowFieldsHeight;\n\n\t this.measureFields.height(firstRowHeight);\n\t this.columnFields.height(firstRowHeight);\n\t this.rowFields.height(secondRowHeight - padding);\n\t this.columnsHeader.height(secondRowHeight);\n\t },\n\n\t _setContentWidth: function() {\n\t var contentTable = this.content.find(\"table\");\n\t var columnTable = this.columnsHeader.children(\"table\");\n\n\t var rowLength = contentTable.children(\"colgroup\").children().length;\n\n\t var calculatedWidth = rowLength * this.options.columnWidth;\n\t var minWidth = Math.ceil((calculatedWidth / this.content.width()) * 100);\n\n\t if (minWidth < 100) {\n\t minWidth = 100;\n\t }\n\n\t contentTable.add(columnTable).css(\"width\", minWidth + \"%\");\n\n\t this._resetColspan(columnTable);\n\t },\n\n\t _setContentHeight: function() {\n\t var that = this;\n\t var content = that.content;\n\t var rowsHeader = that.rowsHeader;\n\t var innerHeight = that.wrapper.innerHeight();\n\t var scrollbar = kendo.support.scrollbar();\n\t var skipScrollbar = content[0].offsetHeight === content[0].clientHeight;\n\t var height = that.options.height;\n\n\t if (that.wrapper.is(\":visible\")) {\n\t if (!innerHeight || !height) {\n\t if (skipScrollbar) {\n\t scrollbar = 0;\n\t }\n\n\t content.height(\"auto\");\n\t rowsHeader.height(content.height() - scrollbar);\n\t return;\n\t }\n\n\t innerHeight -= outerHeight(that.columnFields);\n\t innerHeight -= outerHeight(that.columnsHeader.parent());\n\n\t if (innerHeight <= scrollbar * 2) { // do not set height if proper scrollbar cannot be displayed\n\t innerHeight = scrollbar * 2 + 1;\n\t if (!skipScrollbar) {\n\t innerHeight += scrollbar;\n\t }\n\t }\n\n\t content.height(innerHeight);\n\n\t if (skipScrollbar) {\n\t scrollbar = 0;\n\t }\n\n\t rowsHeader.height(innerHeight - scrollbar);\n\t }\n\t },\n\n\t _resetColspan: function(columnTable) {\n\t var that = this;\n\t var cell = columnTable.children(\"tbody\").children().first().children().first();\n\n\t if (that._colspan === undefined) {\n\t that._colspan = cell.attr(\"colspan\");\n\t }\n\n\t cell.attr(\"colspan\", 1);\n\n\t clearTimeout(that._layoutTimeout);\n\n\t that._layoutTimeout = setTimeout(function() {\n\t cell.attr(\"colspan\", that._colspan);\n\t that._colspan = undefined;\n\t });\n\t },\n\n\t _axisMeasures: function(axis) {\n\t var result = [];\n\t var dataSource = this.dataSource;\n\t var measures = dataSource.measures();\n\t var hasMeasure = measures.length > 1 || (measures[0] && measures[0].type);\n\n\t if (dataSource.measuresAxis() === axis) {\n\t if (dataSource[axis]().length === 0 || hasMeasure) {\n\t result = measures;\n\t }\n\t }\n\n\t return result;\n\t },\n\n\t items: function() {\n\t return [];\n\t },\n\n\t refresh: function() {\n\t var that = this;\n\t var dataSource = that.dataSource;\n\n\t var axes = dataSource.axes();\n\t var columns = (axes.columns || {}).tuples || [];\n\t var rows = (axes.rows || {}).tuples || [];\n\n\t var columnBuilder = that._columnBuilder;\n\t var rowBuilder = that._rowBuilder;\n\n\t var columnAxis = {};\n\t var rowAxis = {};\n\n\t if (that.trigger(DATABINDING, { action: \"rebind\" } )) {\n\t return;\n\t }\n\n\t columnBuilder.measures = that._axisMeasures(AXIS_COLUMNS);\n\t rowBuilder.measures = that._axisMeasures(AXIS_ROWS);\n\n\t that.columnsHeaderTree.render(columnBuilder.build(columns));\n\t that.rowsHeaderTree.render(rowBuilder.build(rows));\n\n\t columnAxis = {\n\t indexes: columnBuilder._indexes,\n\t measures: columnBuilder.measures,\n\t metadata: columnBuilder.metadata\n\t };\n\n\t rowAxis = {\n\t indexes: rowBuilder._indexes,\n\t measures: rowBuilder.measures,\n\t metadata: rowBuilder.metadata\n\t };\n\n\t that.contentTree.render(that._contentBuilder.build(dataSource.view(), columnAxis, rowAxis));\n\n\t that._resize();\n\n\t if (that.touchScroller) {\n\t that.touchScroller.contentResized();\n\t } else {\n\t var touchScroller = kendo.touchScroller(that.content);\n\n\t if (touchScroller && touchScroller.movable) {\n\t that.touchScroller = touchScroller;\n\n\t touchScroller.movable.bind(\"change\", function(e) {\n\t kendo.scrollLeft(that.columnsHeader, -e.sender.x);\n\t that.rowsHeader.scrollTop(-e.sender.y);\n\t });\n\t }\n\t }\n\n\t that._progress(false);\n\n\t that.trigger(DATABOUND);\n\t },\n\n\t _scrollable: function() {\n\t var that = this;\n\t var columnsHeader = that.columnsHeader;\n\t var rowsHeader = that.rowsHeader;\n\n\t that.content.on(\"scroll\", function() {\n\t kendo.scrollLeft(columnsHeader, this.scrollLeft);\n\t rowsHeader.scrollTop(this.scrollTop);\n\t });\n\n\t rowsHeader.on(\"DOMMouseScroll\" + NS + \" mousewheel\" + NS, $.proxy(that._wheelScroll, that));\n\t },\n\n\t _wheelScroll: function (e) {\n\t if (e.ctrlKey) {\n\t return;\n\t }\n\n\t var delta = kendo.wheelDeltaY(e);\n\t var scrollTop = this.content.scrollTop();\n\n\t if (delta) {\n\t e.preventDefault();\n\t //In Firefox DOMMouseScroll event cannot be canceled\n\t $(e.currentTarget).one(\"wheel\" + NS, false);\n\n\t this.rowsHeader.scrollTop(scrollTop + (-delta));\n\t this.content.scrollTop(scrollTop + (-delta));\n\t }\n\t }\n\t });\n\n\t var element = kendo.dom.element;\n\t var htmlNode = kendo.dom.html;\n\n\t var createMetadata = function(levelNum, memberIdx) {\n\t return {\n\t maxChildren: 0,\n\t children: 0,\n\t maxMembers: 0,\n\t members: 0,\n\t measures: 1,\n\t levelNum: levelNum,\n\t parentMember: memberIdx !== 0\n\t };\n\t };\n\n\t var buildPath = function(tuple, index) {\n\t var path = [];\n\t var idx = 0;\n\n\t for(; idx <= index; idx++) {\n\t path.push(tuple.members[idx].name);\n\t }\n\n\t return path;\n\t };\n\n\t var tupleName = function(tuple, index) {\n\t var name = \"\";\n\t var idx = 0;\n\n\t for(; idx <= index; idx++) {\n\t name += tuple.members[idx].name;\n\t }\n\n\t return name;\n\t };\n\n\t var ContentBuilderV2 = Class.extend({\n\t init: function(options) {\n\t this.template = kendo.template(options.template);\n\t this.hash = [];\n\t },\n\n\t setRowColumnInfo: function (options) {\n\t this.data = options.data;\n\t this.columnHeaderLeafs = options.columnHeaderLeafs;\n\t this.rowHeaderLeafs = options.rowHeaderLeafs;\n\t this.columnHeaderBreadth = options.columnHeaderBreadth;\n\t this.rowHeaderDepth = options.rowHeaderDepth;\n\t this.hash.length = 0;\n\t },\n\n\t addColElements: function (count) {\n\t var html = \"\";\n\n\t for (var index = 0; index < count; index++) {\n\t html+= \"\";\n\t }\n\n\t this.table.find(\"colgroup\").append(html);\n\t },\n\n\t addRowElements: function (data) {\n\t var that = this;\n\t var body = that.table.find(\"tbody\");\n\t var row;\n\n\t for (var index = 0; index < data.length; index++) {\n\t row = $('');\n\t body.append(row);\n\t that.addColumCell(row, data[index], index);\n\t }\n\n\t this.rowsCount = data.length;\n\t },\n\n\t addColumCell: function(rowEl, rowItem, rowIndex) {\n\t var that = this;\n\t for (var index = 0; index < rowItem.cells.length; index++) {\n\t var cell = rowItem.cells[index];\n\t if (cell) {\n\t var cellEl = $('');\n\t if (this.rowHeaderLeafs[rowIndex].total || this.columnHeaderLeafs[index].total) {\n\t cellEl.addClass(\"k-pivotgrid-header-total\");\n\t }\n\t cellEl.append(that.template({\n\t dataItem: cell.data,\n\t rowTuple: cell.rowTuple,\n\t columnTuple: cell.columnTuple\n\t }));\n\t this.hash.push(cell);\n\t rowEl.append(cellEl);\n\t }\n\t }\n\t },\n\n\t build: function() {\n\t var data = toData((this.data || []).slice(), this.columnHeaderLeafs, this.rowHeaderLeafs, this.columnHeaderBreadth, this.rowHeaderDepth);\n\t var that = this;\n\n\t var table = $(\"
\");\n\n\t that.table = table;\n\t that.addColElements(this.columnHeaderLeafs.length);\n\t that.addRowElements(data);\n\t this.rowsCount = data.length;\n\t this.columnsCount = this.columnHeaderLeafs.length;\n\n\t return that.table;\n\t }\n\t });\n\n\t var ColumnRowBuilder = Class.extend({\n\t init: function(options) {\n\t this.tuples = options.tuples;\n\t this.axes = options.axes;\n\t this.headerTemplate = kendo.template(HEADERTEMPLATE);\n\t if (options.template) {\n\t this.template = kendo.template(options.template);\n\t }\n\t },\n\n\t setTuples: function (tuples) {\n\t this.tuples = tuples;\n\t },\n\n\t addColElements: function (count) {\n\t var html = \"\";\n\n\t for (var index = 0; index < count; index++) {\n\t html+= \"\";\n\t }\n\n\t this.table.find(\"colgroup\").append(html);\n\t },\n\n\t addRowElements: function (columnHeaderRows) {\n\t var that = this;\n\t var body = that.table.find(\"tbody\");\n\t var row;\n\n\t for (var index = 0; index < columnHeaderRows.length; index++) {\n\t row = $('');\n\t body.append(row);\n\t that.addColumCell(row, columnHeaderRows[index]);\n\t }\n\t },\n\n\t addColumCell: function(rowEl, rowItem) {\n\t var that = this;\n\t var cellEl;\n\t var cell;\n\n\t for (var index = 0; index < rowItem.cells.length; index++) {\n\t cell = rowItem.cells[index];\n\t if (cell) {\n\t cellEl = $(that.headerTemplate({\n\t rowspan: cell.rowSpan,\n\t colspan: cell.colSpan,\n\t key: cell.path.join(\",\") + (cell.total ? '|[TOTAL]' : ''),\n\t iconClass: (cell.children && cell.children.length) ? \"up\": \"down\",\n\t expandable: cell.hasChildren && !cell.total,\n\t headerClass: kendo.format(\"k-pivotgrid-cell{0}{1}\", cell.total ? \" k-pivotgrid-header-total\" : \"\",cell.levelNum === 0 ? \" k-pivotgrid-header-root\" : \"\")\n\t }));\n\t cellEl.append(that.template? that.template({member: cell}): cell.caption);\n\t rowEl.append(cellEl);\n\t }\n\t }\n\t },\n\n\t build: function() {\n\t var tree = toTree((this.tuples || []).slice());\n\t var treeData = this.axes == \"columns\" ? toColumns(tree) : toRows(tree);\n\t var headerRows = treeData[0];\n\t var headerLeafs = treeData[1];\n\t var breadth = treeData[2];\n\t var rowHeaderBreadth = treeData[3];\n\t var that = this;\n\t that._tree = tree;\n\t that._breadth = breadth;\n\t that._headerLeafs = headerLeafs;\n\n\t var table = $(\"
\");\n\n\t that.table = table;\n\t that.addColElements(this.axes == \"columns\" ? headerLeafs.length : rowHeaderBreadth);\n\t that.addRowElements(headerRows);\n\n\t return that.table;\n\t },\n\n\t getTree: function() {\n\t return this._tree;\n\t },\n\n\t getBreadth: function() {\n\t return this._breadth;\n\t },\n\n\t getHeaderLeafs: function() {\n\t return this._headerLeafs;\n\t }\n\t });\n\n\t var ColumnBuilder = Class.extend({\n\t init: function() {\n\t this.measures = 1;\n\t this.metadata = {};\n\t },\n\n\t build: function(tuples) {\n\t var tbody = this._tbody(tuples);\n\t var colgroup = this._colGroup();\n\n\t return [\n\t element(\"table\", null, [colgroup, tbody])\n\t ];\n\t },\n\n\t reset: function() {\n\t this.metadata = {};\n\t },\n\n\t _colGroup: function() {\n\t var length = this._rowLength();\n\t var children = [];\n\t var idx = 0;\n\n\t for (; idx < length; idx++) {\n\t children.push(element(\"col\", null));\n\t }\n\n\t return element(\"colgroup\", null, children);\n\t },\n\n\t _tbody: function(tuples) {\n\t var root = tuples[0];\n\n\t this.map = {};\n\t this.rows = [];\n\t this.rootTuple = root;\n\n\t this._indexes = [];\n\n\t if (root) {\n\t this._buildRows(root, 0);\n\t this._normalize();\n\t } else {\n\t this.rows.push(element(\"tr\", null, [ element(\"th\", null, [ htmlNode(\" \") ]) ]));\n\t }\n\n\t return element(\"tbody\", null, this.rows);\n\t },\n\n\t _normalize: function() {\n\t var rows = this.rows;\n\t var rowsLength = rows.length;\n\t var rowIdx = 0;\n\t var row;\n\n\t var cellsLength;\n\t var cellIdx;\n\t var cells;\n\t var cell;\n\n\t for (; rowIdx < rowsLength; rowIdx++) {\n\t row = rows[rowIdx];\n\n\t if (row.rowSpan === 1) {\n\t continue;\n\t }\n\n\t cells = row.children;\n\n\t cellIdx = 0;\n\t cellsLength = cells.length;\n\n\t for (; cellIdx < cellsLength; cellIdx++) {\n\t cell = cells[cellIdx];\n\n\t if (cell.tupleAll) {\n\t cell.attr.rowSpan = row.rowSpan;\n\t }\n\t }\n\t }\n\t },\n\n\t _rowIndex: function(row) {\n\t var rows = this.rows;\n\t var length = rows.length;\n\t var idx = 0;\n\n\t for(; idx < length; idx++) {\n\t if (rows[idx] === row) {\n\t break;\n\t }\n\t }\n\n\t return idx;\n\t },\n\n\t _rowLength: function() {\n\t var cells = this.rows[0] ? this.rows[0].children : [];\n\t var length = cells.length;\n\t var rowLength = 0;\n\t var idx = 0;\n\n\t if (length) {\n\t for (; idx < length; idx++) {\n\t rowLength += cells[idx].attr.colSpan || 1;\n\t }\n\t }\n\n\t if (!rowLength) {\n\t rowLength = this.measures;\n\t }\n\n\t return rowLength;\n\t },\n\n\t _row: function(tuple, memberIdx, parentMember) {\n\t var rootName = this.rootTuple.members[memberIdx].name;\n\t var levelNum = tuple.members[memberIdx].levelNum;\n\t var rowKey = rootName + levelNum;\n\t var map = this.map;\n\t var parentRow;\n\t var children;\n\n\t var row = map[rowKey];\n\n\t if (!row) {\n\t row = element(\"tr\", null, []);\n\n\t row.parentMember = parentMember;\n\t row.collapsed = 0;\n\t row.colSpan = 0;\n\t row.rowSpan = 1;\n\n\t map[rowKey] = row;\n\t parentRow = map[rootName + (Number(levelNum) - 1)];\n\n\t if (parentRow) {\n\t children = parentRow.children;\n\n\t if (children[1] && children[1].attr.className.indexOf(\"k-alt\") === -1) {\n\t row.notFirst = true;\n\t } else {\n\t row.notFirst = parentRow.notFirst;\n\t }\n\t }\n\n\t this.rows.splice(this._rowIndex(parentRow) + 1, 0, row);\n\t } else {\n\t row.notFirst = false;\n\n\t if (!row.parentMember || row.parentMember !== parentMember) {\n\t row.parentMember = parentMember;\n\t row.collapsed = 0;\n\t row.colSpan = 0;\n\t }\n\t }\n\n\t return row;\n\t },\n\n\t _measures: function(measures, tuple, className) {\n\t var map = this.map;\n\t var row = map.measureRow;\n\t var measure;\n\n\t if (!row) {\n\t row = element(\"tr\", null, []);\n\t map.measureRow = row;\n\t this.rows.push(row);\n\t }\n\n\t for (var idx = 0, length = measures.length; idx < length; idx++) {\n\t measure = measures[idx];\n\t row.children.push(this._cell((className || \"\"), [this._content(measure, tuple)], measure));\n\t }\n\n\t return length;\n\t },\n\n\t _content: function(member, tuple) {\n\t return htmlNode(this.template({\n\t member: member,\n\t tuple: tuple\n\t }));\n\t },\n\n\t _cell: function(className, children, member) {\n\t var cell = element(\"th\", { className: \"k-header\" + className }, children);\n\t cell.value = member.caption || member.name;\n\t return cell;\n\t },\n\n\t _buildRows: function(tuple, memberIdx, parentMember) {\n\t var members = tuple.members;\n\t var member = members[memberIdx];\n\t var nextMember = members[memberIdx + 1];\n\n\t var row, childRow, children, childrenLength;\n\t var cell, allCell, cellAttr;\n\t var cellChildren = [];\n\t var path;\n\n\t var idx = 0;\n\t var metadata;\n\n\t var colSpan;\n\t var collapsed = 0;\n\t var memberCollapsed = 0;\n\n\t if (member.measure) {\n\t this._measures(member.children, tuple);\n\t return;\n\t }\n\n\t path = kendo.stringify(buildPath(tuple, memberIdx));\n\t row = this._row(tuple, memberIdx, parentMember);\n\n\t children = member.children;\n\t childrenLength = children.length;\n\n\t metadata = this.metadata[path];\n\t if (!metadata) {\n\t this.metadata[path] = metadata = createMetadata(Number(member.levelNum), memberIdx);\n\t metadata.rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n\t }\n\n\t this._indexes.push({\n\t path: path,\n\t tuple: tuple\n\t });\n\n\t if (member.hasChildren) {\n\t if (metadata.expanded === false) {\n\t collapsed = metadata.maxChildren;\n\t row.collapsed += collapsed;\n\n\t metadata.children = 0;\n\t childrenLength = 0;\n\t }\n\n\t cellAttr = { className: \"k-icon \" + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n\t cellAttr[kendo.attr(\"path\")] = path;\n\n\t cellChildren.push(element(\"span\", cellAttr));\n\t }\n\n\t cellChildren.push(this._content(member, tuple));\n\t cell = this._cell((row.notFirst ? \" k-first\" : \"\"), cellChildren, member);\n\n\t row.children.push(cell);\n\t row.colSpan += 1;\n\n\t if (childrenLength) {\n\t allCell = this._cell(\" k-alt\", [this._content(member, tuple)], member);\n\t row.children.push(allCell);\n\n\t for (; idx < childrenLength; idx++) {\n\t childRow = this._buildRows(children[idx], memberIdx, member);\n\t }\n\n\t colSpan = childRow.colSpan;\n\t collapsed = childRow.collapsed;\n\n\t cell.attr.colSpan = colSpan;\n\n\t metadata.children = colSpan;\n\t metadata.members = 1;\n\n\t row.colSpan += colSpan;\n\t row.collapsed += collapsed;\n\t row.rowSpan = childRow.rowSpan + 1;\n\n\t if (nextMember) {\n\t if (nextMember.measure) {\n\t colSpan = this._measures(nextMember.children, tuple, \" k-alt\");\n\t } else {\n\t childRow = this._buildRows(tuple, memberIdx + 1);\n\t colSpan = childRow.colSpan;\n\n\t row.collapsed += childRow.collapsed;\n\t memberCollapsed = childRow.collapsed;\n\t }\n\n\t allCell.attr.colSpan = colSpan;\n\t colSpan -= 1;\n\n\t metadata.members += colSpan;\n\t row.colSpan += colSpan;\n\t }\n\t } else if (nextMember) {\n\t if (nextMember.measure) {\n\t colSpan = this._measures(nextMember.children, tuple);\n\t } else {\n\t childRow = this._buildRows(tuple, memberIdx + 1);\n\t colSpan = childRow.colSpan;\n\n\t row.collapsed += childRow.collapsed;\n\t memberCollapsed = childRow.collapsed;\n\t }\n\n\t metadata.members = colSpan;\n\n\t if (colSpan > 1) {\n\t cell.attr.colSpan = colSpan;\n\t row.colSpan += colSpan - 1;\n\t }\n\t }\n\n\t if (metadata.maxMembers < (metadata.members + memberCollapsed)) {\n\t metadata.maxMembers = metadata.members + memberCollapsed;\n\t }\n\n\t children = metadata.children + collapsed;\n\n\t if (metadata.maxChildren < children) {\n\t metadata.maxChildren = children;\n\t }\n\n\t (allCell || cell).tupleAll = true;\n\n\t return row;\n\t }\n\t });\n\n\t var RowBuilder = Class.extend({\n\t init: function() {\n\t this.metadata = {};\n\t },\n\n\t build: function(tuples) {\n\t var tbody = this._tbody(tuples);\n\t var colgroup = this._colGroup();\n\n\t return [\n\t element(\"table\", null, [colgroup, tbody])\n\t ];\n\t },\n\n\t reset: function() {\n\t this.metadata = {};\n\t },\n\n\t _rowLength: function() {\n\t var children = this.rows[0].children;\n\t var length = 0;\n\t var idx = 0;\n\n\t var cell = children[idx];\n\n\t while(cell) {\n\t length += (cell.attr.colSpan || 1);\n\t cell = children[++idx];\n\t }\n\n\t return length;\n\t },\n\n\t _colGroup: function() {\n\t var length = this._rowLength();\n\t var children = [];\n\t var idx = 0;\n\n\t for (; idx < length; idx++) {\n\t children.push(element(\"col\", null));\n\t }\n\n\t return element(\"colgroup\", null, children);\n\t },\n\n\t _tbody: function(tuples) {\n\t var root = tuples[0];\n\n\t this.rootTuple = root;\n\t this.rows = [];\n\t this.map = {};\n\n\t this._indexes = [];\n\n\t if (root) {\n\t this._buildRows(root, 0);\n\t this._normalize();\n\t } else {\n\t this.rows.push(element(\"tr\", null, [ element(\"td\", null, [ htmlNode(\" \") ]) ]));\n\t }\n\n\t return element(\"tbody\", null, this.rows);\n\t },\n\n\t _normalize: function() {\n\t var rows = this.rows;\n\t var rowsLength = rows.length;\n\t var rowIdx = 0;\n\n\t var members = this.rootTuple.members;\n\t var firstMemberName = members[0].name;\n\t var membersLength = members.length;\n\t var memberIdx = 0;\n\n\t var row;\n\t var cell;\n\t var maxcolSpan;\n\t var map = this.map;\n\t var allRow;\n\n\t for (; rowIdx < rowsLength; rowIdx++) {\n\t row = rows[rowIdx];\n\n\t for (memberIdx = 0; memberIdx < membersLength; memberIdx++) {\n\t maxcolSpan = this[members[memberIdx].name];\n\t cell = row.colSpan[\"dim\" + memberIdx];\n\n\t if (cell && cell.colSpan < maxcolSpan) {\n\t cell.attr.colSpan = (maxcolSpan - cell.colSpan) + 1;\n\t }\n\t }\n\t }\n\n\t row = map[firstMemberName];\n\t allRow = map[firstMemberName + \"all\"];\n\n\t if (row) {\n\t row.children[0].attr.className = \"k-first\";\n\t }\n\n\t if (allRow) {\n\t allRow.children[0].attr.className += \" k-first\";\n\t }\n\t },\n\n\t _row: function(children) {\n\t var row = element(\"tr\", null, children);\n\t row.rowSpan = 1;\n\t row.colSpan = {};\n\n\t this.rows.push(row);\n\n\t return row;\n\t },\n\n\t _content: function(member, tuple) {\n\t return htmlNode(this.template({\n\t member: member,\n\t tuple: tuple\n\t }));\n\t },\n\n\t _cell: function(className, children, member) {\n\t var cell = element(\"td\", { className: className }, children);\n\t cell.value = member.caption || member.name;\n\t return cell;\n\t },\n\n\t _buildRows: function(tuple, memberIdx) {\n\t var map = this.map;\n\t var path;\n\n\t var members = tuple.members;\n\t var member = members[memberIdx];\n\t var nextMember = members[memberIdx + 1];\n\n\t var children = member.children;\n\t var childrenLength = children.length;\n\n\t var levelNum = Number(member.levelNum);\n\t var rootName = this.rootTuple.members[memberIdx].name;\n\t var tuplePath = buildPath(tuple, memberIdx - 1).join(\"\");\n\t var rootLevelNum = Number(this.rootTuple.members[memberIdx].levelNum);\n\t var parentName = tuplePath + (rootLevelNum === levelNum ? \"\" : (member.parentName || \"\"));\n\t var row = map[parentName + \"all\"] || map[parentName];\n\t var colSpan = levelNum + 1;\n\n\t var cell, allCell;\n\t var childRow, allRow;\n\t var metadata;\n\t var className;\n\t var cellChildren = [];\n\t var expandIconAttr;\n\t var idx;\n\n\t if (!row || row.hasChild) {\n\t row = this._row();\n\t } else {\n\t row.hasChild = true;\n\t }\n\n\t if (member.measure) {\n\t className = row.allCell ? \"k-grid-footer\" : \"\";\n\t row.children.push(this._cell(className, [ this._content(children[0], tuple) ], children[0]));\n\n\t row.rowSpan = childrenLength;\n\n\t for (idx = 1; idx < childrenLength; idx++) {\n\t this._row([ this._cell(className, [ this._content(children[idx], tuple) ], children[idx]) ]);\n\t }\n\n\t return row;\n\t }\n\n\t map[tuplePath + member.name] = row;\n\n\t path = kendo.stringify(buildPath(tuple, memberIdx));\n\n\t metadata = this.metadata[path];\n\t if (!metadata) {\n\t this.metadata[path] = metadata = createMetadata(levelNum, memberIdx);\n\t metadata.rootLevelNum = rootLevelNum;\n\t }\n\n\t this._indexes.push({\n\t path: path,\n\t tuple: tuple\n\t });\n\n\t if (member.hasChildren) {\n\t if (metadata.expanded === false) {\n\t childrenLength = 0;\n\t metadata.children = 0;\n\t }\n\n\t expandIconAttr = { className: \"k-icon \" + (childrenLength ? STATE_EXPANDED : STATE_COLLAPSED) };\n\t expandIconAttr[kendo.attr(\"path\")] = path;\n\n\t cellChildren.push(element(\"span\", expandIconAttr));\n\t }\n\n\t cellChildren.push(this._content(member, tuple));\n\n\t className = row.allCell && !childrenLength ? \"k-grid-footer\" : \"\";\n\t cell = this._cell(className, cellChildren, member);\n\t cell.colSpan = colSpan;\n\n\t row.children.push(cell);\n\t row.colSpan[\"dim\" + memberIdx] = cell;\n\n\t if (!this[rootName] || this[rootName] < colSpan) {\n\t this[rootName] = colSpan;\n\t }\n\n\t if (childrenLength) {\n\t row.allCell = false;\n\t row.hasChild = false;\n\n\t for (idx = 0; idx < childrenLength; idx++) {\n\t childRow = this._buildRows(children[idx], memberIdx);\n\n\t if (row !== childRow) {\n\t row.rowSpan += childRow.rowSpan;\n\t }\n\t }\n\n\t if (row.rowSpan > 1) {\n\t cell.attr.rowSpan = row.rowSpan;\n\t }\n\n\t metadata.children = row.rowSpan;\n\n\t allCell = this._cell(\"k-grid-footer\", [this._content(member, tuple)], member);\n\t allCell.colSpan = colSpan;\n\n\t allRow = this._row([ allCell ]);\n\t allRow.colSpan[\"dim\" + memberIdx] = allCell;\n\t allRow.allCell = true;\n\n\t map[tuplePath + member.name + \"all\"] = allRow;\n\n\t if (nextMember) {\n\t childRow = this._buildRows(tuple, memberIdx + 1);\n\t allCell.attr.rowSpan = childRow.rowSpan;\n\t }\n\n\t row.rowSpan += allRow.rowSpan;\n\n\t metadata.members = allRow.rowSpan;\n\n\t } else if (nextMember) {\n\t row.hasChild = false;\n\t this._buildRows(tuple, memberIdx + 1);\n\n\t (allCell || cell).attr.rowSpan = row.rowSpan;\n\n\t metadata.members = row.rowSpan;\n\t }\n\n\t if (metadata.maxChildren < metadata.children) {\n\t metadata.maxChildren = metadata.children;\n\t }\n\n\t if (metadata.maxMembers < metadata.members) {\n\t metadata.maxMembers = metadata.members;\n\t }\n\n\t return row;\n\t }\n\t });\n\n\t var ContentBuilder = Class.extend({\n\t init: function() {\n\t this.columnAxis = {};\n\t this.rowAxis = {};\n\t },\n\n\t build: function(data, columnAxis, rowAxis) {\n\t var index = columnAxis.indexes[0];\n\t var metadata = columnAxis.metadata[index ? index.path : undefined];\n\n\t this.columnAxis = columnAxis;\n\t this.rowAxis = rowAxis;\n\n\t this.data = data;\n\n\t this.rowLength = metadata ? metadata.maxChildren + metadata.maxMembers : columnAxis.measures.length || 1;\n\n\t if (!this.rowLength) {\n\t this.rowLength = 1;\n\t }\n\n\t var tbody = this._tbody();\n\t var colgroup = this._colGroup();\n\n\t return [\n\t element(\"table\", null, [colgroup, tbody])\n\t ];\n\t },\n\n\t _colGroup: function() {\n\t var length = this.columnAxis.measures.length || 1;\n\t var children = [];\n\t var idx = 0;\n\n\t if (this.rows[0]) {\n\t length = this.rows[0].children.length;\n\t }\n\n\t for (; idx < length; idx++) {\n\t children.push(element(\"col\", null));\n\t }\n\n\t return element(\"colgroup\", null, children);\n\t },\n\n\t _tbody: function() {\n\t this.rows = [];\n\n\t if (this.data[0]) {\n\t this.columnIndexes = this._indexes(this.columnAxis, this.rowLength);\n\t this.rowIndexes = this._indexes(this.rowAxis, Math.ceil(this.data.length / this.rowLength));\n\n\t this._buildRows();\n\t } else {\n\t this.rows.push(element(\"tr\", null, [ element(\"td\", null, [ htmlNode(\" \") ]) ]));\n\t }\n\n\t return element(\"tbody\", null, this.rows);\n\t },\n\n\t _indexes: function(axisInfo, total) {\n\t var result = [];\n\t var axisInfoMember;\n\t var indexes = axisInfo.indexes;\n\t var metadata = axisInfo.metadata;\n\t var measures = axisInfo.measures;\n\t var measuresLength = measures.length || 1;\n\n\t var current;\n\t var dataIdx = 0;\n\t var firstEmpty = 0;\n\n\t var idx = 0;\n\t var length = indexes.length;\n\t var measureIdx;\n\t var index;\n\n\t var children;\n\t var skipChildren;\n\n\t if (!length) {\n\t for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n\t result[measureIdx] = {\n\t index: measureIdx,\n\t measure: measures[measureIdx],\n\t tuple: null\n\t };\n\t }\n\n\t return result;\n\t }\n\n\t for (; idx < length; idx++) {\n\t axisInfoMember = indexes[idx];\n\t current = metadata[axisInfoMember.path];\n\t children = current.children + current.members;\n\t skipChildren = 0;\n\n\t if (children) {\n\t children -= measuresLength;\n\t }\n\n\t if (current.expanded === false && current.children !== current.maxChildren) {\n\t skipChildren = current.maxChildren;\n\t }\n\n\t if (current.parentMember && current.levelNum === current.rootLevelNum) {\n\t children = -1;\n\t }\n\n\t if (children > -1) {\n\t for (measureIdx = 0; measureIdx < measuresLength; measureIdx++) {\n\t index = children + measureIdx;\n\t if (!current.children) {\n\t index += firstEmpty;\n\t }\n\n\t result[children + firstEmpty + measureIdx] = {\n\t children: children,\n\t index: dataIdx,\n\t measure: measures[measureIdx],\n\t tuple: axisInfoMember.tuple\n\t };\n\t dataIdx += 1;\n\t }\n\n\t while(result[firstEmpty] !== undefined) {\n\t firstEmpty += 1;\n\t }\n\t }\n\n\t if (firstEmpty === total) {\n\t break;\n\t }\n\n\t dataIdx += skipChildren;\n\t }\n\n\t return result;\n\t },\n\n\t _buildRows: function() {\n\t var rowIndexes = this.rowIndexes;\n\t var length = rowIndexes.length;\n\t var idx = 0;\n\n\t for (; idx < length; idx++) {\n\t var rowIndex = rowIndexes[idx];\n\t if (rowIndex) {\n\t this.rows.push(this._buildRow(rowIndex));\n\t }\n\t }\n\t },\n\n\t _buildRow: function(rowInfo) {\n\t var startIdx = rowInfo.index * this.rowLength;\n\t var columnIndexes = this.columnIndexes;\n\t var length = columnIndexes.length;\n\t var columnInfo;\n\t var cells = [];\n\t var idx = 0;\n\n\t var templateInfo;\n\t var cell, cellContent;\n\t var attr, dataItem, measure;\n\n\t for (; idx < length; idx++) {\n\t columnInfo = columnIndexes[idx];\n\n\t if (columnInfo === undefined) {\n\t continue;\n\t }\n\n\t attr = {};\n\t if (columnInfo.children) {\n\t attr.className = \"k-alt\";\n\t }\n\n\t cellContent = \"\";\n\t dataItem = this.data[startIdx + columnInfo.index];\n\t measure = columnInfo.measure || rowInfo.measure;\n\n\t templateInfo = {\n\t columnTuple: columnInfo.tuple,\n\t rowTuple: rowInfo.tuple,\n\t measure: measure,\n\t dataItem: dataItem\n\t };\n\n\t if (dataItem.value !== \"\" && measure && measure.type) {\n\t if (measure.type === \"status\") {\n\t cellContent = this.kpiStatusTemplate(templateInfo);\n\t } else if (measure.type === \"trend\") {\n\t cellContent = this.kpiTrendTemplate(templateInfo);\n\t }\n\t }\n\n\t if (!cellContent) {\n\t cellContent = this.dataTemplate(templateInfo);\n\t }\n\n\t cell = element(\"td\", attr, [ htmlNode(cellContent) ]);\n\t cell.value = dataItem.value;\n\t cells.push(cell);\n\t }\n\n\t attr = {};\n\t if (rowInfo.children) {\n\t attr.className = \"k-grid-footer\";\n\t }\n\n\t return element(\"tr\", attr, cells);\n\t }\n\t });\n\n\t ui.plugin(PivotGrid);\n\n\t kendo.PivotExcelExporter = kendo.Class.extend({\n\t init: function(options) {\n\t this.options = options;\n\n\t this.widget = options.widget;\n\t this.dataSource = this.widget.dataSource;\n\t },\n\n\t _columns: function() {\n\t var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n\t var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n\t var columnHeaderLength = columnHeaderTable.children[0].children.length;\n\t var rowHeaderLength = rowHeaderTable.children[0].children.length;\n\n\t var width = this.widget.options.columnWidth;\n\t var result = [];\n\t var idx;\n\n\t if (rowHeaderLength && this.dataSource.data()[0]) {\n\t for (idx = 0; idx < rowHeaderLength; idx++) {\n\t result.push({\n\t autoWidth: true\n\t });\n\t }\n\t }\n\n\t for (idx = 0; idx < columnHeaderLength; idx++) {\n\t result.push({\n\t autoWidth: false,\n\t width: width\n\t });\n\t }\n\n\t return result;\n\t },\n\n\t _cells: function(rows, type, callback) {\n\t var result = [];\n\n\t var i = 0;\n\t var length = rows.length;\n\n\t var cellsLength;\n\t var row, cells;\n\t var j, cell;\n\n\t for (; i < length; i++) {\n\t row = [];\n\t cells = rows[i].children;\n\t cellsLength = cells.length;\n\n\t for (j = 0; j < cellsLength; j++) {\n\t cell = cells[j];\n\n\t row.push({\n\t background: \"#7a7a7a\",\n\t color: \"#fff\",\n\t value: cell.value,\n\t colSpan: cell.attr.colSpan || 1,\n\t rowSpan: cell.attr.rowSpan || 1\n\t });\n\t }\n\n\t if (callback) {\n\t callback(row, i);\n\t }\n\n\t result.push({\n\t cells: row,\n\t type: type\n\t });\n\t }\n\n\t return result;\n\t },\n\n\t _rows: function() {\n\t var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n\t var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n\t var columnHeaderLength = columnHeaderTable.children[0].children.length;\n\t var rowHeaderLength = rowHeaderTable.children[0].children.length;\n\n\t var columnHeaderRows = columnHeaderTable.children[1].children;\n\t var rowHeaderRows = rowHeaderTable.children[1].children;\n\t var contentRows = this.widget.contentTree.children[0].children[1].children;\n\n\t var columnRows = this._cells(columnHeaderRows, \"header\");\n\n\t if (rowHeaderLength) {\n\t columnRows[0].cells.splice(0, 0, {\n\t background: \"#7a7a7a\",\n\t color: \"#fff\",\n\t value: \"\",\n\t colSpan: rowHeaderLength,\n\t rowSpan: columnHeaderRows.length\n\t });\n\t }\n\n\t var dataCallback = function(row, index) {\n\t var j = 0;\n\t var cell, value;\n\t var cells = contentRows[index].children;\n\n\t for (; j < columnHeaderLength; j++) {\n\t cell = cells[j];\n\t value = Number(cell.value);\n\n\t if (isNaN(value)) {\n\t value = cell.value;\n\t }\n\n\t row.push({\n\t background: \"#dfdfdf\",\n\t color: \"#333\",\n\t value: value,\n\t colSpan: 1,\n\t rowSpan: 1\n\t });\n\t }\n\t };\n\n\t var rowRows = this._cells(rowHeaderRows, \"data\", dataCallback);\n\n\t return columnRows.concat(rowRows);\n\t },\n\n\t _freezePane: function() {\n\t var columnHeaderTable = this.widget.columnsHeaderTree.children[0];\n\t var rowHeaderTable = this.widget.rowsHeaderTree.children[0];\n\n\t var rowHeaderLength = rowHeaderTable.children[0].children.length;\n\t var columnHeaderRows = columnHeaderTable.children[1].children;\n\n\t return {\n\t colSplit: rowHeaderLength,\n\t rowSplit: columnHeaderRows.length\n\t };\n\t },\n\n\t workbook: function() {\n\t var promise;\n\n\t if (this.dataSource.view()[0]) {\n\t promise = $.Deferred();\n\t promise.resolve();\n\t } else {\n\t promise = this.dataSource.fetch();\n\t }\n\n\t return promise.then($.proxy(function() {\n\t return {\n\t sheets: [ {\n\t columns: this._columns(),\n\t rows: this._rows(),\n\t freezePane: this._freezePane(),\n\t filter: null\n\t } ]\n\t };\n\t }, this));\n\t }\n\t });\n\n\t var PivotExcelMixin = {\n\t extend: function(proto) {\n\t proto.events.push(\"excelExport\");\n\t proto.options.excel = $.extend(proto.options.excel, this.options);\n\t proto.saveAsExcel = this.saveAsExcel;\n\t },\n\t options: {\n\t proxyURL: \"\",\n\t filterable: false,\n\t fileName: \"Export.xlsx\"\n\t },\n\t saveAsExcel: function() {\n\t var excel = this.options.excel || {};\n\n\t var exporter = new kendo.PivotExcelExporter({\n\t widget: this\n\t });\n\n\t exporter.workbook().then($.proxy(function(book) {\n\t if (!this.trigger(\"excelExport\", { workbook: book })) {\n\t var workbook = new kendo.ooxml.Workbook(book);\n\n\t workbook.toDataURLAsync().then(function(dataURI) {\n\t kendo.saveAs({\n\t dataURI: dataURI,\n\t fileName: book.fileName || excel.fileName,\n\t proxyURL: excel.proxyURL,\n\t forceProxy: excel.forceProxy\n\t });\n\t });\n\t }\n\t }, this));\n\t }\n\t };\n\n\t kendo.PivotExcelMixin = PivotExcelMixin;\n\n\t if (kendo.ooxml && kendo.ooxml.Workbook) {\n\t PivotExcelMixin.extend(PivotGrid.prototype);\n\t }\n\n\t if (kendo.PDFMixin) {\n\t kendo.PDFMixin.extend(PivotGrid.prototype);\n\n\t PivotGrid.fn._drawPDF = function() {\n\t return this._drawPDFShadow({\n\t width: this.wrapper.width()\n\t }, {\n\t avoidLinks: this.options.pdf.avoidLinks\n\t });\n\t };\n\t }\n\n\t if (kendo.PDFMixin) {\n\t kendo.PDFMixin.extend(PivotGridV2.prototype);\n\n\t PivotGridV2.fn._drawPDF = function() {\n\t return this._drawPDFShadow({\n\t width: this.wrapper.width()\n\t }, {\n\t avoidLinks: this.options.pdf.avoidLinks\n\t });\n\t };\n\t }\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ }),\n\n/***/ 1382:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./pivotgrid/common\");\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}