﻿// AnalyticReports.js
//


Type.registerNamespace('PPSMA');

////////////////////////////////////////////////////////////////////////////////
// PPSMA.Dimension

PPSMA.Dimension = function PPSMA_Dimension(name, caption, type) {
    this._name = name;
    this._caption = caption;
    this._type = type;
}
PPSMA.Dimension.prototype = {
    _name: null,
    _caption: null,
    _type: 0,
    _userDefinedHierarchies: null,
    _attributeHierarchies: null,
    
    get_name: function PPSMA_Dimension$get_name() {
        return this._name;
    },
    
    get_caption: function PPSMA_Dimension$get_caption() {
        return this._caption;
    },
    
    get_dimensionType: function PPSMA_Dimension$get_dimensionType() {
        return this._type;
    },
    
    get_userDefinedHierarchies: function PPSMA_Dimension$get_userDefinedHierarchies() {
        return this._userDefinedHierarchies;
    },
    
    get_attributeHierarchies: function PPSMA_Dimension$get_attributeHierarchies() {
        return this._attributeHierarchies;
    },
    
    createUserDefinedHierarchies: function PPSMA_Dimension$createUserDefinedHierarchies(count) {
        this._userDefinedHierarchies = new Array(count);
        return this._userDefinedHierarchies;
    },
    
    createAttributeHierarchies: function PPSMA_Dimension$createAttributeHierarchies(count) {
        this._attributeHierarchies = new Array(count);
        return this._attributeHierarchies;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.DimensionProperties

PPSMA.DimensionProperties = function PPSMA_DimensionProperties(uniqueName, displayCaption, numPropertiesCount) {
    this._uniqueName = uniqueName;
    this._displayCaption = displayCaption;
    this._propertyCount = numPropertiesCount;
    this._propNameArray = new Array(numPropertiesCount + 1);
    this._propCaptionArray = new Array(numPropertiesCount + 1);
    this._propCheckedArray = new Array(numPropertiesCount + 1);
    for (var i = 0; i < numPropertiesCount + 1; i++) {
        this._propCheckedArray[i] = false;
    }
}
PPSMA.DimensionProperties.prototype = {
    _uniqueName: null,
    _displayCaption: null,
    _propertyCount: 0,
    _propNameArray: null,
    _propCaptionArray: null,
    _propCheckedArray: null,
    _noPropertiesMsg: null,
    
    get_name: function PPSMA_DimensionProperties$get_name() {
        return this._uniqueName;
    },
    
    get_caption: function PPSMA_DimensionProperties$get_caption() {
        return this._displayCaption;
    },
    
    get_enabledCount: function PPSMA_DimensionProperties$get_enabledCount() {
        var retVal = 0;
        for (var i = 0; i < this._propertyCount; i++) {
            if (this._propCheckedArray[i]) {
                ++retVal;
            }
        }
        return retVal;
    },
    
    get_count: function PPSMA_DimensionProperties$get_count() {
        return this._propertyCount;
    },
    
    get_captions: function PPSMA_DimensionProperties$get_captions() {
        return this._propCaptionArray;
    },
    
    get_names: function PPSMA_DimensionProperties$get_names() {
        return this._propNameArray;
    },
    
    get_checked: function PPSMA_DimensionProperties$get_checked() {
        return this._propCheckedArray;
    },
    
    get_noPropertiesMessage: function PPSMA_DimensionProperties$get_noPropertiesMessage() {
        return this._noPropertiesMsg;
    },
    set_noPropertiesMessage: function PPSMA_DimensionProperties$set_noPropertiesMessage(value) {
        this._noPropertiesMsg = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.Hierarchy

PPSMA.Hierarchy = function PPSMA_Hierarchy(name, caption, type) {
    this._name = name;
    this._caption = caption;
    this._type = type;
    if (this._type !== 1) {
        this._type = 0;
    }
}
PPSMA.Hierarchy.prototype = {
    _name: null,
    _caption: null,
    _levels: null,
    _type: 0,
    
    get_hierarchyType: function PPSMA_Hierarchy$get_hierarchyType() {
        return this._type;
    },
    
    get_name: function PPSMA_Hierarchy$get_name() {
        return this._name;
    },
    
    get_caption: function PPSMA_Hierarchy$get_caption() {
        return this._caption;
    },
    
    get_level: function PPSMA_Hierarchy$get_level() {
        return this._levels;
    },
    
    createLevels: function PPSMA_Hierarchy$createLevels(count) {
        this._levels = new Array(count);
        return this._levels;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.Level

PPSMA.Level = function PPSMA_Level(name, caption, index) {
    this._name = name;
    this._caption = caption;
    this._index = index;
}
PPSMA.Level.prototype = {
    _name: null,
    _caption: null,
    _index: 0,
    
    get_name: function PPSMA_Level$get_name() {
        return this._name;
    },
    
    get_caption: function PPSMA_Level$get_caption() {
        return this._caption;
    },
    
    get_index: function PPSMA_Level$get_index() {
        return this._index;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.ResultHierarchy

PPSMA.ResultHierarchy = function PPSMA_ResultHierarchy(name, isSingleton, deepestLevel, dimension) {
    this._name = name;
    this._isSingleton = isSingleton;
    this._deepestLevel = deepestLevel;
    this._isAggregated = false;
    this._resultMemberProperties = null;
    this._dimension = dimension;
}
PPSMA.ResultHierarchy.prototype = {
    _name: null,
    _isSingleton: false,
    _deepestLevel: 0,
    _isAggregated: false,
    _resultMemberProperties: null,
    _dimension: null,
    
    get_name: function PPSMA_ResultHierarchy$get_name() {
        return this._name;
    },
    
    get_dimension: function PPSMA_ResultHierarchy$get_dimension() {
        return this._dimension;
    },
    
    get_isSingleton: function PPSMA_ResultHierarchy$get_isSingleton() {
        return this._isSingleton;
    },
    
    get_deepestLevel: function PPSMA_ResultHierarchy$get_deepestLevel() {
        return this._deepestLevel;
    },
    
    get_isAggregated: function PPSMA_ResultHierarchy$get_isAggregated() {
        return this._isAggregated;
    },
    set_isAggregated: function PPSMA_ResultHierarchy$set_isAggregated(value) {
        this._isAggregated = value;
        return value;
    },
    
    createMemberProperties: function PPSMA_ResultHierarchy$createMemberProperties(uniqueName, memberPropertyCount) {
        if (!this._resultMemberProperties) {
            this._resultMemberProperties = new PPSMA.ResultMemberProperties(uniqueName, memberPropertyCount);
        }
    },
    
    get_memberProperties: function PPSMA_ResultHierarchy$get_memberProperties() {
        return this._resultMemberProperties;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.Member

PPSMA.Member = function PPSMA_Member(id, name, cap, lName, lNum, hasP, hasC, dd) {
    this._id = id;
    this._name = name;
    this._caption = cap;
    this._levelName = lName;
    this._levelNumber = lNum;
    this._hasParent = hasP;
    this._hasChildren = hasC;
    this._drilledDown = dd;
}
PPSMA.Member.prototype = {
    _id: null,
    _name: null,
    _caption: null,
    _levelName: null,
    _levelNumber: 0,
    _hasParent: false,
    _hasChildren: false,
    _drilledDown: false,
    
    get_id: function PPSMA_Member$get_id() {
        return this._id;
    },
    
    get_name: function PPSMA_Member$get_name() {
        return this._name;
    },
    
    get_caption: function PPSMA_Member$get_caption() {
        return this._caption;
    },
    
    get_levelName: function PPSMA_Member$get_levelName() {
        return this._levelName;
    },
    
    get_levelNumber: function PPSMA_Member$get_levelNumber() {
        return this._levelNumber;
    },
    
    get_hasParent: function PPSMA_Member$get_hasParent() {
        return this._hasParent;
    },
    
    get_hasChildren: function PPSMA_Member$get_hasChildren() {
        return this._hasChildren;
    },
    
    get_drilledDown: function PPSMA_Member$get_drilledDown() {
        return this._drilledDown;
    },
    set_drilledDown: function PPSMA_Member$set_drilledDown(value) {
        this._drilledDown = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.OlapViewContext

PPSMA.OlapViewContext = function PPSMA_OlapViewContext(controlFactoryPath, metadataFactoryPath, ctrlProxyId, targetId, webPartProxy, webPartTargetId, resourcePath) {
    this._controlFactoryPath = controlFactoryPath;
    this._metadataFactoryPath = metadataFactoryPath;
    this._ctrlProxyId = ctrlProxyId;
    this._webPartTargetId = webPartTargetId;
    this._webPartProxy = webPartProxy;
    this._targetId = targetId;
    this._innerTargetId = null;
    this._reportId = null;
    this._reportVersion = 0;
    this._resourcePath = resourcePath;
    this._inboundSerialStamp = 0;
    this._results = null;
    this._loadingDiv = null;
    this._loadingTextDiv = null;
    this._stopLink = null;
    this._menuMetadata = null;
    this._cubeMetadata = null;
    this._infoBarVisible = true;
    this._historyButtonsVisible = false;
    this._isSingleView = false;
    this._isHistoryNavigation = false;
    this._toolbarVisible = false;
    this._currentDataPage = 1;
    this._reportContext = null;
    this._dimensionPropertiesDict = {};
    this._xmlhttp = null;
    this._errorHtml = '<div class=pps-reportErrorDiv><div class=pps-reportErrorTable>' + PPSMA.SR.Dashboard_Render_UnexpectedError + '</div></div>';
    PPSMA.OlapViewContext.globalIds[ctrlProxyId] = this;
    if (webPartProxy) {
        webPartProxy.registerDisposableView(this);
    }
    window.attachEvent('onresize', Function.createDelegate(this, this.resize));
}
PPSMA.OlapViewContext._isNullOrEmpty = function PPSMA_OlapViewContext$_isNullOrEmpty(str) {
    return (!str || !str.length);
}
PPSMA.OlapViewContext._xmlEncode = function PPSMA_OlapViewContext$_xmlEncode(txt) {
    txt = txt.replace(new RegExp('&', 'g'), '&amp;');
    txt = txt.replace(new RegExp('\"', 'g'), '&quot;');
    txt = txt.replace(new RegExp('\'', 'g'), '&apos;');
    txt = txt.replace(new RegExp('<', 'g'), '&lt;');
    txt = txt.replace(new RegExp('>', 'g'), '&gt;');
    return txt;
}
PPSMA.OlapViewContext._ppsXmlDecode = function PPSMA_OlapViewContext$_ppsXmlDecode(txt) {
    txt = txt.replace(new RegExp('&lt;', 'g'), '<');
    txt = txt.replace(new RegExp('&gt;', 'g'), '>');
    txt = txt.replace(new RegExp('&apos;', 'g'), '\'');
    txt = txt.replace(new RegExp('&quot;', 'g'), '\"');
    txt = txt.replace(new RegExp('&amp;', 'g'), '&');
    txt = txt.replace(new RegExp('{PPSMACRI}lt', 'g'), '&lt;');
    txt = txt.replace(new RegExp('{PPSMACRI}gt', 'g'), '&gt;');
    txt = txt.replace(new RegExp('{PPSMACRI}apos', 'g'), '&apos;');
    txt = txt.replace(new RegExp('{PPSMACRI}quot', 'g'), '&quot;');
    txt = txt.replace(new RegExp('{PPSMACRI}amp', 'g'), '&amp;');
    return txt;
}
PPSMA.OlapViewContext._getWindowSize = function PPSMA_OlapViewContext$_getWindowSize() {
    var obj = new Sys.UI.Point(0, 0);
    if (window.self.innerWidth) {
        obj.x = window.self.innerWidth;
        obj.y = window.self.innerHeight;
    }
    else if (document.body) {
        obj.x = document.body.clientWidth;
        obj.y = document.body.clientHeight;
    }
    else if (document.documentElement) {
        obj.x = document.documentElement.clientWidth;
        obj.y = document.documentElement.clientHeight;
    }
    return obj;
}
PPSMA.OlapViewContext._getDivSize = function PPSMA_OlapViewContext$_getDivSize(container) {
    var size = new Sys.UI.Point(0, 0);
    if (!container) {
        size = PPSMA.OlapViewContext._getWindowSize();
    }
    else {
        var currentStyle = container.currentStyle;
        if (currentStyle.width !== 'auto' || currentStyle.height !== 'auto') {
            size.x = container.clientWidth;
            size.y = container.clientHeight;
        }
    }
    return size;
}
PPSMA.OlapViewContext._getChildElementByID = function PPSMA_OlapViewContext$_getChildElementByID(parentID, childID) {
    var parent = $get(parentID);
    var children = parent.children;
    var child = null;
    for (var i = 0; i < children.length; i++) {
        if (children[i].id === childID) {
            child = children[i];
            i = children.length;
        }
    }
    return child;
}
PPSMA.OlapViewContext.prototype = {
    _controlFactoryPath: null,
    _metadataFactoryPath: null,
    _ctrlProxyId: null,
    _webPartTargetId: null,
    _webPartProxy: null,
    _targetId: null,
    _innerTargetId: null,
    _reportId: null,
    _reportVersion: 0,
    _resourcePath: null,
    _targetType: null,
    _inboundSerialStamp: 0,
    _results: null,
    _loadingDiv: null,
    _loadingTextDiv: null,
    _stopLink: null,
    _menuMetadata: null,
    _cubeMetadata: null,
    _dimensionPropertiesDict: null,
    _infoBarVisible: false,
    _historyButtonsVisible: false,
    _isSingleView: false,
    _toolbarVisible: false,
    _currentDataPage: 0,
    _historyManager: null,
    _isHistoryNavigation: false,
    _reportContext: null,
    _analyticCallback: null,
    _xmlhttp: null,
    _errorHtml: null,
    
    onHistoryNavigated: function PPSMA_OlapViewContext$onHistoryNavigated(sender, e) {
        if (!PPSMA.OlapViewContext._isNullOrEmpty(e.get_entryName())) {
            var items = e.get_entryName().split('|');
            var ctxId = items[0];
            var historyReportId = items[1];
            if (ctxId === this._ctrlProxyId) {
                if (historyReportId !== 'null' && historyReportId !== 'error') {
                    this._reportId = historyReportId;
                    this._reportVersion = 0;
                    var pageNum = 1;
                    if (items.length > 2 && items[2].length > 0) {
                        pageNum = Number.parseInvariant(items[2]);
                    }
                    this._currentDataPage = pageNum;
                    this._isHistoryNavigation = true;
                    this.set_targetType(items[4]);
                    this.setPage(pageNum);
                }
                else {
                    if (null !== this._targetId) {
                        var target = $get(this._targetId);
                        if (null !== target) {
                            target.style.position = 'static';
                            target.innerHTML = this._errorHtml;
                        }
                    }
                }
            }
        }
    },
    
    get_reportId: function PPSMA_OlapViewContext$get_reportId() {
        return this._reportId;
    },
    set_reportId: function PPSMA_OlapViewContext$set_reportId(value) {
        this._reportId = value;
        return value;
    },
    
    get_reportVersion: function PPSMA_OlapViewContext$get_reportVersion() {
        return this._reportVersion;
    },
    set_reportVersion: function PPSMA_OlapViewContext$set_reportVersion(value) {
        this._reportVersion = value;
        return value;
    },
    
    get_targetType: function PPSMA_OlapViewContext$get_targetType() {
        return this._targetType;
    },
    set_targetType: function PPSMA_OlapViewContext$set_targetType(value) {
        this._targetType = value;
        return value;
    },
    
    get_innerTargetId: function PPSMA_OlapViewContext$get_innerTargetId() {
        return this._innerTargetId;
    },
    set_innerTargetId: function PPSMA_OlapViewContext$set_innerTargetId(value) {
        this._innerTargetId = value;
        return value;
    },
    
    get_webPartTargetId: function PPSMA_OlapViewContext$get_webPartTargetId() {
        return this._webPartTargetId;
    },
    
    get_results: function PPSMA_OlapViewContext$get_results() {
        return this._results;
    },
    set_results: function PPSMA_OlapViewContext$set_results(value) {
        this._results = value;
        return value;
    },
    
    get_menuMetaData: function PPSMA_OlapViewContext$get_menuMetaData() {
        return this._menuMetadata;
    },
    set_menuMetaData: function PPSMA_OlapViewContext$set_menuMetaData(value) {
        this._menuMetadata = value;
        return value;
    },
    
    get_resourcePath: function PPSMA_OlapViewContext$get_resourcePath() {
        return this._resourcePath;
    },
    
    get_cubeMetadata: function PPSMA_OlapViewContext$get_cubeMetadata() {
        return this._cubeMetadata;
    },
    set_cubeMetadata: function PPSMA_OlapViewContext$set_cubeMetadata(value) {
        this._cubeMetadata = value;
        return value;
    },
    
    get_webPartProxy: function PPSMA_OlapViewContext$get_webPartProxy() {
        return this._webPartProxy;
    },
    
    get_infoBarVisible: function PPSMA_OlapViewContext$get_infoBarVisible() {
        return this._infoBarVisible;
    },
    set_infoBarVisible: function PPSMA_OlapViewContext$set_infoBarVisible(value) {
        this._infoBarVisible = value;
        return value;
    },
    
    get_toolbarVisible: function PPSMA_OlapViewContext$get_toolbarVisible() {
        return this._toolbarVisible;
    },
    set_toolbarVisible: function PPSMA_OlapViewContext$set_toolbarVisible(value) {
        this._toolbarVisible = value;
        return value;
    },
    
    get_historyButtonsVisible: function PPSMA_OlapViewContext$get_historyButtonsVisible() {
        return this._historyButtonsVisible;
    },
    set_historyButtonsVisible: function PPSMA_OlapViewContext$set_historyButtonsVisible(value) {
        this._historyButtonsVisible = value;
        return value;
    },
    
    get_isSingleView: function PPSMA_OlapViewContext$get_isSingleView() {
        return this._isSingleView;
    },
    set_isSingleView: function PPSMA_OlapViewContext$set_isSingleView(value) {
        this._isSingleView = value;
        return value;
    },
    
    get_currentDataPage: function PPSMA_OlapViewContext$get_currentDataPage() {
        return this._currentDataPage;
    },
    set_currentDataPage: function PPSMA_OlapViewContext$set_currentDataPage(value) {
        this._currentDataPage = value;
        return value;
    },
    
    get_ctrlProxyId: function PPSMA_OlapViewContext$get_ctrlProxyId() {
        return this._ctrlProxyId;
    },
    
    get_reportContext: function PPSMA_OlapViewContext$get_reportContext() {
        return this._reportContext;
    },
    set_reportContext: function PPSMA_OlapViewContext$set_reportContext(value) {
        this._reportContext = value;
        return value;
    },
    
    applyDimensionProperties: function PPSMA_OlapViewContext$applyDimensionProperties() {
        var size = this._getContainerDivSize();
        var actionXML = '<Action type=\"ApplyDimensionProperties\">' + '<DimensionProperties>' + this.get__dimensionPropertiesXml() + '</DimensionProperties>' + '</Action>';
        this.makeNavigationRequest(actionXML, size.y.toString(), size.x.toString(), true);
    },
    
    execute: function PPSMA_OlapViewContext$execute(height, width) {
        var size = this._getContainerDivSize();
        if (PPSMA.OlapViewContext._isNullOrEmpty(width)) {
            width = size.x.toString();
        }
        if (PPSMA.OlapViewContext._isNullOrEmpty(height)) {
            height = size.y.toString();
        }
        this.makeNavigationRequest('', height, width, true);
    },
    
    changeViewSize: function PPSMA_OlapViewContext$changeViewSize(viewInfoBarSize) {
        if (!PPSMA.OlapViewContext._isNullOrEmpty(this._innerTargetId)) {
            var innerDiv = $get(this._innerTargetId);
            if (innerDiv) {
                innerDiv.style.height = (innerDiv.offsetHeight + viewInfoBarSize) + 'px';
            }
        }
    },
    
    toggleViewInfoBar: function PPSMA_OlapViewContext$toggleViewInfoBar(viewInfoBar) {
        if (this._infoBarVisible) {
            this._infoBarVisible = false;
            viewInfoBar.parentNode.style.display = 'none';
            if (this._targetType === 'OLAPChart') {
                this.setPage(this._currentDataPage);
            }
            else {
                this.changeViewSize(22);
            }
        }
        else {
            this._infoBarVisible = true;
            viewInfoBar.parentNode.style.display = 'inline';
            if (this._targetType === 'OLAPChart') {
                this.setPage(this._currentDataPage);
            }
            else {
                this.changeViewSize(-22);
            }
        }
    },
    
    drillUp: function PPSMA_OlapViewContext$drillUp(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"DrillUp\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    drillDown: function PPSMA_OlapViewContext$drillDown(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"DrillDown\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    get__dimensionPropertiesXml: function PPSMA_OlapViewContext$get__dimensionPropertiesXml() {
        var dimPropsXML = '';
        if ((!this._results) || (!this._results.get_rowHierarchies())) {
            return dimPropsXML;
        }
        for (var r = 0; r < this._results.get_rowHierarchies().length; r++) {
            var hierName = this._results.get_rowHierarchies()[r].get_name();
            var dimProps = this.getDimensionPropertiesList(hierName);
            if (dimProps) {
                if (dimProps.get_enabledCount() > 0) {
                    dimPropsXML += '<Hierarchy name=\"' + dimProps.get_name() + '\" PropertyCount=\"' + dimProps.get_enabledCount().toString() + '\">';
                    for (var d = 0; d < dimProps.get_count(); d++) {
                        if (dimProps.get_checked()[d]) {
                            dimPropsXML += '<DimProperty name=\"' + dimProps.get_names()[d] + '\" caption=\"' + dimProps.get_captions()[d] + '\"/>';
                        }
                    }
                    dimPropsXML += '</Hierarchy>';
                }
                delete this._dimensionPropertiesDict[hierName];
            }
            else {
                var memberProps = this._results.get_rowHierarchies()[r].get_memberProperties();
                var totalProperties = (memberProps.get_count() - memberProps.get_numPropertiesHidden());
                if (totalProperties > 0) {
                    dimPropsXML += '<Hierarchy name=\"' + hierName + '\" PropertyCount=\"' + totalProperties.toString() + '\">';
                    for (var d = 0; d < memberProps.get_count(); d++) {
                        if (!memberProps.isPropertyHidden(memberProps.get_names()[d])) {
                            dimPropsXML += '<DimProperty name=\"' + memberProps.get_names()[d] + '\" caption=\"' + memberProps.get_captions()[d] + '\"/>';
                        }
                    }
                    dimPropsXML += '</Hierarchy>';
                }
            }
        }
        return dimPropsXML;
    },
    
    getPageHeadersHeight: function PPSMA_OlapViewContext$getPageHeadersHeight() {
        var headersHeight = 0;
        if (this._toolbarVisible) {
            headersHeight += 23;
        }
        if (this._infoBarVisible) {
            headersHeight += 22;
        }
        return headersHeight;
    },
    
    setPage: function PPSMA_OlapViewContext$setPage(pageno) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var canNavigate = true;
        if (this._results) {
            canNavigate = this._results.get_canNavigate();
        }
        var actionXML = '<Action type=\"Execute\">' + '<Page>' + pageno + '</Page>' + '<Nav>' + canNavigate + '</Nav>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    setPage2: function PPSMA_OlapViewContext$setPage2(pageno, e) {
        var keyNum = e.keyCode;
        if (keyNum === 13) {
            this.setPage(pageno);
        }
    },
    
    setAllPageWithMessage: function PPSMA_OlapViewContext$setAllPageWithMessage(msg) {
        var ans;
        ans = confirm(msg);
        if (ans) {
            var size = this._getContainerDivSize();
            var width = size.x.toString();
            var height = size.y.toString();
            var canNavigate = true;
            if (this._results) {
                canNavigate = this._results.get_canNavigate();
            }
            var actionXML = '<Action type=\"Execute\">' + '<Page>0</Page>' + '<Nav>' + canNavigate + '</Nav>' + '</Action>';
            this.makeNavigationRequest(actionXML, height, width, true);
        }
    },
    
    setAllPageWithMessage2: function PPSMA_OlapViewContext$setAllPageWithMessage2(msg, e) {
        var keyNum = e.keyCode;
        if (keyNum === 13) {
            this.setAllPageWithMessage(msg);
        }
    },
    
    expand: function PPSMA_OlapViewContext$expand(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"Expand\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    collapse: function PPSMA_OlapViewContext$collapse(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"Collapse\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    showOnly: function PPSMA_OlapViewContext$showOnly(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"ShowOnly\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    hide: function PPSMA_OlapViewContext$hide(hierarchyName, memberName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"Hide\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    crossDrill: function PPSMA_OlapViewContext$crossDrill(hierarchyName, memberName, drillToHierarchyName, drillToMemberName, drillToLevelName) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"CrossDrill\">' + '<Member>' + PPSMA.OlapViewContext._xmlEncode(memberName) + '</Member>' + '<Hierarchy>' + PPSMA.OlapViewContext._xmlEncode(hierarchyName) + '</Hierarchy>' + '<Page>' + page + '</Page>' + '<DrillToMember>' + PPSMA.OlapViewContext._xmlEncode(drillToMemberName) + '</DrillToMember>' + '<DrillToLevel>' + PPSMA.OlapViewContext._xmlEncode(drillToLevelName) + '</DrillToLevel>' + '<DrillToHierarchy>' + PPSMA.OlapViewContext._xmlEncode(drillToHierarchyName) + '</DrillToHierarchy>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    pivot: function PPSMA_OlapViewContext$pivot() {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"Pivot\"></Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    switchOlapReportType: function PPSMA_OlapViewContext$switchOlapReportType(reportType, callback) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"SwitchReportType\">' + '<Page>' + reportType + '</Page>' + '</Action>';
        var type;
        if (reportType === '0') {
            type = 'OLAPGrid';
        }
        else {
            type = 'OLAPChart';
        }
        this._analyticCallback = callback;
        this._makeNavigationRequestWithType(actionXML, height, width, true, type);
    },
    
    setOlapChartLegendLocation: function PPSMA_OlapViewContext$setOlapChartLegendLocation(location, callback) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"SetLegendLocation\">' + '<Page>' + location + '</Page>' + '</Action>';
        this._analyticCallback = callback;
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    changeViewConfiguration: function PPSMA_OlapViewContext$changeViewConfiguration(propertyName, propertyValue) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"ChangeViewConfiguration\">' + '<' + propertyName + '>' + propertyValue + '</' + propertyName + '>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    filterEmpty: function PPSMA_OlapViewContext$filterEmpty(axis, filter) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"FilterEmpty\">' + '<Axis>' + PPSMA.OlapViewContext._xmlEncode(axis) + '</Axis>' + '<Filter>' + PPSMA.OlapViewContext._xmlEncode(filter) + '</Filter>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    sort: function PPSMA_OlapViewContext$sort(axis, tupleXml, sortType, preservePeerGroup) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var page = this._currentDataPage;
        if (!page) {
            page = 1;
        }
        var actionXML = '<Action type=\"Sort\">' + '<Axis>' + PPSMA.OlapViewContext._xmlEncode(axis) + '</Axis>' + '<TupleXML>' + tupleXml + '</TupleXML>' + '<SortType>' + PPSMA.OlapViewContext._xmlEncode(sortType) + '</SortType>' + '<PreservePeerGroup>' + PPSMA.OlapViewContext._xmlEncode(preservePeerGroup) + '</PreservePeerGroup>' + '<Page>' + page + '</Page>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, true);
    },
    
    loadCubeMetadata: function PPSMA_OlapViewContext$loadCubeMetadata(metadataContextId) {
        var actionXML = '<Action type=\"GetCubeMetadata\"></Action>';
        this.makeMetadataRequest(actionXML, metadataContextId);
    },
    
    showLoadingDiv: function PPSMA_OlapViewContext$showLoadingDiv() {
        if (!PPSMA.OlapViewContext._isNullOrEmpty(this._innerTargetId)) {
            var target = $get(this._innerTargetId);
            if (target) {
                if (!this._loadingDiv) {
                    this._loadingDiv = document.createElement('div');
                    this._loadingDiv.className = 'pps-washout';
                    this._loadingDiv.style.width = '32px';
                    this._loadingDiv.style.height = '32px';
                    target.appendChild(this._loadingDiv);
                    this._loadingTextDiv = document.createElement('div');
                    this._loadingTextDiv.className = 'pps-loadingDiv';
                    var text = document.createElement('span');
                    text.className = 'pps-loadingDivText';
                    text.innerHTML = 'Updating...&nbsp;&nbsp;';
                    this._loadingTextDiv.appendChild(text);
                    this._stopLink = document.createElement('a');
                    this._stopLink.innerHTML = 'Stop';
                    Sys.UI.DomEvent.addHandler(this._stopLink, 'click', Function.createDelegate(this, this.cancelRequest));
                    this._stopLink.setAttribute('href', '#');
                    text.appendChild(this._stopLink);
                    target.appendChild(this._loadingTextDiv);
                }
                this._setLoadingDivSize2(target);
            }
        }
    },
    
    hideLoadingDiv: function PPSMA_OlapViewContext$hideLoadingDiv() {
        if (this._loadingDiv) {
            this._loadingDiv.parentNode.removeChild(this._loadingDiv);
            this._loadingDiv = null;
            Sys.UI.DomEvent.clearHandlers(this._stopLink);
            this._stopLink = null;
            this._loadingTextDiv.parentNode.removeChild(this._loadingTextDiv);
            this._loadingTextDiv = null;
            if (this._toolbarVisible) {
                var toolbarID = 'OTB' + this._innerTargetId;
                var toolbar = $get(toolbarID);
                toolbar.style.visibility = 'visible';
            }
            if (this._infoBarVisible) {
                var infobar = PPSMA.OlapViewContext._getChildElementByID(this._targetId, '_viewInfoId');
                if (infobar) {
                    infobar.style.visibility = 'visible';
                }
            }
        }
    },
    
    getCellLevelActions: function PPSMA_OlapViewContext$getCellLevelActions(tupleXml) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"CellLevelActions\">' + '<Tuple>' + tupleXml + '</Tuple>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, false);
    },
    
    getDimensionProperties: function PPSMA_OlapViewContext$getDimensionProperties(selectedMemberXml) {
        var size = this._getContainerDivSize();
        var width = size.x.toString();
        var height = size.y.toString();
        var actionXML = '<Action type=\"DimensionProperties\">' + '<Member>' + selectedMemberXml + '</Member>' + '</Action>';
        this.makeNavigationRequest(actionXML, height, width, false);
    },
    
    _makeNavigationRequestWithType: function PPSMA_OlapViewContext$_makeNavigationRequestWithType(actionXML, height, width, isNav, viewType) {
        if (isNav) {
            this.showLoadingDiv();
        }
        if (this._xmlhttp) {
            this._xmlhttp.get_executor().abort();
        }
        this._xmlhttp = new Sys.Net.WebRequest();
        this._inboundSerialStamp++;
        var parms = new Sys.StringBuilder();
        parms.append('&resourcePath=' + encodeURIComponent(this._resourcePath));
        parms.append('&targetControlId=' + this._targetId);
        if (!viewType) {
            parms.append('&targetControlType=OLAPGrid');
        }
        else {
            parms.append('&targetControlType=' + encodeURIComponent(viewType));
        }
        parms.append('&olapContextId=' + encodeURIComponent(this._ctrlProxyId));
        parms.append('&availableHeight=' + height);
        parms.append('&availableWidth=' + width);
        parms.append('&inboundSerialStamp=' + this._inboundSerialStamp);
        if (!this._reportId) {
            parms.append('&reportId=');
            parms.append('&reportVersion=');
        }
        else {
            parms.append('&reportId=' + this._reportId);
            parms.append('&reportVersion=' + this._reportVersion);
        }
        parms.append('&inboundParameters=');
        parms.append('&beginPoints=');
        parms.append('&navigationAction=' + encodeURIComponent(actionXML));
        parms.append('&viewProps=InfoBar:' + this._infoBarVisible);
        parms.append(',History:' + this._historyButtonsVisible);
        parms.append(',SingleView:' + this._isSingleView);
        this._xmlhttp.set_body(parms.toString());
        this._xmlhttp.set_url(this._controlFactoryPath);
        this._xmlhttp.set_httpVerb('POST');
        if (isNav) {
            this._xmlhttp.add_completed(Function.createDelegate(this, this.xmlhttp_Completed));
        }
        else {
            this._xmlhttp.add_completed(Function.createDelegate(this, this.xmlhttp_MenuMetaDataCompleted));
        }
        this._xmlhttp.invoke();
    },
    
    makeNavigationRequest: function PPSMA_OlapViewContext$makeNavigationRequest(actionXml, height, width, isNav) {
        this._makeNavigationRequestWithType(actionXml, height, width, isNav, this._targetType);
    },
    
    xmlhttp_MenuMetaDataCompleted: function PPSMA_OlapViewContext$xmlhttp_MenuMetaDataCompleted(executor) {
        if (executor.get_responseAvailable()) {
            if (executor.get_responseData().length > 0) {
                this._menuMetadata = PPSMA.OlapViewContext._ppsXmlDecode(executor.get_xml().xml);
            }
        }
    },
    
    cancelRequest: function PPSMA_OlapViewContext$cancelRequest(e) {
        this.hideLoadingDiv();
        if (this._xmlhttp) {
            this._xmlhttp.get_executor().abort();
            this._xmlhttp = null;
        }
    },
    
    invokeAnalyticCallback: function PPSMA_OlapViewContext$invokeAnalyticCallback(success) {
        if (this._analyticCallback) {
            this._analyticCallback(success);
            this._analyticCallback = null;
        }
    },
    
    xmlhttp_Completed: function PPSMA_OlapViewContext$xmlhttp_Completed(executor) {
        this.hideLoadingDiv();
        if (executor.get_aborted()) {
            this.invokeAnalyticCallback(false);
            return;
        }
        else {
            this.invokeAnalyticCallback(true);
        }
        if (this._isSingleView && !this._historyManager) {
            var target = $get(this._targetId);
            this._historyManager = AjaxFX.HistoryManager.createHistory(target, this._resourcePath + 'plus.gif?' + this._ctrlProxyId + '|' + this._reportId + '|1|' + this._inboundSerialStamp + '|' + this.get_targetType());
            this._historyManager.add_navigated(Function.createDelegate(this, this.onHistoryNavigated));
        }
        if (executor.get_responseAvailable()) {
            if (executor.get_responseData().length > 0) {
                var updatedReportId = this.renderResult(executor.get_responseData());
                if (this._historyManager && !this._isHistoryNavigation) {
                    if (updatedReportId && !PPSMA.OlapViewContext._isNullOrEmpty(this._reportId)) {
                        this._historyManager.addEntry(this._ctrlProxyId + '|' + this._reportId + '|' + this._currentDataPage + '|' + this._inboundSerialStamp + '|' + this.get_targetType());
                    }
                    else {
                        this._historyManager.addEntry(this._ctrlProxyId + '|error|1|' + this._inboundSerialStamp + '|' + this.get_targetType());
                    }
                }
            }
        }
        else {
            if (null !== this._targetId) {
                var target = $get(this._targetId);
                if (null !== target) {
                    target.style.position = 'static';
                    target.innerHTML = this._errorHtml;
                }
            }
            if (this._historyManager && !this._isHistoryNavigation) {
                this._historyManager.addEntry(this._ctrlProxyId + '|error|1|' + this._inboundSerialStamp + '|' + this.get_targetType());
            }
        }
        this._isHistoryNavigation = false;
    },
    
    makeMetadataRequest: function PPSMA_OlapViewContext$makeMetadataRequest(metadataXML, metadataContextId) {
        if (this._xmlhttp) {
            this._xmlhttp.get_executor().abort();
        }
        this._xmlhttp = new Sys.Net.WebRequest();
        this._inboundSerialStamp++;
        var parms = new Sys.StringBuilder();
        parms.append('&targetControlId=' + this._targetId);
        parms.append('&targetControlType=OlapMetadata');
        parms.append('&olapContextId=' + encodeURIComponent(this._ctrlProxyId));
        parms.append('&metadataContextId=' + encodeURIComponent(metadataContextId));
        parms.append('&inboundSerialStamp=' + this._inboundSerialStamp);
        if (!this._reportId) {
            parms.append('&reportId=');
            parms.append('&reportVersion=');
        }
        else {
            parms.append('&reportId=' + this._reportId);
            parms.append('&reportVersion=' + this._reportVersion);
        }
        parms.append('&metadataAction=' + encodeURIComponent(metadataXML));
        this._xmlhttp.set_body(parms.toString());
        this._xmlhttp.set_url(this._metadataFactoryPath);
        this._xmlhttp.set_httpVerb('POST');
        this._xmlhttp.add_completed(Function.createDelegate(this, this.xmlhttp_MetadataCompleted));
        this._xmlhttp.invoke();
    },
    
    xmlhttp_MetadataCompleted: function PPSMA_OlapViewContext$xmlhttp_MetadataCompleted(executor) {
        if (executor.get_responseAvailable()) {
            if (executor.get_responseData().length > 0) {
                this.renderMetadataResult(executor.get_responseData());
            }
        }
        else {
        }
    },
    
    renderResult: function PPSMA_OlapViewContext$renderResult(result) {
        var outerDelimiter = '{0874F91A-7AA4-44f4-98D5-D856A1163A6D}';
        var innerDelimiter = '{1657B459-2B94-40df-8898-3FF36D5CA474}';
        var trimmedText = result;
        var indexOfFirst = trimmedText.indexOf(outerDelimiter);
        if (indexOfFirst > 0) {
            trimmedText = trimmedText.substr(indexOfFirst);
        }
        if (trimmedText.length > 9) {
            if ('</string>' === trimmedText.substr(trimmedText.length - 9)) {
                trimmedText = trimmedText.substring(0, trimmedText.length - 9);
            }
        }
        var renderingInstructions = trimmedText.split(outerDelimiter);
        if (null !== renderingInstructions) {
            for (var i = 0; i < renderingInstructions.length; i++) {
                if (null !== renderingInstructions[i] && '' !== renderingInstructions[i]) {
                    var tokens = renderingInstructions[i].split(innerDelimiter);
                    if (null !== tokens) {
                        if (tokens.length >= 3) {
                            var id = tokens[0];
                            var html = tokens[1];
                            var script = tokens[2];
                            if (null !== html && '' !== html) {
                                html = PPSMA.OlapViewContext._ppsXmlDecode(html);
                            }
                            if (null !== script && '' !== script) {
                                script = PPSMA.OlapViewContext._ppsXmlDecode(script);
                                try {
                                    eval(script);
                                }
                                catch (ex) {
                                    alert(ex.message);
                                }
                                return true;
                            }
                            else {
                                if (null !== id) {
                                    var target = $get(id);
                                    if (null !== target) {
                                        target.style.position = 'static';
                                        target.innerHTML = html;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return false;
    },
    
    renderMetadataResult: function PPSMA_OlapViewContext$renderMetadataResult(result) {
        var outerDelimiter = '{0874F91A-7AA4-44f4-98D5-D856A1163A6D}';
        var innerDelimiter = '{1657B459-2B94-40df-8898-3FF36D5CA474}';
        var trimmedText = result;
        var indexOfFirst = trimmedText.indexOf(outerDelimiter);
        if (indexOfFirst > 0) {
            trimmedText = trimmedText.substr(indexOfFirst);
        }
        if (trimmedText.length > 9) {
            if ('</string>' === trimmedText.substr(trimmedText.length - 9)) {
                trimmedText = trimmedText.substring(0, trimmedText.length - 9);
            }
        }
        var renderingInstructions = trimmedText.split(outerDelimiter);
        if (null !== renderingInstructions) {
            for (var i = 0; i < renderingInstructions.length; i++) {
                if (null !== renderingInstructions[i] && '' !== renderingInstructions[i]) {
                    var tokens = renderingInstructions[i].split(innerDelimiter);
                    if (null !== tokens) {
                        if (tokens.length >= 3) {
                            var script = tokens[1];
                            var callbackInboundSerialStamp = Number.parseInvariant(tokens[2]);
                            if (this._inboundSerialStamp <= callbackInboundSerialStamp) {
                                if (null !== script && '' !== script) {
                                    script = PPSMA.OlapViewContext._ppsXmlDecode(script);
                                    try {
                                        eval(script);
                                    }
                                    catch (ex) {
                                        alert(ex.message);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    
    renderUpdate: function PPSMA_OlapViewContext$renderUpdate() {
        var ctrlDiv = $get(this._targetId);
        if (ctrlDiv) {
            var hwObject = PPSMA.OlapViewContext._getWindowSize();
            ctrlDiv.lastHeight = hwObject.y;
            ctrlDiv.lastWidth = hwObject.x;
            if (!PPSMA.OlapViewContext._isNullOrEmpty(this._innerTargetId)) {
                var resizeDiv = $get(this._innerTargetId);
                if (resizeDiv) {
                    resizeDiv.isReloading = false;
                    resizeDiv.isResizing = false;
                }
            }
        }
    },
    
    resize: function PPSMA_OlapViewContext$resize() {
        if (document.body.clientHeight <= 30) {
            return;
        }
        var ctrlDiv = $get(this._targetId);
        if (ctrlDiv && !PPSMA.OlapViewContext._isNullOrEmpty(this._innerTargetId)) {
            var resizeDiv = $get(this._innerTargetId);
            if (resizeDiv) {
                resizeDiv.style.height = (ctrlDiv.offsetParent.offsetHeight - this.getPageHeadersHeight()) + 'px';
                resizeDiv.style.width = ctrlDiv.offsetParent.offsetWidth + 'px';
            }
        }
    },
    
    _getContainerDivSize: function PPSMA_OlapViewContext$_getContainerDivSize() {
        var webPartTarget = null;
        if (!PPSMA.OlapViewContext._isNullOrEmpty(this._webPartTargetId)) {
            webPartTarget = $get(this._webPartTargetId);
        }
        return PPSMA.OlapViewContext._getDivSize(webPartTarget);
    },
    
    _setLoadingDivSize2: function PPSMA_OlapViewContext$_setLoadingDivSize2(target) {
        if (this._loadingDiv && target) {
            this._loadingDiv.style.display = 'none';
            this._loadingTextDiv.style.display = 'none';
            this._loadingDiv.style.width = target.style.width;
            this._loadingDiv.style.height = target.style.height;
            if (this._toolbarVisible) {
                var toolbarID = 'OTB' + this._innerTargetId;
                var toolbar = $get(toolbarID);
                toolbar.style.visibility = 'hidden';
            }
            if (this._infoBarVisible) {
                var infobar = PPSMA.OlapViewContext._getChildElementByID(this._targetId, '_viewInfoId');
                if (infobar) {
                    infobar.style.visibility = 'hidden';
                }
            }
            this._loadingDiv.style.top = target.scrollTop + 'px';
            this._loadingDiv.style.left = target.scrollLeft + 'px';
            this._loadingDiv.className += ' pps-loading-reload';
            this._loadingTextDiv.style.top = ((Math.round(target.offsetHeight / 2) - 20) + target.scrollTop) + 'px';
            this._loadingTextDiv.style.left = ((Math.round(target.offsetWidth / 2) - 75) + target.scrollLeft) + 'px';
            this._loadingTextDiv.className += ' pps-loading-reload';
            this._loadingDiv.style.display = 'block';
            this._loadingTextDiv.style.display = 'block';
        }
    },
    
    _setLoadingDivSize: function PPSMA_OlapViewContext$_setLoadingDivSize(container) {
        if (this._loadingDiv && this._loadingDiv.currentStyle) {
            this._loadingDiv.style.display = 'none';
            if (!container) {
                var size = PPSMA.OlapViewContext._getWindowSize();
                var innerDiv = null;
                if (!PPSMA.OlapViewContext._isNullOrEmpty(this._innerTargetId)) {
                    $get(this._innerTargetId);
                }
                var sHeight = size.y + 'px';
                var iTop = 0;
                if (innerDiv) {
                    sHeight = innerDiv.style.height;
                    iTop = size.y - innerDiv.offsetHeight;
                }
                this._loadingDiv.style.width = size.x + 'px';
                this._loadingDiv.style.height = sHeight;
                this._loadingDiv.style.top = iTop + 'px';
                this._loadingDiv.style.left = '0px';
                this._loadingDiv.className += ' pps-loading-reload';
            }
            else {
                var loadingDivWidth;
                var loadingDivHeight;
                var isAuto = false;
                var currentStyle = container.currentStyle;
                if (currentStyle.width === 'auto' && currentStyle.height === 'auto') {
                    loadingDivWidth = '100%';
                    loadingDivHeight = container.offsetHeight + 'px';
                    isAuto = true;
                }
                else {
                    loadingDivWidth = container.clientWidth + 'px';
                    loadingDivHeight = container.clientHeight + 'px';
                }
                var innerDiv = $get(this._innerTargetId);
                var iTop = container.scrollTop;
                if (innerDiv) {
                    loadingDivHeight = innerDiv.style.height;
                    iTop = innerDiv.offsetTop;
                }
                this._loadingDiv.style.width = loadingDivWidth;
                this._loadingDiv.style.height = loadingDivHeight;
                this._loadingDiv.style.top = iTop + 'px';
                this._loadingDiv.style.left = container.scrollLeft + 'px';
                if (parseInt(loadingDivWidth) > 0 || parseInt(loadingDivHeight) > 0) {
                    if (container.offsetHeight > 0 || !isAuto) {
                        this._loadingDiv.className += ' pps-loading-reload';
                    }
                }
            }
            this._loadingDiv.style.display = 'block';
        }
    },
    
    dispose: function PPSMA_OlapViewContext$dispose() {
        if (this._historyManager) {
            this._historyManager.dispose();
        }
        window.detachEvent('onresize', Function.createDelegate(this, this.resize));
        PPSMA.OlapViewContext.globalIds[this._ctrlProxyId] = null;
    },
    
    getDimensionPropertiesList: function PPSMA_OlapViewContext$getDimensionPropertiesList(uniqueName) {
        return (this._dimensionPropertiesDict[uniqueName]);
    },
    
    addDimensionPropertiesList: function PPSMA_OlapViewContext$addDimensionPropertiesList(uniqueName, displayCaption, count) {
        var dimProperties = this.getDimensionPropertiesList(uniqueName);
        if (dimProperties) {
            return dimProperties;
        }
        dimProperties = new PPSMA.DimensionProperties(uniqueName, displayCaption, count);
        this._dimensionPropertiesDict[uniqueName] = dimProperties;
        return dimProperties;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.ResultMemberProperties

PPSMA.ResultMemberProperties = function PPSMA_ResultMemberProperties(uniqueName, count) {
    this._uniqueName = uniqueName;
    this._propertyArraySize = count;
    this._propNameArray = new Array(this._propertyArraySize);
    this._propCaptionArray = new Array(this._propertyArraySize);
    this._propEnabled = new Array(this._propertyArraySize);
    this._propertyCount = 0;
}
PPSMA.ResultMemberProperties.prototype = {
    _uniqueName: null,
    _propertyCount: 0,
    _propNameArray: null,
    _propCaptionArray: null,
    _propEnabled: null,
    _propertyArraySize: 0,
    
    createProperty: function PPSMA_ResultMemberProperties$createProperty(name, caption) {
        this._propNameArray[this._propertyCount] = name;
        this._propCaptionArray[this._propertyCount] = caption;
        this._propEnabled[this._propertyCount] = true;
        ++this._propertyCount;
    },
    
    hide: function PPSMA_ResultMemberProperties$hide(propertyName) {
        for (var i = 0; i < this._propertyCount; i++) {
            if (this._propNameArray[i] === propertyName) {
                this._propEnabled[i] = false;
                break;
            }
        }
    },
    
    isPropertyHidden: function PPSMA_ResultMemberProperties$isPropertyHidden(propertyName) {
        for (var i = 0; i < this._propertyCount; i++) {
            if (this._propNameArray[i] === propertyName) {
                return ((this._propEnabled[i]) ? false : true);
            }
        }
        return true;
    },
    
    get_numPropertiesHidden: function PPSMA_ResultMemberProperties$get_numPropertiesHidden() {
        var numPropertiesHidden = 0;
        for (var i = 0; i < this._propertyCount; i++) {
            if (!this._propEnabled[i]) {
                ++numPropertiesHidden;
            }
        }
        return numPropertiesHidden;
    },
    
    get_count: function PPSMA_ResultMemberProperties$get_count() {
        return this._propertyCount;
    },
    
    get_name: function PPSMA_ResultMemberProperties$get_name() {
        return this._uniqueName;
    },
    
    get_captions: function PPSMA_ResultMemberProperties$get_captions() {
        return this._propCaptionArray;
    },
    
    get_names: function PPSMA_ResultMemberProperties$get_names() {
        return this._propNameArray;
    }
}


////////////////////////////////////////////////////////////////////////////////
// PPSMA.Results

PPSMA.Results = function PPSMA_Results(rowCount, columnCount, canNavigate) {
    this._rowHierarchies = new Array(0);
    this._columnHierarchies = new Array(0);
    this._filterHierarchies = new Array(0);
    this._rowCount = rowCount;
    this._columnCount = columnCount;
    this._canNavigate = canNavigate;
    this._filterEmptyAxis = 0;
    this._sortedAxes = 0;
    this._sortTuple = null;
    this._sortTypeCol = 'nosort';
    this._sortTypeRow = 'nosort';
    this._sortColIndex = 0;
    this._sortRowIndex = 0;
}
PPSMA.Results.prototype = {
    _rowHierarchyCount: 0,
    _rowMembers: null,
    _columnHierarchyCount: 0,
    _columnMembers: null,
    _filterHierarchyCount: 0,
    _filterMembers: null,
    _rowCount: 0,
    _columnCount: 0,
    _canNavigate: false,
    _filterEmptyAxis: 0,
    _sortedAxes: 0,
    _sortTuple: null,
    _sortTypeCol: null,
    _sortTypeRow: null,
    _sortColIndex: 0,
    _sortRowIndex: 0,
    
    get_rowMembers: function PPSMA_Results$get_rowMembers() {
        return this._rowMembers;
    },
    
    get_columnMembers: function PPSMA_Results$get_columnMembers() {
        return this._columnMembers;
    },
    
    get_filterMembers: function PPSMA_Results$get_filterMembers() {
        return this._filterMembers;
    },
    
    get_rowHierarchies: function PPSMA_Results$get_rowHierarchies() {
        return this._rowHierarchies;
    },
    
    get_columnHierarchies: function PPSMA_Results$get_columnHierarchies() {
        return this._columnHierarchies;
    },
    
    get_filterHierarchies: function PPSMA_Results$get_filterHierarchies() {
        return this._filterHierarchies;
    },
    
    get_rowCount: function PPSMA_Results$get_rowCount() {
        return this._rowCount;
    },
    
    get_columnCount: function PPSMA_Results$get_columnCount() {
        return this._columnCount;
    },
    
    get_canNavigate: function PPSMA_Results$get_canNavigate() {
        return this._canNavigate;
    },
    
    get_filterEmptyAxis: function PPSMA_Results$get_filterEmptyAxis() {
        return this._filterEmptyAxis;
    },
    set_filterEmptyAxis: function PPSMA_Results$set_filterEmptyAxis(value) {
        this._filterEmptyAxis = value;
        return value;
    },
    
    get_sortedAxes: function PPSMA_Results$get_sortedAxes() {
        return this._sortedAxes;
    },
    set_sortedAxes: function PPSMA_Results$set_sortedAxes(value) {
        this._sortedAxes = value;
        return value;
    },
    
    get_sortTuple: function PPSMA_Results$get_sortTuple() {
        return this._sortTuple;
    },
    set_sortTuple: function PPSMA_Results$set_sortTuple(value) {
        this._sortTuple = value;
        return value;
    },
    
    get_sortTypeCol: function PPSMA_Results$get_sortTypeCol() {
        return this._sortTypeCol;
    },
    set_sortTypeCol: function PPSMA_Results$set_sortTypeCol(value) {
        this._sortTypeCol = value;
        return value;
    },
    
    get_sortTypeRow: function PPSMA_Results$get_sortTypeRow() {
        return this._sortTypeRow;
    },
    set_sortTypeRow: function PPSMA_Results$set_sortTypeRow(value) {
        this._sortTypeRow = value;
        return value;
    },
    
    get_sortColIndex: function PPSMA_Results$get_sortColIndex() {
        return this._sortColIndex;
    },
    set_sortColIndex: function PPSMA_Results$set_sortColIndex(value) {
        this._sortColIndex = value;
        return value;
    },
    
    get_sortRowIndex: function PPSMA_Results$get_sortRowIndex() {
        return this._sortRowIndex;
    },
    set_sortRowIndex: function PPSMA_Results$set_sortRowIndex(value) {
        this._sortRowIndex = value;
        return value;
    },
    
    createRowMembers: function PPSMA_Results$createRowMembers(hierarchyCount) {
        this._rowHierarchyCount = hierarchyCount;
        this._rowHierarchies = new Array(hierarchyCount);
        this._rowMembers = new Array(this._rowCount);
        for (var i = 0; i < this._rowCount; i++) {
            this._rowMembers[i] = new Array(this._rowHierarchyCount);
        }
        return this._rowMembers;
    },
    
    createColumnMembers: function PPSMA_Results$createColumnMembers(hierarchyCount) {
        this._columnHierarchyCount = hierarchyCount;
        this._columnHierarchies = new Array(hierarchyCount);
        this._columnMembers = new Array(this._columnCount);
        for (var i = 0; i < this._columnCount; i++) {
            this._columnMembers[i] = new Array(this._columnHierarchyCount);
        }
        return this._columnMembers;
    },
    
    createFilterMembers: function PPSMA_Results$createFilterMembers(hierarchyCount) {
        this._filterHierarchyCount = hierarchyCount;
        this._filterHierarchies = new Array(hierarchyCount);
        this._filterMembers = new Array(this._filterHierarchyCount);
        return this._filterMembers;
    }
}


Type.registerNamespace('AjaxFX');

////////////////////////////////////////////////////////////////////////////////
// AjaxFX.HistoryEventArgs

AjaxFX.HistoryEventArgs = function AjaxFX_HistoryEventArgs(entryName) {
    AjaxFX.HistoryEventArgs.initializeBase(this);
    this._entryName$1 = entryName;
}
AjaxFX.HistoryEventArgs.prototype = {
    _entryName$1: null,
    
    get_entryName: function AjaxFX_HistoryEventArgs$get_entryName() {
        return this._entryName$1;
    }
}


////////////////////////////////////////////////////////////////////////////////
// AjaxFX.HistoryManager

AjaxFX.HistoryManager = function AjaxFX_HistoryManager(enabled, iframe) {
    this._events = new Sys.EventHandlerList();
    this._enabled = enabled;
    this._iframe = iframe;
    this._idleFrequency = 1000;
}
AjaxFX.HistoryManager.createHistory = function AjaxFX_HistoryManager$createHistory(target, iframeUrl) {
    if (!AjaxFX.HistoryManager._historyManager) {
        if (Sys.Browser.agent !== Sys.Browser.InternetExplorer && Sys.Browser.agent !== Sys.Browser.Firefox) {
            AjaxFX.HistoryManager._historyManager = new AjaxFX.HistoryManager(false, null);
        }
        else {
            var iframe = null;
            if (Sys.Browser.name === 'Microsoft Internet Explorer') {
                AjaxFX.HistoryManager._createHistoryIFrame(target, iframeUrl);
                iframe = $get('_historyFrame');
            }
            AjaxFX.HistoryManager._historyManager = new AjaxFX.HistoryManager(true, iframe);
        }
        AjaxFX.HistoryManager._historyManager._initialize();
    }
    return AjaxFX.HistoryManager._historyManager;
}
AjaxFX.HistoryManager._createHistoryIFrame = function AjaxFX_HistoryManager$_createHistoryIFrame(target, src) {
    if (!AjaxFX.HistoryManager._iframeCreated && target) {
        var iFrame = document.createElement('iframe');
        iFrame.id = '_historyFrame';
        iFrame.style.visibility = 'hidden';
        iFrame.style.display = 'none';
        iFrame.src = src;
        target.parentNode.insertBefore(iFrame, target);
        AjaxFX.HistoryManager._iframeCreated = true;
    }
}
AjaxFX.HistoryManager.prototype = {
    _enabled: false,
    _iframe: null,
    _emptyPageURL: null,
    _iframeLoadHandler: null,
    _ignoreTimer: false,
    _ignoreIFrame: false,
    _currentEntry: null,
    _idleEvent: null,
    _idleFrequency: 0,
    _idleTimer: 0,
    _idleTimerTickHandler: null,
    
    get_isEnabled: function AjaxFX_HistoryManager$get_isEnabled() {
        return this._enabled;
    },
    
    add_navigated: function AjaxFX_HistoryManager$add_navigated(value) {
        this._events.addHandler(AjaxFX.HistoryManager._eventKey_Navigated, value);
    },
    remove_navigated: function AjaxFX_HistoryManager$remove_navigated(value) {
        this._events.removeHandler(AjaxFX.HistoryManager._eventKey_Navigated, value);
    },
    
    addEntry: function AjaxFX_HistoryManager$addEntry(entryName) {
        if (!this._enabled) {
            return;
        }
        this._ignoreTimer = true;
        if (this._iframe) {
            this._ignoreIFrame = true;
            this._iframe.src = this._emptyPageURL + entryName;
        }
        else {
            this._setCurrentEntry(entryName);
        }
    },
    
    dispose: function AjaxFX_HistoryManager$dispose() {
        if (this._iframe) {
            Sys.UI.DomEvent.clearHandlers(this._iframe);
            this._iframe = null;
        }
        if (this._idleTimer) {
            window.clearTimeout(this._idleTimer);
        }
    },
    
    _getCurrentEntry: function AjaxFX_HistoryManager$_getCurrentEntry() {
        var entryName = window.location.hash;
        if ((entryName.length) && (entryName.charAt(0) === '#')) {
            entryName = entryName.substr(1);
        }
        return entryName;
    },
    
    goBack: function AjaxFX_HistoryManager$goBack() {
        window.history.back();
    },
    
    goForward: function AjaxFX_HistoryManager$goForward() {
        window.history.forward();
    },
    
    _initialize: function AjaxFX_HistoryManager$_initialize() {
        if (!this._enabled) {
            return;
        }
        this._idleEvent = Function.createDelegate(this, this._onAppIdle);
        this._idleTimerTickHandler = Function.createDelegate(this, this._onIdleTimerTick);
        this._idleTimer = window.setTimeout(this._idleTimerTickHandler, this._idleFrequency);
        if (this._iframe) {
            var searchStart = this._iframe.src.indexOf('?');
            if (searchStart > 0) {
                this._emptyPageURL = this._iframe.src.substr(0, searchStart) + '?';
            }
            else {
                this._emptyPageURL = this._iframe.src + '?';
            }
            this._iframeLoadHandler = Function.createDelegate(this, this._onIFrameLoad);
            Sys.UI.DomEvent.addHandler(this._iframe, 'load', this._iframeLoadHandler);
        }
        this._currentEntry = this._getCurrentEntry();
        this._onNavigated(this._currentEntry);
        Sys.Application.registerDisposableObject(this);
    },
    
    _onIdleTimerTick: function AjaxFX_HistoryManager$_onIdleTimerTick() {
        this._idleTimer = 0;
        if (this._idleEvent) {
            this._idleEvent(this, Sys.EventArgs.Empty);
            this._idleTimer = window.setTimeout(this._idleTimerTickHandler, this._idleFrequency);
        }
    },
    
    _onAppIdle: function AjaxFX_HistoryManager$_onAppIdle(sender, e) {
        var entryName = this._getCurrentEntry();
        if (entryName !== this._currentEntry) {
            if (this._ignoreTimer) {
                return;
            }
            this._currentEntry = entryName;
            this._onNavigated(entryName);
        }
        else {
            this._ignoreTimer = false;
        }
    },
    
    _onIFrameLoad: function AjaxFX_HistoryManager$_onIFrameLoad(e) {
        var entryName = this._iframe.contentWindow.location.search;
        if ((entryName.length) && (entryName.charAt(0) === '?')) {
            entryName = entryName.substr(1);
        }
        this._setCurrentEntry(entryName);
        if (this._ignoreIFrame) {
            this._ignoreIFrame = false;
            return;
        }
        this._onNavigated(entryName);
    },
    
    _onNavigated: function AjaxFX_HistoryManager$_onNavigated(entryName) {
        var handler = this._events.getHandler(AjaxFX.HistoryManager._eventKey_Navigated);
        if (handler) {
            handler(this, new AjaxFX.HistoryEventArgs(entryName));
        }
    },
    
    _setCurrentEntry: function AjaxFX_HistoryManager$_setCurrentEntry(entryName) {
        this._currentEntry = entryName;
        window.location.hash = entryName;
    }
}


PPSMA.Dimension.registerClass('PPSMA.Dimension');
PPSMA.DimensionProperties.registerClass('PPSMA.DimensionProperties');
PPSMA.Hierarchy.registerClass('PPSMA.Hierarchy');
PPSMA.Level.registerClass('PPSMA.Level');
PPSMA.ResultHierarchy.registerClass('PPSMA.ResultHierarchy');
PPSMA.Member.registerClass('PPSMA.Member');
PPSMA.OlapViewContext.registerClass('PPSMA.OlapViewContext', null, Sys.IDisposable);
PPSMA.ResultMemberProperties.registerClass('PPSMA.ResultMemberProperties');
PPSMA.Results.registerClass('PPSMA.Results');
AjaxFX.HistoryEventArgs.registerClass('AjaxFX.HistoryEventArgs', Sys.EventArgs);
AjaxFX.HistoryManager.registerClass('AjaxFX.HistoryManager', null, Sys.IDisposable);
PPSMA.OlapViewContext.globalIds = {};
PPSMA.OlapViewContext.historyIFrameCreated = false;
AjaxFX.HistoryManager._iframeCreated = false;
AjaxFX.HistoryManager._historyManager = null;
AjaxFX.HistoryManager._eventKey_Navigated = 'Navigated';



// -----------------------------------

Type.registerNamespace('PPSMA');
/* CONTEXTMENU.JS
Helper methods for creating a right-click only context menu
*/
PPSMA.ContextMenu = function PPSMA_ContextMenu(){}
PPSMA.ContextMenu._CurrItem=null;
PPSMA.ContextMenu._CurrMenu=null;
PPSMA.ContextMenu._IsMenuShown=false;
PPSMA.ContextMenu._CurrItemID=null;
//============= PUBLIC METHODS ================================================
PPSMA.ContextMenu.Create = function PPSMA_ContextMenu$Create(e,ctxObject,xOffset,yOffset,anchorException)
{
    if (PPSMA.ContextMenu._IsMenuOn()) return false;
    if (PPSMA.ContextMenu._CurrItem != null) PPSMA.ContextMenu._OnMenuItemOut();
	PPSMA.ContextMenu._CurrItem = e.srcElement;
    return PPSMA.ContextMenu._CreateMenu(e,ctxObject,xOffset,yOffset,anchorException);
}
PPSMA.ContextMenu.AddMenuOption = function PPSMA_ContextMenu$AddMenuOption(p,text,act,src,alt,selected,seq,desc)
{
    var mo = PPSMA.ContextMenu._CMenuOption(text,act,src,alt,selected,false,seq,desc);
	if (!mo) return null;
	PPSMA.ContextMenu._AddChildToParent(p,mo);
	return mo;
}
PPSMA.ContextMenu.AddToggleMenuOption = function PPSMA_ContextMenu$AddToggleMenuOption(p,text,act,src,alt,selected,seq,desc)
{
    var mo = PPSMA.ContextMenu._CMenuOption(text,act,src,alt,selected,true,seq,desc);
	if (!mo) return null;
	PPSMA.ContextMenu._AddChildToParent(p,mo);
	return mo;
}
PPSMA.ContextMenu.AddDisabledMenuOption = function PPSMA_ContextMenu$AddDisabledMenuOption(p,text,act,src,alt,seq,desc)
{
    var mo = PPSMA.ContextMenu._CDisabledMenuOption(text,act,src,alt,seq,desc);
	if (!mo) return null;
	PPSMA.ContextMenu._AddChildToParent(p,mo);
	return mo;
}
PPSMA.ContextMenu.CreateDynamicSubMenu = function PPSMA_ContextMenu$CreateDynamicSubMenu(p,text,fetch,populate,hoveroff,src,alt,seq,desc)
{
    var sm = PPSMA.ContextMenu._CSubMenu(text,fetch,populate,hoveroff,src,alt,seq,desc);
	if (!sm) return null;
	PPSMA.ContextMenu._AddChildToParent(p,sm);
	return sm;
}
PPSMA.ContextMenu.CreateSubMenu = function PPSMA_ContextMenu$CreateSubMenu(p,text,src,alt,seq,desc)
{
    var sm = PPSMA.ContextMenu._CSubMenu(text,null,null,null,src,alt,seq,desc);
	if (!sm) return null;
	PPSMA.ContextMenu._AddChildToParent(p,sm);
	return sm;
}
PPSMA.ContextMenu.AddMenuSeparator = function PPSMA_ContextMenu$AddMenuSeparator(p)
{
    var ms = PPSMA.ContextMenu._CMenuSeparator();
	if (!ms) return null;
	PPSMA.ContextMenu._AddChildToParent(p,ms);
	return ms;
}
PPSMA.ContextMenu.RemoveMenuItem = function PPSMA_ContextMenu$RemoveMenuItem(p,itm)
{
    if(p&&itm) p.removeChild(itm);
}
PPSMA.ContextMenu.RemoveAllButFirst = function PPSMA_ContextMenu$RemoveAllButFirst(p)
{
    while (p.children.length > 1) p.removeChild(p.lastChild);
}
PPSMA.ContextMenu.RemoveAllMenuItems = function PPSMA_ContextMenu$RemoveAllMenuItems(p)
{
    while (p.firstChild != null)
	    PPSMA.ContextMenu.RemoveMenuItem(p,p.firstChild);
}
PPSMA.ContextMenu.ReplaceMenuItem = function PPSMA_ContextMenu$ReplaceMenuItem(p,itm,text,act,src,alt,seq,desc)
{
    if(p&&itm)
    {
	    var menuItem = PPSMA.ContextMenu.AddMenuOption(p,text,act,src,alt,seq,desc);
		p.replaceChild(menuItem,itm);
    }
}
PPSMA.ContextMenu.RefreshMenu = function PPSMA_ContextMenu$RefreshMenu(m,f)
{
    if (PPSMA.ContextMenu._CurrMenu && PPSMA.ContextMenu._IsMenuShown)
        PPSMA.ContextMenu._CurrMenu.refresh(m,f);
}
//============= PRIVATE METHODS ===============================================
PPSMA.ContextMenu._IsMenuOn = function PPSMA_ContextMenu$_IsMenuOn()
{
    try
    {
        if (!PPSMA.ContextMenu._IsMenuShown) return false;
        var fIsOpen=false;
        fIsOpen=(PPSMA.ContextMenu._CurrMenu && PPSMA.ContextMenu._CurrMenu.isOpen());
        if (!fIsOpen) PPSMA.ContextMenu._IsMenuShown=false;
    }
    catch(err)
    {
        fIsOpen = false;
    }
    return fIsOpen;
}
PPSMA.ContextMenu._OnMenuItemOut = function PPSMA_ContextMenu$_OnMenuItemOut()
{
    if (!PPSMA.ContextMenu._IsMenuOn() && PPSMA.ContextMenu._CurrItem !=null)
        PPSMA.ContextMenu._ResetExecState();
}
PPSMA.ContextMenu._ResetExecState = function PPSMA_ContextMenu$_ResetExecState()
{
    PPSMA.ContextMenu._IsMenuShown=false;
    PPSMA.ContextMenu._CurrMenu=null;
    PPSMA.ContextMenu._CurrItem=null;
    PPSMA.ContextMenu._CurrItemID=null;
}
PPSMA.ContextMenu._CreateMenu = function PPSMA_ContextMenu$_CreateMenu(e,ctxObject,xOffset,yOffset,anchorException)
{
    if (PPSMA.ContextMenu._CurrItem == null || (e.srcElement.tagName == "A" && !anchorException)) return false;
    PPSMA.ContextMenu._IsMenuShown=true;
    window.document.body.onclick="";
    PPSMA.ContextMenu._CurrItemID=PPSMA.ContextMenu._CurrItem.getAttribute("ID");
    var m = PPSMA.ContextMenu._CMenu(PPSMA.ContextMenu._CurrItemID + "_menu");
    PPSMA.ContextMenu._CurrMenu = m;
	if (!ctxObject.AddPrimaryMenuItems(m))
	{
	    PPSMA.ContextMenu._ResetExecState();
	    return false;
	}
    PPSMA.ContextMenu._Menu(m, PPSMA.ContextMenu._CurrItem, true, null, xOffset, yOffset);
    document.body.onclick = PPSMA.ContextMenu._OnMenuItemOut;	
    return true;
}
PPSMA.ContextMenu._Menu = function PPSMA_ContextMenu$_Menu(m,r,fr,ft,xoff,yoff)
{
    if (typeof(m) == "string") m=document.getElementById(m);
	if (m)
	{
		if (PPSMA.ContextMenu._IsReady(document) && PPSMA.ContextMenu._IsReady(m))
		    PPSMA.ContextMenu._MenuInt(m,r,fr,ft,xoff,yoff);
		else
		{
			if (r != null) m.setAttribute("relativeTo",r);
			if (fr != null) m.setAttribute("forceRefresh",fr);
			if (ft != null) m.setAttribute("flipTop",ft);
			if (xoff != null) m.setAttribute("xOffsetLeft",xoff);
			if (yoff != null) m.setAttribute("yOffsetTop",yoff);
			m.onreadystatechange = PPSMA.ContextMenu._MenuEvent;
		}
	}
	return false;
}
PPSMA.ContextMenu._IsReady = function PPSMA_ContextMenu$_IsReady(o)
{
    if (!o) return false;
	switch (o.readyState)
	{
	    case "loaded": case "interactive": case "complete": return true;
	    default: return false;
	}
}
PPSMA.ContextMenu._MenuInt = function PPSMA_ContextMenu$_MenuInt(m,r,fr,ft,xoff,yoff)
{
	if (m && !m.isOpen()) m.show(r,fr,ft,xoff,yoff);
}
PPSMA.ContextMenu._MenuEvent = function PPSMA_ContextMenu$_MenuEvent()
{
    var m = event.srcElement;
	if(m && PPSMA.ContextMenu._IsReady(document) && PPSMA.ContextMenu._IsReady(m))
	{
		var r = m.getAttribute("relativeTo");
		var fr = m.getAttribute("forceRefresh");
		var ft = m.getAttribute("flipTop");
		var xoff = m.getAttribute("xOffsetLeft");
		var yoff = m.getAttribute("yOffsetTop");
		if (r != null) m.removeAttribute("relativeTo");
		if (fr != null) m.removeAttribute("forceRefresh");
		if (ft != null) m.removeAttribute("flipTop");
		if (xoff != null) m.removeAttribute("xOffsetLeft");
		if (yoff != null) m.removeAttribute("yOffsetTop");
		m.onreadystatechange = null;
		PPSMA.ContextMenu._MenuInt(m,r,fr,ft,xoff,yoff);
	}
}
PPSMA.ContextMenu._CMenu = function PPSMA_ContextMenu$_CMenu(id)
{
    var m = document.getElementById(id);
	if (m)
	{
		m._initialized = false;
		m._oContents = null;
		m.innerHTML = "";
		return m;
	}
	m = document.createElement("MENU");
	if (!m) return null;
	if (id) m.id = id;
	m.className = "bsm-SrvMenuUI";
	PPSMA.ContextMenu._AddChildToParent(document.body,m);
	return m;
}
PPSMA.ContextMenu._AddChildToParent = function PPSMA_ContextMenu$_AddChildToParent(p,c)
{
    if (p && c) p.appendChild(c);
}
PPSMA.ContextMenu._CMenuSeparator = function PPSMA_ContextMenu$_CMenuSeparator()
{
    var sep = PPSMA.ContextMenu._CMenuItem("separator");
	PPSMA.ContextMenu._SetInnerText(sep, "");
	return sep;
}
PPSMA.ContextMenu._SetInnerText = function PPSMA_ContextMenu$_SetInnerText(n,t)
{
    if (document.createTextNode != null)
	{
		var parsedText = document.createTextNode(t);
		n.innerHTML = "";
		n.appendChild(parsedText);
	}
	else
		n.innerText = t;
}
PPSMA.ContextMenu._CMenuOption = function PPSMA_ContextMenu$_CMenuOption(text,act,src,alt,selected,toggle,seq,desc)
{
    var mo = PPSMA.ContextMenu._CMenuItem("option");
	if (!mo) return null;
	mo.innerText = text;
	var handler = act;
	if (selected && PPSMA.ContextMenu._IsValid(src))
	{
	    mo.setAttribute("selected", "true");
	    if (!toggle) handler = "";
	}    
	mo.setAttribute("onMenuClick", handler);
	PPSMA.ContextMenu._AddImageToMenuItem(mo,src,alt);
	return mo;
}
PPSMA.ContextMenu._CDisabledMenuOption = function PPSMA_ContextMenu$_CDisabledMenuOption(text,act,src,alt,seq,desc)
{
    var mo = PPSMA.ContextMenu._CMenuItem("option");
	if (!mo) return null;
	mo.innerText = text;
	mo.setAttribute("enabled", "false");
	PPSMA.ContextMenu._AddImageToMenuItem(mo,src,alt);
	return mo;
}
PPSMA.ContextMenu._CMenuItem = function PPSMA_ContextMenu$_CMenuItem(type)
{
    var mi = document.createElement("SPAN");
	if (!mi) return null;
	mi.setAttribute("type",type);
	return mi;
}
PPSMA.ContextMenu._CSubMenu = function PPSMA_ContextMenu$_CSubMenu(text,fetch,populate,hoveroff,src,alt,seq,desc)
{
    var sm = PPSMA.ContextMenu._CMenuItem("submenu");
	if (!sm) return null;
	if (desc) sm.setAttribute("description", desc);
	PPSMA.ContextMenu._AddImageToMenuItem(sm,src,alt);
	if (PPSMA.ContextMenu._IsValid(seq)) sm.setAttribute("sequence",seq);
	if (PPSMA.ContextMenu._IsValid(fetch)) sm.setAttribute("onfetch",fetch);
	if (PPSMA.ContextMenu._IsValid(populate)) sm.setAttribute("onpopulate",populate);
	if (PPSMA.ContextMenu._IsValid(hoveroff)) sm.setAttribute("onhoveroff",hoveroff);
	var label = PPSMA.ContextMenu._CMenuLabel(text);
	PPSMA.ContextMenu._AddChildToParent(sm,label);
	return sm;
}
PPSMA.ContextMenu._CMenuLabel = function PPSMA_ContextMenu$_CMenuLabel(text)
{
    var l = PPSMA.ContextMenu._CMenuItem("label");
	if (!l) return null;
	l.innerText = text;
	return l;
}
PPSMA.ContextMenu._IsValid = function PPSMA_ContextMenu$_IsValid(wz)
{
    return (wz && wz != "");
}
PPSMA.ContextMenu._AddImageToMenuItem = function PPSMA_ContextMenu$_AddImageToMenuItem(mi,src,alt)
{
    if (!mi) return;
	if (PPSMA.ContextMenu._IsValid(src)) mi.setAttribute("iconSrc",src);
	if (PPSMA.ContextMenu._IsValid(alt)) mi.setAttribute("iconAltText",alt);
}
PPSMA.ContextMenu.CreateSubMenuCollection = function PPSMA_ContextMenu$CreateSubMenuCollection()
{
    var obj = new Array();
	var coll = new PPSMA.SubMenuCollection();
    for(_item in coll)
	{
	    eval("obj."+_item+"=coll."+_item);
    }
    return obj;
}
PPSMA.SubMenuCollection = function PPSMA_SubMenuCollection(){}
PPSMA.SubMenuCollection.prototype =
{
    Add: function(obj)
    {
        this.push(obj);
    },
    Clear: function()
    {
        while(this.length > 0)
            this.pop();
    }
}
PPSMA.Event = function PPSMA_Event(btn,x,y,srcElem)
{
    this.button=btn;
    this.clientX = x;
    this.clientY = y;
    this.srcElement=srcElem;
}
PPSMA.SubMenu = function PPSMA_SubMenu(m,t)
{
    this.Menu=m;
    this.Type=t;
    this.HoverOn=false;
    this.IsPopulated=false;
}
PPSMA.Hashtable = function PPSMA_Hashtable()
{
    this.hash = new Array();
    this.keys = new Array();
    this.location = 0;
}
PPSMA.Hashtable.prototype = 
{
    get: function PPSMA_Hashtable$get(key)
    {
        return this.hash[key];
    },
    put: function PPSMA_Hashtable$put(key, value)
    {
        if (value == null) return null;
        if (this.hash[key] == null) this.keys[this.keys.length] = key;
        this.hash[key] = value;
    },
    moveFirst: function PPSMA_Hashtable$moveFirst()
    {
        this.location = 0;
    },
    next: function PPSMA_Hashtable$next()
    {
        return (this.location < this.keys.length);
    },
    moveNext: function PPSMA_Hashtable$moveNext()
    {
        this.location++;
    },
    getKey: function PPSMA_Hashtable$getKey()
    {
        return this.keys[this.location];
    },
    getValue: function PPSMA_Hashtable$getValue()
    {
        return this.hash[this.getKey()];
    }
}
PPSMA.ContextMenu.OlapReportType={Grid:0, BarChart:1, StackedBarChart:2, Stacked100BarChart:3, LineChart:4, LineChartWithMarkers:5};
PPSMA.ContextMenu.OptionHelper = function PPSMA_ContextMenu_OptionHelper(member,hierarchy,canNavigate,olapViewContext)
{
    this._member = member;
    this._hierarchy = hierarchy;
    this._canNavigate = canNavigate;
    this._olapViewContext = olapViewContext;
    this._menuTab = "   ";
    this._optionsAdded = 0;
}
PPSMA.ContextMenu.OptionHelper.prototype =
{
    DrillDown: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_DrillDown;
            if (indent) text = this._menuTab+text;
            if (this._member.get_hasChildren())
                PPSMA.ContextMenu.AddMenuOption(m, text, fn, g_resFolder + "DrillDown.gif");
            else
                PPSMA.ContextMenu.AddDisabledMenuOption(m, text, "", g_resFolder + "DrillDownD.gif"); 
            this._optionsAdded += 1;                   
        }
    },
    DrillDownTo: function(m,fetch,populate,hoverOff,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_DrillDownTo;
            if (indent) text = this._menuTab+text;
            var drillDownTo = PPSMA.ContextMenu.CreateDynamicSubMenu(m, text, fetch, populate, hoverOff);
            this.AddLoadingOption(drillDownTo);
            this._optionsAdded += 1;
            return drillDownTo;
        }
        return null;
    },
    AdditionalActions: function(m,fetch,populate,hoverOff,indent,enabled)
    {
        var text = PPSMA.SR.OlapContextMenu_AdditionalActions;
        if (indent) text = this._menuTab+text;
        var addActions = null;
        if (enabled == true)
        {
            addActions = PPSMA.ContextMenu.CreateDynamicSubMenu(m, text, fetch, populate, hoverOff);
            this.AddLoadingOption(addActions);
        }
        else PPSMA.ContextMenu.AddDisabledMenuOption(m, text, "");    
        this._optionsAdded += 1;
        return addActions;
    },
    DrillUp: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_DrillUp;
            if (indent) text = this._menuTab+text;
            if (this._member.get_hasParent())
                PPSMA.ContextMenu.AddMenuOption(m, text, fn, g_resFolder + "DrillUp.gif");
            else
                PPSMA.ContextMenu.AddDisabledMenuOption(m, text, "", g_resFolder + "DrillUpD.gif");
            this._optionsAdded += 1;
        }
    },
    ExpandCollapse: function(m,expand,collapse,indent)
    {
        if (this._canNavigate)
        {
            if (this._member.get_drilledDown())
            {
                text = PPSMA.SR.OlapContextMenu_Collapse;
                if (indent) text = this._menuTab+text;
                if (this._member.get_hasChildren())
                    PPSMA.ContextMenu.AddMenuOption(m, text, collapse);
                else
                    PPSMA.ContextMenu.AddDisabledMenuOption(m, text);
                this._optionsAdded += 1;
            }
            else
            {
                text = PPSMA.SR.OlapContextMenu_Expand;
                if (indent) text = this._menuTab+text;
                if (this._member.get_hasChildren())
                    PPSMA.ContextMenu.AddMenuOption(m, text, expand);
                else
                    PPSMA.ContextMenu.AddDisabledMenuOption(m, text);
                this._optionsAdded += 1;
            }
        }
    },
    ShowOnly: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_ShowOnly;
            if (indent) text = this._menuTab+text;
            if (!this._hierarchy.get_isSingleton())
                PPSMA.ContextMenu.AddMenuOption(m, text, fn);
            else
                PPSMA.ContextMenu.AddDisabledMenuOption(m, text);
            this._optionsAdded += 1;
        }     
    },
    Remove: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_Remove;
            if (indent) text = this._menuTab+text;
            if (!this._hierarchy.get_isSingleton())
                PPSMA.ContextMenu.AddMenuOption(m, text, fn);
            else
                PPSMA.ContextMenu.AddDisabledMenuOption(m, text);
            this._optionsAdded += 1;
        }
    },
    SelectItems: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_SelectItems;
            if (indent) text = this._menuTab+text;
            PPSMA.ContextMenu.AddMenuOption(m, text, fn);
            this._optionsAdded += 1;
        }
    },
    HideProperty: function(m,caption,fn,indent)
    {
        var text = caption;
        if (indent) text = this._menuTab+text;
        PPSMA.ContextMenu.AddMenuOption(m, text, fn);
        this._optionsAdded += 1;
    },
    ShowProperties: function(m,fn,indent)
    {
        var text = PPSMA.SR.OlapContextMenu_ShowProperties;
        if (indent) text = this._menuTab+text;
        PPSMA.ContextMenu.AddMenuOption(m, text, fn);
        this._optionsAdded += 1;
    },
    Pivot: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_Pivot;
            if (indent) text = this._menuTab+text;
            PPSMA.ContextMenu.AddMenuOption(m, text, fn);
            this._optionsAdded += 1;
        }
    },
    ShowHideInfo: function(m,fn,indent)
    {
        if (this._optionsAdded > 0)
        {
            PPSMA.ContextMenu.AddMenuSeparator(m);        
        }
    
        var text;
        if (this._olapViewContext.get_infoBarVisible())
        {
            text = PPSMA.SR.OlapContextMenu_HideInfo;
        }
        else
        {
            text = PPSMA.SR.OlapContextMenu_ShowInfo;
        }
        if (indent) text = this._menuTab+text;
        PPSMA.ContextMenu.AddMenuOption(m, text, fn, g_resFolder + "ViewInformation.gif");
        this._optionsAdded += 1;
    },
    ReportTypeSubMenu: function(m,ctxName,activeType)
    {
        if (this._canNavigate)
        {
            var sm = PPSMA.ContextMenu.CreateSubMenu(m,PPSMA.SR.OlapContextMenu_ReportType,
                g_resFolder + "BarChart.gif");
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_Grid, 
                ctxName + ".switchToGrid()", g_resFolder + "Grid.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.Grid));
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_BarChart, 
                ctxName + ".switchToBarChart()", g_resFolder + "BarChart.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.BarChart));
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_StackedBarChart, 
                ctxName + ".switchToStackedBarChart()", g_resFolder + "BarChartStacked.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.StackedBarChart));
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_Stacked100BarChart, 
                ctxName + ".switchTo100StackedBarChart()", g_resFolder + "BarChartStacked100.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.Stacked100BarChart));
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_LineChart, 
                ctxName + ".switchToLineChart()", g_resFolder + "LineChartNoMarker.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.LineChart));
            PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_ReportType_LineChartWithMarkers, 
                ctxName + ".switchToLineChartWithMarkers()", g_resFolder + "LineChart.gif", null,
                (activeType == PPSMA.ContextMenu.OlapReportType.LineChartWithMarkers));
            this._optionsAdded += 1;
        }
    },
    FormatReportSubMenu: function(m,indent)
    {
        var text = PPSMA.SR.OlapContextMenu_FormatReport;
        if (indent) text = this._menuTab+text;
        this._optionsAdded += 1;
        return PPSMA.ContextMenu.CreateSubMenu(m,text,g_resFolder + "FormatReport.gif");
    },
    HasAggregatedBackGroundHierarchies: function()
    {
        var results = this._olapViewContext.get_results();
        var filterHierarchies = results.get_filterHierarchies();
        if (filterHierarchies != null)
        {
            for (var i = 0; i < filterHierarchies.length; i++)
            {
                var filterHier = filterHierarchies[i];
                if (filterHier.get_isAggregated() == true)
                {
                    return true;
                }
            }
        }
        return false;
    },
    ShowDetails: function(m,fn,indent,enabled)
    {
        var text = PPSMA.SR.OlapContextMenu_ShowDetails;
        if (indent) text = this._menuTab+text;
        if (enabled == true)
            PPSMA.ContextMenu.AddMenuOption(m, text, fn);
        else
            PPSMA.ContextMenu.AddDisabledMenuOption(m, text, fn);
        this._optionsAdded += 1;
    },
    ShowProperties: function(m,fn,indent,enabled)
    {
        var text = PPSMA.SR.OlapContextMenu_ShowProperties;
        if (indent) text = this._menuTab+text;
        if (enabled == true)
            PPSMA.ContextMenu.AddMenuOption(m, text, fn);
        else
            PPSMA.ContextMenu.AddDisabledMenuOption(m, text, fn);
        this._optionsAdded += 1;
    },
    SwitchToOption: function(m,t,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = this.GetSwitchToText(t);
            if (indent) text = this._menuTab+text;
            PPSMA.ContextMenu.AddMenuOption(m, text, fn);
            this._optionsAdded += 1;
        }
    },
    AddDisabledOption: function(m,t,indent)
    {
        if (indent) t = this._menuTab+t;
        PPSMA.ContextMenu.AddDisabledMenuOption(m,t);
        this._optionsAdded += 1;
    },
    AddLoadingOption: function(sm)
    {
        PPSMA.ContextMenu.AddMenuOption(sm, PPSMA.SR.OlapContextMenu_DynamicLoadText);
    },
    get_optionsAdded: function()
    {
        return this._optionsAdded;
    },
    GetSwitchToText: function(s)
    {
        var truncAt = 20;
        var text = PPSMA.SR.OlapContextMenu_SwitchToType; //contains {member}
        if (s.length > truncAt) s = s.substr(0,truncAt-3)+"...";
        return text.replace("{member}", s);
    }
}
PPSMA.ContextMenu.DrillDownToHelper = function PPSMA_ContextMenu_DrillDownToHelper(drillFromMember, drillFromHierarchy, drillFromAxisId, olapViewContext)
{
    this._drillFromMember = drillFromMember;
    this._drillFromHierarchy = drillFromHierarchy;
    this._drillFromAxisId = drillFromAxisId;
    this._olapViewContext = olapViewContext;
    this._menuTab = "   ";
}
PPSMA.ContextMenu.DrillDownToHelper.prototype =
{
    populateSubMenuItems: function PPSMA_ContextMenu_DrillDownToHelper$populateSubMenuItems(sm, drillFromMember, drillFromHierarchy, menuClickHandler)
	{
	    var dims = this._olapViewContext.get_cubeMetadata();
	    if (dims != null)
	    {
	        for (var dimIndex in dims)
	        {
	            var dim = dims[dimIndex];   	     
	            
	            // skip measures
	            if (this._shouldShowDimensionInMenu(dim))
	            {	            
                    var udhiers = dim.get_userDefinedHierarchies();
                    var ahiers = dim.get_attributeHierarchies();
                                        
                    // create dimension sub menu
                    var dimSubMenu;
                    if (this._areHierarchyMenusEnabled(udhiers) || this._areHierarchyMenusEnabled(ahiers))
                    {                    
                        this._addDimensionSubMenu(sm, dim, udhiers, ahiers, menuClickHandler, true);
                    }
                    else
                    {
                        this._addDimensionSubMenu(sm, dim, udhiers, ahiers, menuClickHandler, false);
                    }
                }
	        }
        }
	},
	_addDimensionSubMenu: function PPSMA_ContextMenu_DrillDownToHelper$_addDimensionSubMenu(sm, dim, udhiers, ahiers, menuClickHandler, enabled)
	{	    
		var imgRes = this._getDimensionResPath(dim);
	
	    if (enabled)
	    {
            var singleHier = this._getNonCascadeDimensionHierarchy(sm, udhiers, ahiers);
	        if (singleHier)
	        {
	            this._addNonCascadeDimensionMenu(sm, singleHier, dim, menuClickHandler, imgRes, enabled);
	        }
	        else
	        {	    
                var dimSubMenu = PPSMA.ContextMenu.CreateSubMenu(sm, dim.get_caption(), imgRes);
                var needSep = this._addUserDefinedHierarchySubMenus(dimSubMenu, dim, udhiers, menuClickHandler);
                var pseudoAhierList = this._extractSingleLevelUDHierSubMenus(udhiers, dim, menuClickHandler);
                this._addAttributeHierarchySubMenus(dimSubMenu, ahiers, dim, menuClickHandler, needSep, pseudoAhierList);
            }                
        }
        else
        {            
            dimSubMenu = PPSMA.ContextMenu.AddDisabledMenuOption(sm, dim.get_caption(), "", imgRes);            
        }
	},	
	_getNonCascadeDimensionHierarchy: function PPSMA_ContextMenu_DrillDownToHelper$_getNonCascadeDimensionHierarchy(sm, udhiers, ahiers)
	{
        // count display levels to determine if Dimension menu cascade or not
        var lvlCt = 0;
        var singleHier = null;
        if ((udhiers) && (udhiers.length > 0))
        {
            for (var hierIndex in udhiers)
            {
                var hier = udhiers[hierIndex];
                var lvls = hier.get_level();
                {
                    if (lvls.length > 1)
                    {
                        lvlCt += lvls.length - 1;
                        singleHier = hier;
                    }
                }
            }
        }
        if (lvlCt <= 1)
        {
            if ((ahiers) && (ahiers.length > 0))
            {
                for (var hierIndex in ahiers)
                {
                    var hier = ahiers[hierIndex];
                    var lvls = hier.get_level();
                    {
                        if (lvls.length > 1)
                        {
                            lvlCt += lvls.length - 1;
                            singleHier = hier;
                        }
                    }
                }
            }
        }
        if (lvlCt > 1)
        {
            // return null if more than one displayable level exist
            singleHier = null;
        }
        
        return singleHier;
	},
	_addUserDefinedHierarchySubMenus: function PPSMA_ContextMenu_DrillDownToHelper$_addUserDefinedHierarchySubMenus(sm, dim, udhiers, menuClickHandler)
	{
        // create user defined hierarchy submenus, but only for ones that have multiple levels       
        var needSep = false; 
        if (udhiers != null)
        {
            var isEmptyMenu = true;
            for (var hierIndex in udhiers)
            {
                var hier = udhiers[hierIndex]; 
				if (this._shouldShowHierarchyInMenu(hier))
				{   
				    var hierBackgroundAggregate = this._isHierarchyBackgroundAggregate(hier);				             
					var hierDisabled = this._isHierarchyOnOppositeForegroundAxis(hier);

					// calc deepest level # to enable
					var disableDepth; 
    				if (hier.get_name() == this._drillFromHierarchy.get_name())
    				{
    					disableDepth = this._drillFromMember.get_levelNumber();
    				}
    				else
    				{
						var resHier = this._findHierarchyInQueryResults(hier);
						if (resHier == null)
						{
							disableDepth = 0;
						}
						else
						{
							disableDepth = resHier.get_deepestLevel();
						}
					}

					var lvls = hier.get_level();	
					if ((lvls != null) && (lvls.length > 2))
					{
					    if (dim.get_name() == this._drillFromHierarchy.get_dimension())
					    {
					        var drillFromHierName = this._drillFromHierarchy.get_name();
					        var lastDot = drillFromHierName.lastIndexOf(".");
					        var drillFromName = drillFromHierName.substring(lastDot+1,drillFromHierName.length);
					        var drillFromMemberLvlFullName = this._drillFromMember.get_levelName();
					        lastDot = drillFromMemberLvlFullName.lastIndexOf(".");
					        var drillFromMemberLvlName = drillFromMemberLvlFullName.substring(lastDot+1,drillFromMemberLvlFullName.length);
					        for (var lvlIndex = 1; lvlIndex < lvls.length; lvlIndex++)
					        {
					            var lvl = lvls[lvlIndex];
						        var lvlName = lvl.get_name();
						        var dot = lvlName.lastIndexOf(".");
						        var newLvlName = lvlName.substring(dot+1,lvlName.length);
						        if (newLvlName == drillFromMemberLvlName) 
						        {
						            disableDepth = lvlIndex;
						        }
					        }
					    }
						if (!isEmptyMenu)
						{
							PPSMA.ContextMenu.AddMenuSeparator(sm);
						}
						PPSMA.ContextMenu.AddDisabledMenuOption(sm, hier.get_caption());  
                
                        if (hierBackgroundAggregate)
                        {
						    this._addMultiItemsSubMenu(sm, hier, menuClickHandler);
                        }
                        else
                        {
						    // skip level 0 since that is a meaningless cross-drill
						    for (var lvlIndex = 1; lvlIndex < lvls.length; lvlIndex++)
						    {
							    var lvl = lvls[lvlIndex];
							    if ((hierDisabled) || (lvlIndex <= disableDepth))
							    {
								    this._addLevelSubMenu(sm, lvl, hier, menuClickHandler, false);
							    }            
							    else
							    {
								    this._addLevelSubMenu(sm, lvl, hier, menuClickHandler, true);
							    }            
						    }
						}
						needSep = true;                                
					}
                }
            }                                                
        }
        return needSep;
	},
    _extractSingleLevelUDHierSubMenus: function PPSMA_ContextMenu_DrillDownToHelper$_extractSingleLevelUDHierSubMenus(udhiers, dim, menuClickHandler)
    {
        var hierList = new Array();
        if (udhiers != null)
        {
            var imgRes = this._getAttributeResPath(dim);
            // run through user-defined hierarchies again, treating ones with single (non-root) levels as 
            // attribute hierarchies (to save menu real estate)
            for (var hierIndex in udhiers)
            {    	                    
                var hier = udhiers[hierIndex]; 
				if (this._shouldShowHierarchyInMenu(hier))
				{                                
					var lvls = hier.get_level();	                    

					if ((lvls != null) && (lvls.length == 2))
					{
						var drillToMemberName = this._getDrillToMemberName(hier);
						var fn = menuClickHandler + "('" + escape(hier.get_name()) + "', '" + escape(drillToMemberName) + "', '" + escape(lvls[1].get_name()) + "');"; 
						var item = new Object();
						item.caption = hier.get_caption();
						item.fn = fn;
						item.imgRes = imgRes;
						hierList[hierList.length] = item;
    				} 
				}
            }                                                
        }
        return hierList;
    },
    _addSingleLevelUDHierSubMenus:function PPSMA_ContextMenu_DrillDownToHelper$_addSingleLevelUDHierSubMenus(sm, needSep, hierList, nextCaption)
    {
        if (hierList.length == 0) return needSep;
        
        var sep = needSep;
        var i = 0;
        var removed = false;
        while (i < hierList.length && hierList[i] != null && (nextCaption == "" || hierList[i].caption < nextCaption))
        {
            if (sep)
            {
                PPSMA.ContextMenu.AddMenuSeparator(sm);
                sep = false;
            }
            PPSMA.ContextMenu.AddMenuOption(sm, hierList[i].caption, hierList[i].fn, hierList[i].imgRes);
            hierList[i] = null;
            removed = true;
            i++;
        }
        // Remove empty members;
        if (removed)
        {
            var count = 0;
            for (i = 0; i < hierList.length; i++)
            {
                if (hierList[i] != null)
                {
                    if (i != count) hierList[count] = hierList[i];
                    count++;
                }
            }
            hierList.length = count;
        }
        return sep;
    },
	_addAttributeHierarchySubMenus: function PPSMA_ContextMenu_DrillDownToHelper$_addAttributeHierarchySubMenus(sm, ahiers, dim, menuClickHandler, needSep, pseudoAhierList)
	{
	    var sep = needSep;
        // create real attribute hierarchy submenus
        if (ahiers != null)
        {
			var imgRes = this._getAttributeResPath(dim);
			
            for (var hierIndex in ahiers)
            {
                var hier = ahiers[hierIndex];
				if (this._shouldShowHierarchyInMenu(hier))
				{
					var lvls = hier.get_level();
					if (lvls.length > 1)
					{
					    // First put any single level user defined hierarchies in correct alphabetical order
					    sep = this._addSingleLevelUDHierSubMenus(sm, sep, pseudoAhierList, hier.get_caption());
					    
                        if (sep)
                        {
                            PPSMA.ContextMenu.AddMenuSeparator(sm);
                            sep = false;
                        }
						var drillToMemberName = this._getDrillToMemberName(hier);
						var fn = menuClickHandler + "('" + escape(hier.get_name()) + "', '" + escape(drillToMemberName) + "', '" + escape(lvls[1].get_name()) + "');"; 
						// if possible, get the hierarchy from the resultset
						var resHier = this._findHierarchyInQueryResults(hier);
						var hierDisabled = this._isHierarchyOnOppositeForegroundAxis(hier);		
						if ((hierDisabled) || ((resHier != null) && (resHier.get_deepestLevel() > 0)))
						{
							PPSMA.ContextMenu.AddDisabledMenuOption(sm, hier.get_caption(), "", imgRes);
						}
						else
						{
							PPSMA.ContextMenu.AddMenuOption(sm, hier.get_caption(), fn, imgRes);
						}
					}
             	}
                isEmptyMenu = false;
            }
        }
	    // Put any remaining single level user defined hierarchies in correct alphabetical order
	    sep = this._addSingleLevelUDHierSubMenus(sm, sep, pseudoAhierList, "");
	},
	_addNonCascadeDimensionMenu: function PPSMA_ContextMenu_DrillDownToHelper$_addNonCascadeDimensionMenu(sm, hier, dim, menuClickHandler, imgRes, enabled)
	{
        var drillToMemberName = this._getDrillToMemberName(hier);
        var level = hier.get_level()[1];  // skip first level
        var fn = menuClickHandler + "('" + escape(hier.get_name()) + "', '" + escape(drillToMemberName) + "', '" + escape(level.get_name()) + "');"; 
        if (enabled)
        {
            PPSMA.ContextMenu.AddMenuOption(sm, dim.get_caption(), fn, imgRes);    	            
        }
        else
        {
            PPSMA.ContextMenu.AddDisabledMenuOption(sm, dim.get_caption(), imgRes);    	                                                
        }	
	},
	_addLevelSubMenu: function PPSMA_ContextMenu_DrillDownToHelper$_addLevelSubMenu(sm, level, hier, menuClickHandler, enabled)
	{
        var drillToMemberName = this._getDrillToMemberName(hier);
        var fn = menuClickHandler + "('" + escape(hier.get_name()) + "', '" + escape(drillToMemberName) + "', '" + escape(level.get_name()) + "');"; 
        if (enabled)
        {
            PPSMA.ContextMenu.AddMenuOption(sm, this._menuTab + level.get_caption(), fn);    	            
        }
        else
        {
            PPSMA.ContextMenu.AddDisabledMenuOption(sm, this._menuTab + level.get_caption());    	                                                
        }	
	},
	_addMultiItemsSubMenu: function PPSMA_ContextMenu_DrillDownToHelper$_addMultiItemsSubMenu(sm, hier, menuClickHandler)
	{
        var fn = menuClickHandler + "('" + escape(hier.get_name()) + "', '', '');"; 
	    var text = PPSMA.SR.OlapContextMenu_MultipleSelections;
        PPSMA.ContextMenu.AddMenuOption(sm, this._menuTab + text, fn);    	            
	},
	_getDrillToMemberName: function PPSMA_ContextMenu_DrillDownToHelper$_getDrillToMemberName(hier)
	{
	    var mbrName;
        if (hier.get_name() == this._drillFromHierarchy.get_name())
        {
            mbrName = this._drillFromMember.get_name();
        }
        else
        {
	        mbrName = hier.get_name() + ".DefaultMember";	    
	        var mbrs = this._olapViewContext.get_results().get_filterMembers();
	        var hiers = this._olapViewContext.get_results().get_filterHierarchies();
	        if ((mbrs != null) && (hiers != null))
	        {
                for (var hierIndex in hiers)
                {
                    var h = hiers[hierIndex];
                    if (h.get_name() == hier.get_name())
                    {
                        mbrName = mbrs[hierIndex].get_name();
                        break;
                    }
                }
    	        
	        }
	    }
	    return mbrName;
	},
	_shouldShowDimensionInMenu: function PPSMA_ContextMenu_DrillDownToHelper$_shouldShowDimensionInMenu(dim)
	{
		res = false;
		if (dim != null)
		{
			if (dim.get_dimensionType() != 2) // 2 = measures
			{		
				var udhiers = dim.get_userDefinedHierarchies();
				for (var hierIndex in udhiers)
				{    	                    
					var hier = udhiers[hierIndex];
					if (this._shouldShowHierarchyInMenu(hier))
					{
						res = true;
						break;
					}
				}
				if (!res)
				{
					var ahiers = dim.get_attributeHierarchies();
					for (var hierIndex in ahiers)
					{    	                    
						var hier = ahiers[hierIndex];
						if (this._shouldShowHierarchyInMenu(hier))
						{
							res = true;
							break;
						}
					}
				}
			}
		}
		return res;
	},
	_shouldShowHierarchyInMenu: function PPSMA_ContextMenu_DrillDownToHelper$_shouldShowHierarchyInMenu(hier)
	{
		// don't show flat hiers in the menu
		return !this._isHierarchyFlat(hier); 
	},
	_isHierarchyFlat: function PPSMA_ContextMenu_DrillDownToHelper$_isHierarchyFlat(hier)
	{
		var res = true;
		if (hier != null)
		{
			var lvls = hier.get_level();
			if ((lvls != null) && (lvls.length > 1))
			{
				res = false;  // not flat
			}
		}
		return res;
	},
	_areHierarchyMenusEnabled: function PPSMA_ContextMenu_DrillDownToHelper$_areHierarchyMenusEnabled(hiers)
	{
		// returns false if all hierarchies are on the opposite foreground axis
	    var res = false;	    
	    if (hiers != null)
	    {
            for (var hierIndex in hiers)
            {    	                    
                var hier = hiers[hierIndex];
                if (!this._isHierarchyOnOppositeForegroundAxis(hier))
                {
					res = true;
					break;
                }                
	        }
	    }
	    return res;		
	},	
	_isHierarchyOnOppositeForegroundAxis: function PPSMA_ContextMenu_DrillDownToHelper$_isHierarchyOnOppositeForegroundAxis(hier)
	{
		// hierarchy and all levels are disabled if the hierarchy is already on the opposite foreground axis
	    var res = false;	    
	    if (hier != null)
	    {
			if (this._drillFromAxisId == 'C')
			{
				res = (this._findHierarchyOnRows(hier) != null);                
			}
			else
			if (this._drillFromAxisId == 'R')
			{
				res = (this._findHierarchyOnColumns(hier) != null);
			}
	    }
	    return res;		
	},	
	_isHierarchyBackgroundAggregate: function PPSMA_ContextMenu_DrillDownToHelper$_isHierarchyBackgroundAggregate(hier)
	{
	    var res = false;
	    if (hier != null)
	    {
	        var bgHier = this._findHierarchyOnBackground(hier);
	        if (bgHier != null)
	        {
	            res = bgHier.get_isAggregated();
	        }
	    }
        return res;	    
	},
     _findHierarchyOnRows: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyOnRows(hierarchy)
    {
        var res = null;
        if (this._olapViewContext != null)
        {
            if (!res)
            {
                var rowHiers = this._olapViewContext.get_results().get_rowHierarchies();
                for (var rowHierIndex in rowHiers)
                {
                    var hier = rowHiers[rowHierIndex];
                    if (hier.get_name() == hierarchy.get_name())
                    {
                        res = hier;
                        break;
                    }
                }
            }
        }
        return res;
    },
     _findHierarchyOnColumns: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyOnRows(hierarchy)
    {
        var res = null;
        if (this._olapViewContext != null)
        {
            if (!res)
            {
                var colHiers = this._olapViewContext.get_results().get_columnHierarchies();
                for (var colHierIndex in colHiers)
                {
                    var hier = colHiers[colHierIndex];
                    if (hier.get_name() == hierarchy.get_name())
                    {
                        res = hier;
                        break;
                    }
                }
            }
        }
        return res;
    },
     _findHierarchyOnBackground: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyOnBackground(hierarchy)
    {
        var res = null;
        if (this._olapViewContext != null)
        {
            if (!res)
            {
                var bgHiers = this._olapViewContext.get_results().get_filterHierarchies();
                for (var bgHierIndex in bgHiers)
                {
                    var hier = bgHiers[bgHierIndex];
                    if (hier.get_name() == hierarchy.get_name())
                    {
                        res = hier;
                        break;
                    }
                }
            }
        }
        return res;
    },    
    _findHierarchyInQueryResults: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyInQueryResults(hier)
	{
		var resHier = this._findHierarchyOnForeground(hier);
		if (resHier == null)
		{
			resHier = this._findHierarchyOnBackground(hier);
		}
		return resHier;
	},    
    _findHierarchyOnForeground: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyOnForeground(hier)
    {
        var resHier = null;
        if (this._olapViewContext != null)
        {
            if (resHier == null)
            {
            	resHier = this._findHierarchyOnRows(hier);
            }
            if (resHier == null)
            {
            	resHier = this._findHierarchyOnColumns(hier);
            }
        }
        return resHier;
    },
    _findHierarchyOnBackground: function PPSMA_ContextMenu_DrillDownToHelper$_findHierarchyOnBackground(hier)
    {
        var resHier = null;
        if (this._olapViewContext != null)
        {
            var bgHiers = this._olapViewContext.get_results().get_filterHierarchies();
            for (var bgHierIndex in bgHiers)
            {
                var rh = bgHiers[bgHierIndex];
                if (rh.get_name() == hier.get_name())
                {
                    resHier = rh;
                    break;
                }
            }
        }
        return resHier;
    },
    _getAttributeResPath: function PPSMA_ContextMenu_DrillDownToHelper$_getAttributeResPath(dim)
    {
    	var imgRes;
		if (dim.get_dimensionType() == 1)  // 1 = time dim
		{
			imgRes = g_resFolder + "AttributeTime.gif";
		}
		else
		{             
			imgRes = g_resFolder + "Attribute.gif";
		}
		return imgRes
	},
    _getDimensionResPath: function PPSMA_ContextMenu_DrillDownToHelper$_getDimensionResPath(dim)
    {
    	var imgRes;
		if (dim.get_dimensionType() == 1)  // 1 = time dim
		{
			imgRes = g_resFolder + "DimensionTime.gif";
		}
		else
		{             
			imgRes = g_resFolder + "Dimension.gif";
		}
		return imgRes
	},	
   DrillDown: function(m,fn,indent)
    {
        if (this._canNavigate)
        {
            var text = PPSMA.SR.OlapContextMenu_DrillDown;
            if (indent) text = this._menuTab+text;
            if (this._member.get_hasChildren())
                PPSMA.ContextMenu.AddMenuOption(m, text, fn, g_resFolder + "DrillDown.gif");
            else
                PPSMA.ContextMenu.AddDisabledMenuOption(m, text, "", g_resFolder + "DrillDownD.gif");                    
        }
    }
}
PPSMA.ContextMenu.DetailsHelper = function PPSMA_ContextMenu_DetailsHelper(olapViewContext,olapCtxName,rIndex,cIndex,resultTableIndex)
{
    this._olapViewContext = olapViewContext;
    this._olapCtxName = olapCtxName;
    this._rowIndex = rIndex;
    this._colIndex = cIndex;
    this._resultTableIndex = resultTableIndex;
}
PPSMA.ContextMenu.DetailsHelper.prototype =
{
    showDetails: function PPSMA_ContextMenu_DetailsHelper$showDetails()
    {  
        var windowName = "DTDWindow";
        var winRef = this.OpenPopUpWindow("", 800, 400, ",resizable,scrollbars", windowName);
        if (winRef)
        {
            this.createThrobber(winRef);       
            var tupleXml = this.getCellTupleXml();      
            this.createShowDetailsForm(windowName, this._olapViewContext.get_reportId(), tupleXml, this._resultTableIndex);
            var formRef = document.getElementById("drillThroughFormID");      
            if (formRef != null) formRef.submit();
            this.animateThrobber(winRef);
        }
    },    
    OpenPopUpWindow: function PPSMA_ContextMenu_DetailsHelper$OpenPopUpWindow(url, wW, wH, args, wName)
    {
        var wX = parseInt((screen.availWidth - wW) / 2);
        var wY = parseInt((screen.availHeight - wH) / 2);
        if (typeof(wName) == "undefined") wName = RandomInt();            
        var winRef = window.open(url, wName, "left="+ wX +",top=" + wY + ",height=" + wH + ",width=" + wW + args);
        if (winRef != null) winRef.focus();
        else alert(PPSMA.SR.OlapContextMenu_PopupWarning);
        return winRef;
    },
    createShowDetailsForm: function PPSMA_ContextMenu_DetailsHelper$createShowDetailsForm(windowName, reportId, tupleXml, resultTableIndex)
    {
        var path;      
        if (typeof(g_resFolder) == "undefined")
            path = "DrillThrough.aspx";
        else
            path = g_resFolder + "DrillThrough.aspx";
        
        var formElem = document.getElementById("drillThroughFormID");         
        if (formElem == null)
        {
            formElem = document.createElement("form");
            formElem.setAttribute("id", "drillThroughFormID");
            formElem.setAttribute("target", windowName);
            formElem.setAttribute("action", path);
            formElem.setAttribute("method", "post");
            formElem.setAttribute("name", "drillThroughForm");
            document.documentElement.appendChild(formElem);
            
            var inputReportElem = document.createElement("input");
            inputReportElem.setAttribute("id", "reportId");
            inputReportElem.setAttribute("type", "hidden");
            inputReportElem.setAttribute("name", "reportId");
            inputReportElem.setAttribute("value", reportId);
            formElem.appendChild(inputReportElem);
            
            var inputRowTupleElem = document.createElement("input");
            inputRowTupleElem.setAttribute("id", "tupleXmlId");
            inputRowTupleElem.setAttribute("type", "hidden");
            inputRowTupleElem.setAttribute("name", "tuple");
            inputRowTupleElem.setAttribute("value", tupleXml);
            formElem.appendChild(inputRowTupleElem);
           
            var inputResultTableIndexElem = document.createElement("input");
            inputResultTableIndexElem.setAttribute("id", "resultTableIndexId");
            inputResultTableIndexElem.setAttribute("type", "hidden");
            inputResultTableIndexElem.setAttribute("name", "resultTableIndex");
            inputResultTableIndexElem.setAttribute("value", resultTableIndex);
            formElem.appendChild(inputResultTableIndexElem);
                          
            var inputPageElem = document.createElement("input");
            inputPageElem.setAttribute("id", "pageId");
            inputPageElem.setAttribute("type", "hidden");
            inputPageElem.setAttribute("name", "page");
            inputPageElem.setAttribute("value", "1");
            formElem.appendChild(inputPageElem);
            
            var inputTypeElem = document.createElement("input");
            inputTypeElem.setAttribute("id", "typeId");
            inputTypeElem.setAttribute("type", "hidden");
            inputTypeElem.setAttribute("name", "isScorecard");
            inputTypeElem.setAttribute("value", "false");
            formElem.appendChild(inputTypeElem);
        }
        else
        {
            var inputReportElem = document.getElementById("reportId"); 
            inputReportElem.setAttribute("value", reportId);
            
            var inputRowTupleElem = document.getElementById("tupleXmlId"); 
            inputRowTupleElem.setAttribute("value", tupleXml);
            
            var inputResultTableIndexElem = document.getElementById("resultTableIndexId"); 
            inputResultTableIndexElem.setAttribute("value", resultTableIndex);
                           
            var inputTypeElem = document.getElementById("typeId"); 
            inputTypeElem.setAttribute("value", "false");
        }
    },
    
    createThrobber: function PPSMA_ContextMenu_DetailsHelper$createThrobber(winRef)
    {
        var documentObj = winRef.document;
		var resPath = this._olapViewContext.get_resourcePath();
		var imgId = "Img" + this._olapCtxName; 
		var imgPath = resPath + "ppsd-throbber.gif";
        documentObj.open();
		documentObj.write("<html><head>\n");
		documentObj.write("</head><body>\n");
		documentObj.write("<div style=\"width:100%;height:152px;\">&nbsp;</div>\n");
		documentObj.write("<div style=\"width:100%;text-align:center;\" >\n");
		documentObj.write("<img id=\"" + imgId + "\" src=\"" + imgPath + "\"/>\n");
		documentObj.write("</div>\n");
		documentObj.write("</body></html>");
		documentObj.close();
    },
    animateThrobber: function PPSMA_ContextMenu_DetailsHelper$animateThrobber(winRef)
    {
        // By reselecting the image, we cause it to reanimate.
		var imgId = "Img" + this._olapCtxName; 
        var imgRef = winRef.document.getElementById(imgId);
        imgRef.src = imgRef.src;
    },
    getCellTupleXml: function PPSMA_ContextMenu_DetailsHelper$getCellTupleXml()
    {
        var xdoc = new ActiveXObject("Microsoft.XMLDOM");
        var results = this._olapViewContext.get_results();
        var rowMembers = results.get_rowMembers();
        var columnMembers = results.get_columnMembers();
        var filterMembers = results.get_filterMembers();
        xdoc.async = false;
        xdoc.documentElement = xdoc.createElement("_dd");
        var rowMembersElem = xdoc.createElement("RowMembers");
        var columnMembersElem = xdoc.createElement("ColumnMembers");
        var backgroundMembersElem = xdoc.createElement("BackgroundMembers");
        xdoc.documentElement.appendChild(rowMembersElem);
        xdoc.documentElement.appendChild(columnMembersElem);
        xdoc.documentElement.appendChild(backgroundMembersElem);
        if (rowMembers != null)
        {
            for (var i = 0; i < rowMembers[this._rowIndex].length; i++)
            {
                var row = rowMembers[this._rowIndex][i];
                var rowElem = xdoc.createElement("Row");
                rowElem.setAttribute("name", row.get_name());
                rowElem.setAttribute("caption", row.get_caption());
                rowMembersElem.appendChild(rowElem);
            }   
        }  
        if (columnMembers != null)
        {
            for (var i = 0; i < columnMembers[this._colIndex].length; i++)
            {
                var column = columnMembers[this._colIndex][i];
                var columnElem = xdoc.createElement("Column");
                columnElem.setAttribute("name", column.get_name());
                columnElem.setAttribute("caption", column.get_caption());
                columnMembersElem.appendChild(columnElem);
            }
        }
        if (filterMembers != null)
        {
            for (var i = 0; i < filterMembers.length; i++)
            {
                var filter = filterMembers[i];
                var filterElem = xdoc.createElement("Filter");
                filterElem.setAttribute("name", filter.get_name());
                filterElem.setAttribute("caption", filter.get_caption());
                backgroundMembersElem.appendChild(filterElem);
            }
        }  
        return xdoc.documentElement.xml;  
    }
}

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();