var calendarScript = false;
var advancedDrillScript = false;
var adminOptionsScript = false;
var columnWidthsGGScript = false;
var colHandlesSetScript = false;
var outlineModeGGScript = false;
var lockSetScript = false;
var formatEditorScript = false;
var filterScript = false;
var promptFunctionsScript = false;
var menuScript = false;
var contextMenuManagerScript = false;
var contextMenuScript = false;
var incrementalFetchCheckBoxesScript = false;
var executionEventID = '';

var bFirstMetric = false;
var sURL = '';
var bDesignMode = false;
var lIndex = 0;
var sMsgID = '';
var sView = '';
var bAdvancedEdit = false;
var flg_RTitle = 1;
var flg_QLinks = 2;
var flg_FTBar = 4;
var flg_Filt = 8;
var flg_PAxis = 16;
var flg_RTBar = 32;
var flg_SRTEditor = 64;
var flg_DRLEditor = 128;
var flg_FSELEditor = 256;
var flg_FRMEditor = 512;
var flg_FMATEditor = 1024;
var flg_SUBEditor = 2058;
var flg_Email = 4096;
var flg_Send = 8192;
var flg_ObjBr = 16384;
var flg_Grid = 32768;
var flg_IncFetch = 65536;

var aEditorButton = new Array();
aEditorButton[1] = '';
aEditorButton[2] = 0;

var aTemplateElements = new Array();
var lPropertyAlias = 0;
var lPropertyKey = 0;
var lPropertyType = 0;
var lPropertyDerivedMetric = 0;
var lPropertyFormula = 0;
var lPropertyPosition = 0;
var sNewMetric = '';
var DssXmlTemplateMetrics = '';
var logClientStopTimer = false;
var logClient = false;
var sTreeName = 'tree1';

//prompt anchor
var currentPin = '-1';


//**DHTMLJSPAPI

var initializeCalls = "";

//**DHTMLAPI

var bIsIE4 = (document.all) ? true : false;     // IE 4+
var bIsW3C = (document.getElementById && !bIsIE4) ? true : false;       // N6
var bIsNN4 = (document.layers) ? true : false;  // NC4

// Mouse screen coordinates.
var lMouseX = 0;
var lMouseY = 0;

// bIsDHTML capable browser for degradability
var bIsDHTML = (bIsIE4 || bIsW3C || bIsNN4) ? true : false;

var currentModalEditor="";


//This is done to support the insertAdjacentElement, insertAdjacentHTML and insertAdjacentText calls in netscape browsers
if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){

    HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
    {
        switch (where){
        case 'beforeBegin':
            this.parentNode.insertBefore(parsedNode,this)
            break;
        case 'afterBegin':
            this.insertBefore(parsedNode,this.firstChild);
            break;
        case 'beforeEnd':
            this.appendChild(parsedNode);
            break;
        case 'afterEnd':
            if (this.nextSibling)
              this.parentNode.insertBefore(parsedNode,this.nextSibling);
            else this.parentNode.appendChild(parsedNode);
              break;
        }
    }

    HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr)
    {
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML = r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where,parsedHTML)
    }


    HTMLElement.prototype.insertAdjacentText = function(where,txtStr)
    {
        var parsedText = document.createTextNode(txtStr)
        this.insertAdjacentElement(where,parsedText)
    }

}

//**DHTMLAPI

function getObj(vObject) {
//*********************************************************************************************
//Purpose: Return an object reference
//Inputs:  vObject - object name or object reference
//Outputs: object reference.
//*********************************************************************************************

    if (typeof vObject == 'string') {
        if (bIsIE4)
            return eval("document.all." + vObject);
        else if (bIsW3C)
            return document.getElementById(vObject);
        else
            if (document.layers[vObject])
                return document.layers[vObject];
            else
                return eval("document." + vObject);
    }
    else {
        return vObject;
    }
}

function getObjects(vObject) {
//*********************************************************************************************
//Purpose: Return an object reference
//Inputs:  vObject - object name or object reference
//Outputs: object reference.
//*********************************************************************************************

    if (typeof vObject == 'string') {
        if (bIsIE4)
            return eval("document.all." + vObject);
        else if (bIsW3C)
            return document.getElementsByName(vObject);
        else
            if (document.layers[vObject])
                return document.layers[vObject];
            else
                return eval("document." + vObject);
    }
    else {
        return vObject;
    }
}

function getObjectsbyTag(vObject) {
//*********************************************************************************************
//Purpose: Return an object reference
//Inputs:  vObject - object name or object reference
//Outputs: object reference.
//*********************************************************************************************

    if (typeof vObject == 'string') {
        if (bIsIE4)
                return eval("document.all.tags('" + vObject+ "')");
        else if (bIsW3C)
            return document.getElementsByTagName(vObject);
    }
    else {
        return vObject;
    }
}

function getObjStyle(vObject) {
//*********************************************************************************************
//Purpose: Return a reference to an objects style property
//Inputs:  vObject - object name or reference
//Outputs: style reference.
//*********************************************************************************************
    if (bIsIE4 || bIsW3C)
        return getObj(vObject).style;
    else
        return getObj(vObject);
}

function getClientWidth() {
//*********************************************************************************************
//Purpose: Return the ClientWidth
//Inputs:  None.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        if (bIsIE4) {
            return document.body.clientWidth;
        } // else is NN4 && W3C
        return innerWidth;
    }
    return 0;
}

function getClientHeight() {
//*********************************************************************************************
//Purpose: Return the ClientHeight
//Inputs:  None.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        if (bIsIE4) {
            return document.body.clientHeight;
        } // else bIsNN4 && W3C
        return innerHeight;
    }
    return 0;
}

function getDocumentWidth() {
//*********************************************************************************************
//Purpose: Return the DocumentWidth
//Inputs:  None.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        if (bIsIE4) {
            return document.body.scrollWidth;
        } // else bIsNN4 && W3C
        return document.width;
    }
    return 0;
}

function getDocumentHeight() {
//*********************************************************************************************
//Purpose: Return the DocumentHeight
//Inputs:  None.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        if (bIsIE4) {
            return document.body.scrollHeight;
        } // else bIsNN4 && W3C
        return document.height;
    }
    return 0;
}

function getObjWidth(vObject) {
//*********************************************************************************************
//Purpose: Return the computed width of an object
//Inputs:  Object name or object reference..
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        if (bIsIE4) {
            return obj.offsetWidth;
        } else if (bIsW3C) {
            return parseInt(document.defaultView.getComputedStyle(obj, "").getPropertyValue("width"));
        } else  {   // else bIsNN4
            return obj.clip.width;
        }
    }
    return 0;
}

function getObjHeight(vObject) {
//*********************************************************************************************
//Purpose: Return the computed height of an object
//Inputs:  Object name or object reference..
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        if (bIsIE4) {
            return obj.offsetHeight;
        } else if (bIsW3C) {
            return parseInt(document.defaultView.getComputedStyle(obj, "").getPropertyValue("height"));
        } else {    // else is NN4
            return obj.clip.height;
        }
    }
    return 0;
}

function getObjTop(vObject) {
//*********************************************************************************************
//Purpose: Return the computed top value of an object
//Inputs:  Object name or object reference.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        if (bIsIE4) {
            return obj.style.pixelTop;
        } else if (bIsW3C) {
            return parseInt(document.defaultView.getComputedStyle(obj, "").getPropertyValue("top"));
        } else {            // else is NN4
            return obj.top;
        }
    }
    return 0;
}

function getObjSumTop(vObject) {
//*********************************************************************************************
//Purpose: Return the computed top value of an object, regardless of
//              element containers.  NOTE: This is really only needed for
//              IE as N6 does this automatically and NN4X doesn't do it at all.
//Inputs:  Object name or object reference.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        var lTop = 0;
        // GBCHANGE: support for NN7
        if ((bIsIE4) || (!bIsIE4 && bIsW3C)) {
            for (var i=0; (obj); i++) {
                lTop += obj.offsetTop;
                obj = obj.offsetParent;
            }
            return lTop;
        } else {
            return getObjTop(vObject);
        }
    }
    return 0;
}

function getObjSumTopScrolled(vObject) {
//Purpose: same as getObjSumTop above, but subtract out scrolling.

if (bIsDHTML) {
    var obj = getObj(vObject);
    var lTop = 0;
    //GBCHANGE: support for NN7
    //if (bIsIE4) {
        if ((bIsIE4) || (!bIsIE4 && bIsW3C)) {
            for (var i=0; (obj); i++) {
                lTop += obj.offsetTop;
                if (obj.offsetParent && obj.offsetParent.scrollTop)
                    lTop -= obj.offsetParent.scrollTop;
                obj = obj.offsetParent;
            }
            return parseInt(lTop);
        } else {
            return getObjTop(vObject);
        }
    }
    return 0;
}

function getObjLeft(vObject) {
//*********************************************************************************************
//Purpose: Return the computed left value of an object
//Inputs:  Object name or object reference.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        if (bIsIE4) {
            return obj.style.pixelLeft;
        } else if (bIsW3C) {
            return parseInt(document.defaultView.getComputedStyle(obj, "").getPropertyValue("left"));
        } else {    // else is NN4
            return obj.left;
        }
    }
    return 0;
}

function getObjSumLeft(vObject) {
//*********************************************************************************************
//Purpose: Return the computed left value of an object, regardless of
//              element containers.  NOTE: This is really only needed for
//              IE as N6 does this automatically and NN4X doesn't do it at all.
//Inputs:  Object name or object reference.
//Outputs: integer.
//*********************************************************************************************
    if (bIsDHTML) {
        var obj = getObj(vObject);
        var lLeft = 0;
        // GBCHANGE: support for NN7
        if ((bIsIE4) || (!bIsIE4 && bIsW3C)) {
            for (var i=0; (obj); i++) {
                lLeft += obj.offsetLeft;
                obj = obj.offsetParent;
            }
            return lLeft;
        } else {    // else is NN4
            return getObjLeft(vObject);
        }
    }
    return 0;
}

function getObjSumLeftScrolled(vObject) {
    if (bIsDHTML) {
        var obj = getObj(vObject);
        var lLeft = 0;
        //GBCHANGE: support for NN7
        //if (bIsIE4) {
        if ((bIsIE4) || (!bIsIE4 && bIsW3C)) {
            for (var i=0; (obj); i++) {
                lLeft += obj.offsetLeft;
                if (obj.offsetParent && obj.offsetParent.scrollLeft)
                    lLeft -= obj.offsetParent.scrollLeft;
                obj = obj.offsetParent;
            }
            return parseInt(lLeft);
        } else {    // else is NN4
            return getObjLeft(vObject);
        }
    }
    return 0;
}
