// $Revision: 1.268 $
var ibigbl_js_Revision = "$Revision: 1.268 $";
ibigblInitTables.INCLUDETABLE = 0;
ibigblInitTables.CSSTABLE = 1;
ibigblInitTables.DIVTABLE = 2;
ibigblInitTables.ONLOADTABLE = 3;

ibigblInitTables.ThisFileNameRoot = "/ibi/html/js/ibigbl.js";
ibigblInitTables.DirRoot = "/ibi_html/javaassist";
ibigblInitTables.defaultWebApp = "/ibi_apps";
ibigblInitTables.defaultRCasterWebApp = "/rcaster";
ibigblInitTables.webAppVarName = "IBIF_webapp";
ibigblInitTables.defaultCgiPath = "/ibi_apps/";
ibigblInitTables.defaultCgiName = "WFServlet";
ibigblInitTables.defaultAuthentication = "EDA";
ibigblInitTables.defaultServletPath = "/ibi_apps/WFServlet";

// make pc version with '\' replaced for '/'
ibigblInitTables.PC_DirRoot = new String(ibigblInitTables.DirRoot).replace(/\//g,"\\");

Array.prototype.addElement = function Array_addElement(ele)
{
    this[this.length] = ele;
};

Array.prototype.addElementAt = function Array_addElementAt(index,ele)
{
    if(index < 0 || index >= this.length)
        return;
    this.splice(index,0,ele);
};

Array.prototype.removeElementAt = function Array_removeElementAt(index)
{
    if(index < 0 || index >= this.length)
        return;
    this.splice(index,1);
};

Array.prototype.elementAt = function Array_elementAt(index)
{
    if(index < 0 || index >= this.length)
        return null;
    return this[index];
};

Array.prototype.peek = function Array_peek()
{
    if(this.length == 0)
        return null;
    return this[this.length-1];
};

if(Array.prototype.pop == null)
{
    Array.prototype.pop = function Array_pop()
    {
        if(this.length == 0)
            return null;
        var node = this[this.length-1];
        --this.length;
        return node;
    };
}

if(Array.prototype.push == null)
{
    Array.prototype.push = function Array_push(node)
    {
        this[this.length] = node;
    };
}

Array.prototype.addFieldToArray=function addFieldToArray(option,value) 
{
    var x = {};
    x.field=option;
    x.data=value;
    this.addElement(x);
};

function debuggerIsIncluded()
{
    return ibigblInitInfo.oktodebug;
}

// can be set to install dir for pc
function mapIbiUrl(url)
{
    return ibigblInitInfo.mapurl(url);
}
//////////////////////////////////////////////
function FULLmapIbiUrl(url)
// The line below is very funny.
// When we are running thru the Open Portal Services gateway application,
// then that changes all the strings filtered thru the gateway
// to use a different webserver.
// this may look silly but it is a simple fix.
// Dmitri /Peter  May 4, 2006
// moved to here by pk from olapctl

  {
  var baseUrl = "";
  if(! "/ibi_html/This_String_maybe_changed_by_the_gateway".startsWith("http"))
       baseUrl = document.location.protocol + "//" + document.location.host;
  return baseUrl + mapIbiUrl(url);
 }
//////////////////////////////////////////////////

ibigblInitTables.prototype.addBaseDir = function ibigblInitTables_addBaseDir(url)
{
    return  this.ibigblFilePrefix + url + this.ibigblFileSuffix ;
};

ibigblInitTables.prototype.mapurl = function ibigblInitTables_mapurl(url)
{
    var newurl = url;
    if(url.startsWith(ibigblInitTables.DirRoot))
    {
        newurl = url.substr(ibigblInitTables.DirRoot.length,url.length - ibigblInitTables.DirRoot.length);
        newurl = this.addBaseDir(newurl);
    }
    else if(url.startsWith(ibigblInitTables.PC_DirRoot))
    {
        newurl = url.substr(ibigblInitTables.PC_DirRoot.length,url.length - ibigblInitTables.PC_DirRoot.length);
        newurl = this.addBaseDir(newurl);
    }
    return newurl;
};

ibigblInitTables.prototype.addTranslatedJS = function ibigblInitTables_addTranslatedJS(name,doc)
{
    var url = this.formIntlFileName(name);
    var tag = formJsIncludeTag("JAVASCRIPT",url);
    doc.write(tag);
};

ibigblInitTables.baseNameOfUri = function ibigblInitTables_baseNameOfUri(name)
{
    var j = name.lastIndexOf("/");
    if(j != -1)
        name = name.substring(++j,name.length);
    j = name.indexOf(".");
    if(j != -1)
        name = name.substring(0,j);
    return name;
};

ibigblInitTables.isExtendedOption = function ibigblInitTables_isExtendedOption(str)
{
    if(str.indexOf(":") >= 0 || str.indexOf("/") >= 0)
        return true;
    if(str.endsWith(".js"))
        return true;
	if(str.endsWith(".vbs"))
        return true;
    return false;
};

ibigblInitTables.prototype.testOptions = function ibigblInitTables_testOptions()
{
    var args = arguments;
    for(var i = 0 ; i < args.length  ; ++i)
        for(var j = 0 ; j < this.ibiOptions.length ; ++j)
            if(args[i] == this.ibiOptions[j])
                return true;
    return false;
};

ibigblInitTables.prototype.proxyvar = function ibigblInitTables_proxyvar()
{
    var rtn = getWindowVar("IBIURL_proxyvarname","IBIURL_proxyvarname");
    return rtn;
};

ibigblInitTables.prototype.proxy = function ibigblInitTables_proxy()
{
    var rtn = getWindowVar("IBIURL_proxy",null);
    return rtn;
};

ibigblInitTables.prototype.formTranslatedFileName = function ibigblInitTablesformTranslatedFileName(prefix,dir,name)
{
    if(this.DialogFilePrefix != null)
        dir =  "/" + this.DialogFilePrefix;
    var filename = prefix + dir + name;
    return filename;
};

ibigblInitTables.prototype.formIntlFileName = function ibigblInitTables_formIntlFileName(name)
{
    return this.formTranslatedFileName(this.ibigblFilePrefix,"/intl/EN/",name);
};

ibigblInitTables.prototype.ibigblConstructTable = function ibigblInitTables_ibigblConstructTable(which)
{
    var tbl = [];
    var checktable = [];
    // var number of options
    function ibigblInitInsert(checktable_param,b,c)
    {
		if(typeof checktable_param[b] != "undefined" &&
		   checktable_param[b] == b) // is it in table already?
			{
//			alert(b);
			return;
			}
        tbl.addElement(new ibiStringString(b,c));
		checktable_param[b] = b;
    }

    switch(which)
    {
        case ibigblInitTables.INCLUDETABLE : 
            if(this.testOptions("debug"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibijsdbg.js"),"JAVASCRIPT");

            if(this.testOptions("ibicookie"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibicookie.js"),"JAVASCRIPT");

            if(this.testOptions("ibirls") || this.testOptions("ibirls2") || this.testOptions("ibirls3"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibicookie.js"),"JAVASCRIPT");

            if(this.testOptions("maintainTree"))
				{
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
				}

            if(this.testOptions("ibihttpxml","autosort","olappanebase","toc","maintainTree","esrireport")) 
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibihttpxml.js"),"JAVASCRIPT");

            if(this.testOptions("ibirls2","ibirls3","olap","dddisplay","ddreport","toc","ibilangtrans","rassist","gassist","olapdrill","maintainTree","mntFormValidate","autosort","noicons"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibihash.js"),"JAVASCRIPT");

            if(this.testOptions("ibilangtrans","ddreport","dddisplay","olapdrill","olap","cgipath","esrireport","autosort","noicons"))
                ibigblInitInsert(checktable,this.addBaseDir("/cgipath.js"),"JAVASCRIPT");

            if(this.testOptions("ibilangtrans"))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/intl/ibimultilanguage.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibilangtrans.js"),"JAVASCRIPT");
            }

            if(this.testOptions("toc"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/toc.js")     ,"JAVASCRIPT");

            if(this.testOptions("dyncalendar") && !(this.testOptions("ibirls") || this.testOptions("ibirls2") || this.testOptions("ibirls3")))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/browserSniffer.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/dynCalendar.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/calendarInit.js")     ,"JAVASCRIPT");
            }
			
			if(this.testOptions("dyncalendar") && (this.testOptions("ibirls") || this.testOptions("ibirls2") || this.testOptions("ibirls3")))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/browserSniffer.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/rltdynCalendar.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/rltcalendarInit.js")     ,"JAVASCRIPT");
            }
			if(this.testOptions("ibigmap"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibigmap.js")     ,"JAVASCRIPT");
                
            if(this.testOptions("rltdyncalendar"))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/browserSniffer.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/rltdynCalendar.js")     ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/rltcalendarInit.js")     ,"JAVASCRIPT");
            }

            if(this.testOptions("toc"))
                ibigblInitInsert(checktable,this.formIntlFileName("toctrans.js"),"JAVASCRIPT");

            if(this.testOptions("autosort","toc","dddisplay","olapdrill","olappanebase","maintainTree","ibitree"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/ibitree.js") ,"JAVASCRIPT");

            if(this.testOptions("ddreport","dddisplay"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/VarEntry.js")    ,"JAVASCRIPT");

            if(this.testOptions("dddisplay","ddreport"))
                ibigblInitInsert(checktable,this.formIntlFileName("VarEntrytrans.js"),"JAVASCRIPT");

            if(this.testOptions("ddreport"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/dragdrill.js")   ,"JAVASCRIPT");

            if( this.testOptions("esrireport") )
			{
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/esri/esri_reportViewer.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/esri/esri_Rect.js"),"JAVASCRIPT");
            ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/esri/esri_sliderClass.js"),"JAVASCRIPT"); 
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/esri/WfEsriObjectClass.js"),"JAVASCRIPT");
                
                var parms = "";
                var WfArcConnectorurl = ibigblgetWebApp() + "/esri/WfArcConnector.jsp?";
               	for(var ii = 0 ; ii < this.ibiOptions.length ; ++ii)
                   {
                   if(this.ibiOptions[ii].startsWith("IBIESRI_domkey=") || this.ibiOptions[ii].startsWith("IBIAPP_app="))
                       {
					   parms = parms + this.ibiOptions[ii] + "&";
                       }
                   if(this.ibiOptions[ii].startsWith("esrijsurl="))
                       {
                         WfArcConnectorurl = this.ibiOptions[ii].substr(this.ibiOptions[ii].indexOf("=")+1);
                       }
                   }
				   if(parms != "")
					{
					WfArcConnectorurl += parms + "IBIESRI_command=js&";              
                    ibigblInitInsert(checktable,WfArcConnectorurl,"JAVASCRIPT");                   
					}
			}

			if( this.testOptions("olap") || this.testOptions("autosort") || this.testOptions("noicons"))
			{			
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olapdefaults.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.formIntlFileName("olapctltrans.js"),"JAVASCRIPT");
                
                /*** do not remove this line. it is for testing olapctltrans.js locally ******/
                //ibigblInitInsert(checktable,this.addBaseDir("/intl/EN/olapctltrans.js"),"JAVASCRIPT");
			}
			

            if( (this.testOptions("olap") && this.testOptions("olappanebase")) || 
				this.testOptions("autosort") || this.testOptions("noicons") ||
				this.testOptions("olapdrill") )
            {
            	
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olapctl.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/savedialog.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
            }
            
            if(this.testOptions("noicons") || this.testOptions("autosort") || (this.testOptions("olap") && ! this.testOptions("olappanebase")))   
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olap.js")                 ,"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
            }

            if(this.testOptions("maintainTree"))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/maintainTree.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.formIntlFileName("maintainTreeTrans.js"),"JAVASCRIPT");
            }

            if(this.testOptions("rassist")) 
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/assist/rastyle.js"),"JAVASCRIPT");

            if(this.testOptions("rassist")) 
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/assist/HTMLToolConfig.js"),"JAVASCRIPT");


            if(this.testOptions("ibirls"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibirls.js"),"JAVASCRIPT");

            if(this.testOptions("ibirls2"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibirls2.js"),"JAVASCRIPT");

            if(this.testOptions("ibirls3"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibirls3.js"),"JAVASCRIPT");

            if(this.testOptions("ibirls2") || this.testOptions("ibirls3"))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olapdefaults.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.formIntlFileName("olapctltrans.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/intl/ibimultilanguage.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibilangtrans.js"),"JAVASCRIPT");
            }

            if(this.testOptions("ibixmltree"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibixmltree.js"),"JAVASCRIPT");
                
            if(this.testOptions("dropmenu","esrireport","noicons"))
				{
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
				}

            if(this.testOptions("multidrill"))
				{
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibidropmenu.js"),"JAVASCRIPT");
				ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibimultidrill.js"),"JAVASCRIPT");
				}

            if(this.testOptions("mntFormValidate"))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibiValidate.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/mntFormValidate.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.formIntlFileName("mntFormValidateTrans.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olapdefaults.js"),"JAVASCRIPT");
                ibigblInitInsert(checktable,this.formIntlFileName("olapctltrans.js"),"JAVASCRIPT");
            }

            if(this.testOptions("expandable"))
           	ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/expandtree.js"),"JAVASCRIPT");     
            
            if (this.testOptions("graph"))
            {
              ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBIEvent.js"),"JAVASCRIPT");
              ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/graph/IBIToolTips.js"),"JAVASCRIPT");
            }

            if(this.testOptions("popupdesc"))
           	ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/ibipopupdesc.js"),"JAVASCRIPT");

            if (this.testOptions("hfreeze") || this.testOptions("hfreeze508")) {
               ibigblInitInsert(checktable, this.addBaseDir("/ibi/html/js/IBILib.js"), "JAVASCRIPT");
               ibigblInitInsert(checktable, this.addBaseDir("/ibi/html/js/IBITable.js"), "JAVASCRIPT");
               ibigblInitInsert(checktable, this.addBaseDir("/ibi/html/js/ibihfreeze.js"), "JAVASCRIPT");
            }
            
            if(this.testOptions("expandByRow")) {
               	ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBILib.js"),"JAVASCRIPT");
               	ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/IBITable.js"),"JAVASCRIPT");
               	ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/accordionByRow.js"),"JAVASCRIPT");
            }

            // now its time to check for use js files
            for(var i = 0 ; i < this.ibiOptions.length ; ++i)
            {
                if(ibigblInitTables.isExtendedOption(this.ibiOptions[i]))
                    ibigblInitInsert(checktable,this.ibiOptions[i],null);
            }
            break;
        case ibigblInitTables.CSSTABLE : 
            if(this.testOptions("dropmenu"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/ddmenu.css"),true);

            if(this.testOptions("multidrill"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/js/multidrill.css"),true);

            if(this.testOptions("ddreport"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/ddmenu.css"),true);

            if(this.testOptions("toc"))
                ibigblInitInsert(checktable,this.formIntlFileName("toc.css"),true);

            if(this.testOptions("dddisplay"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/ddmain.css"),true);

            if(this.testOptions("toc"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/dd/ddmenu.css"),true);

            if(this.testOptions("olappane","autosort","olappanebase","olap","noicons"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/olap/olapctl.css"),true);

            if(this.testOptions("maintainTree"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/maintainTree.css"),true);

            if(this.testOptions("dyncalendar"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/dyncalendarcss.css"),true);

            if(this.testOptions("rltdyncalendar"))
                ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/maint/dyncalendarcss.css"),true);

            if(this.testOptions("ibilangtrans") && !(this.testOptions("ibirls2") || this.testOptions("ibirls3")))
            {
                ibigblInitInsert(checktable,this.addBaseDir("/intl/EN/langctl.css"),true);
                if(this.testOptions("wfconsole"))
                   ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/console/wfconsole.css"),true);
                else
                   ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/mre/mrestyle.css"),true);
            }


            if(this.testOptions("esrireport"))
                 ibigblInitInsert(checktable,this.addBaseDir("/ibi/html/esri/esri_mapmenu.css"),true);

            for(var i = this.ibiOptions.length -1 ; i >= 0 ; --i)
            {
                if(!ibigblInitTables.isExtendedOption(this.ibiOptions[i]))
                    continue;
                var name = ibigblInitTables.baseNameOfUri(this.ibiOptions[i]);
                if(name.length == 0)
                    continue;
                name = name + "GetCssList";
                var xx = getWindowVar(name,null);
                if(xx != null)
                    eval(name + "(tbl);");
            }
            break;
        case ibigblInitTables.DIVTABLE : 
            if(this.testOptions("olappanebase"))
                ibigblInitInsert(checktable,"divOlapApplet"    ,"divOlapAppletClass");
            break;
        case ibigblInitTables.ONLOADTABLE :
            for(var i = 0 ; i < this.ibiOptions.length ; ++i)
            {
                if(!ibigblInitTables.isExtendedOption(this.ibiOptions[i]))
                    continue;
                var name = ibigblInitTables.baseNameOfUri(this.ibiOptions[i]);
                if(name.length == 0)
                    continue;
                name = name + "OnLoadFunc";
                var xx = getWindowVar(name,null);
                if(xx != null)
                    ibigblInitInsert(checktable,name + "(objects,i);",true);
            }

            if(this.testOptions("toc"))
                ibigblInitInsert(checktable,"loadTocFrame();"      ,true);

            if(this.testOptions("ddreport"))
                ibigblInitInsert(checktable,"ddOnLoad();"          ,true);

            if(this.testOptions("olappane"))
                ibigblInitInsert(checktable,"olapOnloadFunc();"    ,true);

            if(this.testOptions("olappanebase"))
                ibigblInitInsert(checktable,"olapPaneBaseOnload();"    ,true);

            if(this.testOptions("autodrill"))
                ibigblInitInsert(checktable,"autodrillOnLoad();"       ,true);

            //if(this.testOptions("autosort"))
            //	ibigblInitInsert(checktable,"olapWindowOnload();"      ,true);

            if((this.testOptions("olap") && ! this.testOptions("olappanebase")) || this.testOptions("autosort","noicons"))
                ibigblInitInsert(checktable,"olapWindowOnload();"      ,true);

            if(this.testOptions("ibilangtrans"))
                ibigblInitInsert(checktable,"ibilangtransonload();"        ,true);

            if(this.testOptions("esrireport"))
                ibigblInitInsert(checktable,"rptlnchOnload();"        ,true);

            if (this.testOptions("graph"))
                ibigblInitInsert(checktable,"graphToolTipsOnLoad();"       ,true);
                
            if (this.testOptions("graphToPrinter"))
                ibigblInitInsert(checktable,"initGraphPrint();"       ,true);

            if(this.testOptions("popupdesc"))
                ibigblInitInsert(checktable,"popupdescOnLoad(this);", true);

            if(this.testOptions("hfreeze"))
                ibigblInitInsert(checktable, "hfreezeOnLoad();", true);

            if(this.testOptions("hfreeze508"))
                ibigblInitInsert(checktable, "hfreezeOnLoad(true);", true);

            if (this.testOptions("expandByRow"))
                ibigblInitInsert(checktable, "expandByRowOnLoad();", true);

            break;
    }
    return tbl;
};

ibigblInitTables.prototype.doOnLoad = function ibigblInitTables_doOnLoad()
{
    var objects =  this.ibigblConstructTable(ibigblInitTables.ONLOADTABLE);
    for(var i = 0 ; i < objects.length ; ++i)
    {
        if(objects[i].str2)
            eval(objects[i].str1);
    }
};
ibigblInitTables.prototype.formCssLinks = function ibigblInitTables_formCssLinks(cur)
{
    var str = "";
    if(cur != null)
        str += formCssTag(cur);
    var objects =  this.ibigblConstructTable(ibigblInitTables.CSSTABLE);
    for(var i = 0 ; i < objects.length ; ++i)
        if(objects[i].str2)
            str += formCssTag(objects[i].str1);
    return str;
};
ibigblInitTables.prototype.doCsssIEold = function ibigblInitTables_doCsssIEold(cur,doc)
{
    doc.write(this.formCssLinks(cur));
};

ibigblInitTables.prototype.doCsss = function ibigblInitTables_doCsss(cur,doc)
{
    this.insertCSSLinks(cur);
};

ibigblInitTables.prototype.insertCSSLinks = function ibigblInitTables_insertCSSLinks(cur)
{
    if(cur != null)
        insertLinkIntoTheDom(cur);
    var objects =  this.ibigblConstructTable(ibigblInitTables.CSSTABLE);
    for(var i = 0 ; i < objects.length ; ++i) {
        if(objects[i].str2)
            insertLinkIntoTheDom(objects[i].str1);
    }
};
function insertLinkIntoTheDom(css)
{
	var headElements=document.getElementsByTagName('head');
	var headElement=null;
	if (headElements.length < 0) {
		// we have a problem there is no head element on the page.
		// I need to create it.
		var htmlElements=document.getElementsByTagName('html');
	    var htmlElement=htmlElements[0];
		var headElement = document.createElement('head');
		htmlElement.appendChild(headElement); 
	} else {
	    headElement=headElements[0];
	}
	var link = document.createElement('link');
	link.setAttribute('href', css);
	link.setAttribute('type', 'text/css');
	link.setAttribute('rel', 'stylesheet');
	
	headElement.appendChild(link); 
}

ibigblInitTables.prototype.doDivs = function ibigblInitTables_doDivs(doc)
{
    var objects =  this.ibigblConstructTable(ibigblInitTables.DIVTABLE);
    for(var i = 0 ; i < objects.length ; ++i)
    {
        doc.write(formDivTag(objects[i].str2,objects[i].str1));
    }
    /*
    objects =  this.ibigblConstructTable(ibigblInitTables.INCLUDETABLE);
    for(var i = 0 ; i <  objects.length ; ++i)
    {
    // may need at some point to add some code here
    }
    */
};

ibigblInitTables.prototype.doIncludes = function ibigblInitTables_doIncludes(doc)
{
    var objects =  this.ibigblConstructTable(ibigblInitTables.INCLUDETABLE);
    for(var i = 0 ; i < objects.length ; ++i)
    {
        var tag = formJsIncludeTag(objects[i].str2,objects[i].str1);
        doc.write(tag);
    }
    this.oktodebug = this.includeDebug;
};

ibigblInitTables.prototype.deRegGlobalObject = function ibigblInitTables_deRegGlobalObject(obj)
{
    if(this.glbObjTab == null)
        this.glbObjTab = [];
    for(var i = 0 ; i < this.glbObjTab.length ; ++i)
        if(this.glbObjTab[i] == obj)
        {
            this.glbObjTab[i] = null;
            return;
        }
};

ibigblInitTables.prototype.findGlobalObject = function ibigblInitTables_findGlobalObject(obj)
{
    if(this.glbObjTab == null)
        this.glbObjTab = [];
	var rtn = null;
    for(var i = 0 ; i < this.glbObjTab.length ; ++i)
		{
        if(this.glbObjTab[i] == obj)
        	{
	    	rtn = "ibigblInitInfo.glbObjTab[" + i + "]";
			break;
   	     	}
		}
	return rtn;
};
ibigblInitTables.prototype.regGlobalObject = function ibigblInitTables_regGlobalObject(obj)
{
    if(this.glbObjTab == null)
        this.glbObjTab = [];
    if(obj == null)
        debugWindow("stored null obj??");
    var index = -1;
	for(var j = 0 ; j < this.glbObjTab.length ; ++j)
		{
		if(this.glbObjTab[j] == null)
			{
    		index = j;
			break;
			}
		}
	if(index == -1)
		{
    	index = this.nextObjectNumber();
    	setObjectVar(obj,"objectNumber",index);
		}
    var rtn = "ibigblInitInfo.glbObjTab[" + index + "]";
    this.glbObjTab[index] = obj;
    return rtn;
};

ibigblInitTables.prototype.nextObjectNumber = function ibigblInitTables_nextObjectNumber()
{
    this.nextObjectNumberCounter = (this.nextObjectNumberCounter + 1) % 10000000;
    return this.nextObjectNumberCounter;
};

ibigblInitTables.prototype.translateFromTable = function ibigblInitTables_translateFromTable()
{
    if(this.transTables != null)
        ibiHtmlLangTrans.editInit(this.transTables);
};

ibigblInitTables.prototype.regGlobalTransTable = function ibigblInitTables_regGlobalTransTable(tbl)
{
    this.transTables = tbl;
};

ibigblInitTables.prototype.getRootLevelDiv = function ibigblInitTables_getRootLevelDiv(nm,cls,other)
{
    var obj = null;
    if(nm != null && nm.length !=0)
        obj = document.getElementById(nm);
    if(obj != null)
        return obj;

    var str = formDivTag(cls,nm,null,other);
    var insertPoint = findTagNameInDoc("BODY",document,1);

    if (document.all)
    {
        var obj = document.createElement(str);
        insertPoint.insertAdjacentElement("BeforeEnd",obj);
        return obj;
    }
    else
    {
        var range = document.createRange();
        range.setStartAfter(insertPoint.lastChild);
        insertPoint.appendChild(range.createContextualFragment(str));
        return insertPoint.lastChild;
    }
};

ibigblInitTables.prototype.translateStringToHTMLString = function ibigblInitTables_translateStringToHTMLString(str)
{
    if(str == null)
        return str;
    var rtn = "";
    for(var i = 0 ; i < str.length ; ++i)
    {
        var c = str.charAt(i);
        // var tok;
        switch(c)
        {
            case '"' :
                rtn += "&quot;";
                break;
            case '&' :
                rtn += "&amp;";
                break;
            case '<' :
                rtn += "&lt;";
                break;
            case '>' :
                rtn += "&gt;";
                break;
            default :
                rtn += c;
                break;
        }
    }
    return rtn;
};

function ibigblInitTables()
{
    if(typeof DialogFilePrefix == "undefined" || DialogFilePrefix == null || DialogFilePrefix.length == 0) 
        this.DialogFilePrefix = null;
	else
        this.DialogFilePrefix = DialogFilePrefix;

	//this.DialogFilePrefix = "/intl/FC/FC";

    this.transTables = null;
    this.nextObjectNumberCounter = 0;
    this.objectNumber = this.nextObjectNumberCounter;
    this.glbObjTab = null;
    this.includeDebug = true;
    this.oktodebug = false;

    this.NS4 = (document.layers);
    this.IE4 = (document.all);
    this.ver4 = (this.NS4 || this.IE4);
    this.IE5 = (this.IE4 && navigator.appVersion.indexOf("5.")!=-1);
    this.isMac = (navigator.appVersion.indexOf("Mac") != -1);
    this.NS6 = document.getElementById && !this.IE4;

    if(typeof ibiOptions == "undefined" ) 
        this.ibiOptions = [];
    else
        this.ibiOptions = ibiOptions;

    if(this.includeDebug)
        this.ibiOptions.addElement("debug");

    this.ibigblFilePrefix = "";
    this.ibigblFileSuffix = "";

    var xx = document.getElementsByTagName("script");
    for(var i = 0 ; i < xx.length ; ++i)
    {
        var src = xx[i].src;
        if( src == null || src.length == 0)
            continue;
        var j = src.indexOf(ibigblInitTables.ThisFileNameRoot);
        if(j == -1)
        {
            var pcThisFileNameRoot = new String(ibigblInitTables.ThisFileNameRoot).replace(/\//g,"\\");
            j = src.indexOf(pcThisFileNameRoot);
        }
        if(j != -1)
        {
            this.ibigblFilePrefix = src.substr(0,j);
			var jj = src.indexOf("?");
			if(jj != -1)
				this.ibigblFileSuffix = src.substr(jj);
            break;
        }
    }
}

///////////////////////////////////////////////////////////////////////////
var ibigblInitInfo = new ibigblInitTables();
///////////////////////////////////////////////////////////////////////////

function isIE()
{
    return (ibigblInitInfo.IE4 || ibigblInitInfo.IE5);
}

function ibigblSetActives()
{
  var allElements = document.body.getElementsByTagName('*');
   for (var i = 0; i < allElements.length; i++)
     {
       if (allElements[i].focus != undefined)
         {
           var functionBody = 'document.activeElement = event.target;';
           var oldOnFocus = allElements[i].getAttribute('onfocus');
           if (oldOnFocus)
              functionBody += oldOnFocus;
           allElements[i].onfocus = new Function ('event', functionBody);
         }
    }
 }    

function ibigblWriteDivs()
{
    ibigblInitInfo.doDivs(document);
    if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1)
       ibigblSetActives();
}

function ibigblloadIncludes()
{
    ibigblInitInfo.doIncludes(document);
}

function ibigblloadCss(cur)
{
    var version=getInternetExplorerVersion();
    if (version != -1 && version < 7) {
       ibigblInitInfo.doCsssIEold(cur,document);
    } else {
       ibigblInitInfo.doCsss(cur,document);
    }
}

/**
 * From the MSDN site, this code determines the browser version number.
 */
function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

function ibigblOnLoad()
{
    ibigblInitInfo.doOnLoad();
}

function addIntlTranslatedJS(name)
{
    ibigblInitInfo.addTranslatedJS(name,document);
}

function ibigblgetRCasterWebApp()
{
    if(typeof WFInstallOption_rcasterWebApp != "undefined")
        return WFInstallOption_rcasterWebApp;
    else
        return ibigblInitTables.defaultRCasterWebApp;
}

function ibigblgetCgiOptionPath()
{
    if(typeof focexurl != "undefined" )
    {
        var k = focexurl.lastIndexOf("?");
        if(k == -1)
            k = focexurl.length;
        var y = focexurl.substr(0,k);
        k = y.lastIndexOf("/");
        if(k == -1)
            y.length;
        else
            ++k;
        y = y.substr(0,k);
        return y;
    }
    if(typeof WFInstallOption_CGIPath != "undefined")
        return WFInstallOption_CGIPath;
    else
        return ibigblInitTables.defaultCgiPath;
}

function ibigblgetCgiOptionName()
{
    if(typeof focexurl != "undefined" )
    {
        var k = focexurl.lastIndexOf("?");
        if(k == -1)
            k = focexurl.length;
        var y = focexurl.substr(0,k);
        k = y.lastIndexOf("/");
        if(k == -1)
            k = 0;
        else
            ++k;
        y = y.substr(k);
        return y;
    }
    if(typeof WFInstallOption_CGIName != "undefined")
        return WFInstallOption_CGIName;
    else
        return ibigblInitTables.defaultCgiName;
}

function ibigblgetCgiPath()
{
    return ibigblgetCgiOptionPath()+ibigblgetCgiOptionName();
}

function ibigblgetMaintainPath()
{
    if(typeof focexurl != "undefined" )
        return focexurl;
    var rtn ="";

    if(typeof WFInstallOption_MaintainPath != "undefined")
        rtn += WFInstallOption_MaintainPath;
    else
        rtn += ibigblInitTables.defaultCgiPath;

    if(typeof WFInstallOption_MaintainName != "undefined")
        rtn += WFInstallOption_MaintainName;
    else
        rtn += ibigblInitTables.defaultCgiName;
    return rtn;
}

function ibigblgetServletPath()
{
    if (typeof WFInstallOption_WFServletPath != "undefined" && WFInstallOption_WFServletPath != "")
        return WFInstallOption_WFServletPath;
    else
        return ibigblInitTables.defaultServletPath;
}

function ibigblgetWebApp()
{
    var url = new ibiUrlTable(typeof focexurl == "undefined" ? "" : focexurl);
    url.parse();
    var rtn = url.getVar(ibigblInitTables.webAppVarName);
    if(rtn == null)
    {
        if(typeof WFInstallOption_defaultWebApp != "undefined")
            rtn = WFInstallOption_defaultWebApp;
    }
    if(rtn == null)
        rtn = ibigblInitTables.defaultWebApp;
    return rtn;
}

function ibigblgetCgi()
{
    if(typeof focexurl != "undefined" )
        return focexurl;
    var rtn = ibigblgetCgiPath();
    return rtn;
}

////////////////////////////////////////////////////////////////////////////////
function formIframeTag(name,src,cls,other)
{
    var s = "<iframe ";
    if(name != null)
    {
        s += "name='" + name + "' ";
        s += "id='" + name + "' ";
    }
    if(src != null)
        s += "src='" + src + "' ";
    if(cls != null)
        s += "class='" + cls + "' ";
    if(other != null)
        s += " " + other + " ";
    s += "><" + "/iframe>";
    return s;
}

function formDivTag(cls,id,html,other)
{
    var s = "<div " ;
    if(cls != null)
        s += "class='" + cls + "' ";
    if(id != null)
        s += "id='" + id + "' name='" + id + "'";
    if(other != null)
        s += " " + other + " ";
    s += ">";
    if(html != null)
        s += html;
    s += "<" + "/div>";
    return s;
}

function formJsIncludeTag(lang,src)
{
    var detail="";
    if(lang == null)
    {        
        if(src.endsWith(".js")) {
            // lang = "JAVASCRIPT";
            detail=" type=\"text/javascript\" ";
        }
        else if(src.endsWith(".vbs"))
            detail=" language=\"VBScript\" ";
    }
    else if ("JAVASCRIPT" === lang.toUpperCase()) {
            detail=" type=\"text/javascript\" ";
    }
    else if ("VBSCRIPT" == lang.toUpperCase()) {
            //detail=" language=\"VBScript\" ";
            detail=" type=\"text/vbscript\" ";
	}
    var s = "<script type='text/javascript' " + detail + " src='" + src + "'>"  + "<" + "/script>";
    return s;
}
function formCssTag(css)
{
    var s = "<link REL='stylesheet' TYPE='text/css' href='" + css + "'>"  + "<" + "/link>";
    return s;
}

function clickImageTag(image,href,click,alt,other,width,height)
{
    var s = "";
    s += "<input type='image' ";

    if(image != null)
        s += " src='" + image + "'";
    if(href != null)
        s += " href='" + href + "'";
    if(click != null)
        s += " onClick='" + click + "'";
    if(alt != null)
	{
		if(document.all)
        	s += " Alt='" + alt + "'";
		else
			s += " title='" + alt + "'";
	}

    if(other != null)
        s += " " + other + " " ;
    if(width != null && width != -1)
        s += " width='" + width + "'";
    if(height != null && height != -1)
        s += " height='" + height + "'";
    
    s += ">";
    return s;
}

///////////////////////////////////////////////////////////////////////////
ArgsVector.prototype.length = function ArgsVector_length()
{
    return this.args.length;
};

ArgsVector.prototype.elementAt = function ArgsVector_elementAt(i)
{
    return this.args[i];
};

ArgsVector.prototype.addElement = function ArgsVector_addElement(ele)
{
    this.args.addElement(ele);
};

ArgsVector.prototype.toString = function ArgsVector_toString()
{
    return "ArgsVector data";
};

function ArgsVector(args)
{
    this.args = args;
    if(this.args == null)
        this.args = [];
}

///////////////////////////////////////////////////////////////////////////
dummyWindow.prototype.write = function dummyWindow_write(str)
{
    this.str = this.str + str;
};

dummyWindow.prototype.read = function dummyWindow_read()
{
    return this.str;
};

function dummyWindow()
{
    this.str = "";
}

///////////////////////////////////////////////////////////////////////////
ibiStringString.prototype.formUrlEntry = function ibiStringString_formUrlEntry()
{
    return formUrlEntry(this.str1,this.str2); 
};

function ibiStringString(str1,str2)
{
    this.str1 = str1;
    this.str2 = str2;
}

////////////////////////////////////////////////////////////
ibigblImagesTable.prototype.isDisabled = function ibigblImagesTable_isDisabled(hEle)
{

    return ! (hEle.rotateImgTagEnabled == "true");
};

ibigblImagesTable.prototype.setRotateImg = function ibigblImagesTable_setRotateImg(hEle,index)
{
    if(hEle != null) 
    {
    	hEle.src = this.getDisplayImage(hEle,index);
		hEle.rotateImgTagcurindex = index;
	}
};

ibigblImagesTable.prototype.rotateClick = function ibigblImagesTable_rotateClick(hEle)
{
    if(this.isDisabled(hEle))
        return;
    var index = (hEle.rotateImgTagcurindex + 1) % this.length;
    if(hEle.callback != null)
        index  = eval(hEle.callback + "(this,hEle,index)");
	else if(hEle.id != null)
	{
		var id = parseInt(hEle.id.substr(hEle.id.length-1));
		if(id > -1)
			olapInfoData.dimensionsArray[id].demCompareHit(this,hEle,index);
	}
    this.setRotateImg(hEle,index);
};

ibigblImagesTable.prototype.rotateImgonmousedown = function ibigblImagesTable_rotateImgonmousedown(hEle)
{
    if(this.isDisabled(hEle))
        return;
	var index = hEle.rotateImgTagcurindex;

    if(this.altImage[index] != null)
        hEle.src = this.altImage[index];
};

ibigblImagesTable.prototype.rotateImgonmouseup = function ibigblImagesTable_rotateImgonmouseup(hEle)
{
    this.rotateImgonmouseout(hEle);
};

ibigblImagesTable.prototype.rotateImgonmouseout = function ibigblImagesTable_rotateImgonmouseout(hEle)
{
    hEle.src = this.getDisplayImage(hEle,hEle.rotateImgTagcurindex);
};

ibigblImagesTable.prototype.getDisplayImage = function ibigblImagesTable_getDisplayImage(hEle,index)
{
    if(this.isDisabled(hEle))
        return this.getImageDisabled(index);
    else
        return this.getImage(index);
};

ibigblImagesTable.prototype.setEnable = function ibigblImagesTable_setEnable(hEle,state)
{
    hEle.rotateImgTagEnabled = (state ? "true" : "false");
    this.setRotateImg(hEle, hEle.rotateImgTagcurindex);
};

ibigblImagesTable.prototype.simpleClickImageTag = function ibigblImagesTable_simpleClickImageTag(index,click,other,width,height)
{
    return this.rotateImgTagExtended(index,null,null,null,width,height,other,click);
};

ibigblImagesTable.prototype.rotateImgTag = function ibigblImagesTable_rotateImgTag(index,id,callBack,info,width,height,other)
{
    var click = this.name + ".rotateClick(this)";
    return this.rotateImgTagExtended(index,id,callBack,info,width,height,other,click);
};

ibigblImagesTable.prototype.rotateImgTagExtended = function ibigblImagesTable_rotateImgTagExtended(index,id,callBack,info,width,height,other,click)
{
    if(width == null)
        width = this.width[index];
    if(height == null)
        height = this.height[index];
    if(other == null)
        other = "";

    other += " rotateImgTagcurindex='" + index + "' ";
    other +=" rotateImgTagEnabled='true' ";

    if(id != null)
        other +=" id='" + id + "' ";
    if(callBack != null)
        other +=" callback='" + callBack + "' ";

    if(info != null)
        other +=" info='" + info + "' ";
    other += " onMouseDown='" + this.name + ".rotateImgonmousedown(this)' ";
    other += " onMouseUp='" + this.name + ".rotateImgonmouseup(this)' ";
    other += " onMouseOut='" + this.name + ".rotateImgonmouseout(this)' ";
	other += " onfocus='divOnFocus(this)' onBlur='divOnBlur(this)' ";
    other += " imageTableName='" + this.name + "' ";

    var s = this.clickImageTag(index,null,click,other,width,height);
    return s;
};

ibigblImagesTable.prototype.clickImageTag = function ibigblImagesTable_clickImageTag(index,href,click,other,width,height)
{
    var alt = this.getAlt(index);
    var image = this.getImage(index);
    
    if(width == null)
        width = this.width[index];
    if(height == null)
        height = this.height[index];

    var x = clickImageTag(image,href,click,alt,other,width,height);
    return x;
};

ibigblImagesTable.prototype.getAlt = function ibigblImagesTable_getAlt(index)
{
    return this.altKeys[index];
};

ibigblImagesTable.prototype.getImageDisabled = function ibigblImagesTable_getImageDisabled(index)
{
    return this.disImage[index];
};

ibigblImagesTable.prototype.getImage = function ibigblImagesTable_getImage(index)
{
    return this.images[index];
};

ibigblImagesTable.prototype.getaltImage = function ibigblImagesTable_getaltImage(index)
{
    return this.altImage[index];
};

ibigblImagesTable.prototype.getImageArray = function ibigblImagesTable_getImageArray()
{
    return this.images;
};

ibigblImagesTable.prototype.addImage = function ibigblImagesTable_addImage(image,altKey,altImage,disImage,width,height,other)
{
    this.images[this.length] = image;
    this.altImage[this.length] = altImage;
    this.disImage[this.length] = disImage;

    this.altKeys[this.length] = altKey;
    if(width == null)
        width = -1;
    if(height == null)
        height = -1;

    this.other[this.length] = other;
    this.width[this.length] = width;
    this.height[this.length] = height;
    return this.length++;
};

ibigblImagesTable.prototype.loadImages = function ibigblImagesTable_loadImages()
{
    for(var i = 0 ; i < this.length ; ++i)
    {
        if(this.images[i] != null)
            new Image(0,0).src = this.images[i];
        if(this.altImage[i] != null)
            new Image(0,0).src = this.altImage[i];
        if(this.disImage[i] != null)
            new Image(0,0).src = this.disImage[i];
    }
};

function ibigblImagesTable(name)
{
    this.name = name;
    this.images = [];
    this.altKeys = [];
    this.altImage = [];
    this.disImage = [];
    this.width = [];
    this.height = [];
    this.other = [];
    this.length = 0;
}

////////////////////////////////////////////////////////////
ibiUrlTable.prototype.getVar = function ibiUrlTable_get(name)
{
    for(var i = 0 ; i < this.table.length ; ++i)
    {
        if(this.table[i].str1 == name)
            return this.table[i].str2;
    }
    return null;
};

ibiUrlTable.prototype.parse = function ibiUrlTable_parse()
{
    var parmsStr = getQueryFromURL(this.cgi);
    var p = parmsStr.split("&"); 
    for(var i = 0 ; i < p.length ; ++i)
    {
        var j = p[i].indexOf("=");
        if(j != -1)
            this.addVar(p[i].substr(0,j),p[i].substr(j+1));
    }
};

ibiUrlTable.prototype.toString = function ibiUrlTable_toString()
{
    var rtn = this.cgi;
    var k = rtn.lastIndexOf("?");

    if(k == -1)
        rtn += "?";
    else if(k != (rtn.length-1))
    {
        k = rtn.lastIndexOf("&");
        if(k != (rtn.length-1))
            rtn += "&";
    }
    for(var i = 0 ; i < this.table.length ; ++i)
        rtn += this.table[i].formUrlEntry();
    return rtn;
};

ibiUrlTable.prototype.addAtEnd = function ibiUrlTable_addAtEnd(value)
{
    if(value == null || value.length == 0)
        return ;
    
    var i = this.cgi.indexOf("?");
    var sep = "";
    var j = value.lastIndexOf("&");

    if(j == -1 || j != (value.length -1))
        value = value + "&";

    if(i == -1)
        sep = "?";
    else if(i == (this.cgi.length -1))
        sep = "";
    else
    {
        i = this.cgi.indexOf("&");
        if(i == (this.cgi.length -1))
            sep = "";
    }
    this.cgi =  this.cgi + sep + value;
};

ibiUrlTable.prototype.addVar = function ibiUrlTable_addVar(name,value)
{
    this.table.addElement(new ibiStringString(name,value));
};

function ibiUrlTable(cgi)
{
    if(cgi == null)
        debugWindowStack();
    this.cgi = cgi;
    this.str = "";
    this.table = [];
}

////////////////////////////////////////////////////////////
String.prototype.htmlEscape = function String_htmlEscape()
{
    var xx = "";
    for(var i = 0 ; i < this.length ; ++i)
    {
        var c = this.charCodeAt(i);

        if(c > 127)
            xx = xx + "&#" + c + ";";
        else
            xx += c;
    }
    debugWindow(xx);
    return xx;
};

String.prototype.endsWith = function String_endsWith(str)
{
    var i = this.lastIndexOf(str);
	if(i < 0)
		return false;
	if(i + str.length == this.length)
        return true;
    return false;
};

String.prototype.startsWith = function String_startsWith(str)
{
    var i = this.indexOf(str);
    if(i == 0)
        return true;
    return false;
};

String.prototype.trim = function String_trim(str)
{
    var x = new String(this);
    var chars = " \t\012\015\r\n\240";
    var start;
    var end;

    for(start = 0 ; start < x.length ; ++start)
    {
        var c = x.charAt(start);
        if(-1 == chars.indexOf(c))
            break;
    }
    if(start == x.length)
        return "";
    x = x.substr(start,x.length-start);
    for(end = x.length ; end > 0 ; --end)
    {
        var c = x.charAt(end-1);
        if(-1 == chars.indexOf(c))
            break;
    }
    x = x.substr(0,end);
    return x;
};

function setWindowVar(name,value)
{
    // set named var from window
    setObjectVar(window,name,value);
}

function getWindowVar(name,def)
{
    // get named var from window
    return getObjectVar(window,name,def);
}

function setObjectVar(obj,name,value)
{
    // set named var from obj
    var str = "obj." + name + "=" + "value";
    eval(str);
}

function getObjectVar(obj,name,def)
{
    if ( ! (obj === null || obj === undefined)) {
        if (typeof obj[name] === undefined)
           return def;
    	var rtn = obj[name];
	    if(rtn == null)
    	    return def;
	    return rtn;
    }
    return def;
}

function setObjectInnerHTML(obj,htm)
{
    obj.innerHTML = htm;
}

function setObjectOuterHTML(obj,htm)
{
    obj.outerHTML = htm;
}

function setItemCursor(itemId,cursor)
{
    var htmlEle = document.getElementById(itemId);
    if(htmlEle == null)
        return;
    if(htmlEle.style.cursor == cursor)
        return;
    htmlEle.style.cursor = cursor;
}

function formUrlEntry(name,value)
{
    return name + "=" + value + "&";
}

function getCGIFromUrl(str)
{
    var x = new String(str);
    var i = x.indexOf("?");
    if(i == -1)
        return "";
    return x.substr(0,i+1);
}

function getQueryFromURL(str)
{
    var x = new String(str);
    var i = x.indexOf("?");
    if(i == -1)
        return "";
    return x.substr(i+1);
}

function getPathFromURL(str)
{
    var x = new String(str);
    var i = x.indexOf("?");
    if(i != -1)
        x = x.substring(0,i);
    i = x.indexOf("://");
    if(i != -1)
        x = x.substring(i+3,x.length);
    i = x.indexOf("/");
    if(i != -1)
        x = x.substring(i,x.length);
    return x;
}

function getHostFromURL(str)
{
    var rtn = null;
    var x = new String(str);
    var i = x.indexOf("://");
    if(i != -1)
        x = x.substring(i+3,x.length);
    i = x.indexOf("/");
    if(i != -1)
        rtn = x.substring(0,i);
    return rtn;
}

function getProtocolFromURL(str)
{
    var rtn = null;
    var x = new String(str);
    var i = x.indexOf("://");
    if(i != -1)
        rtn = x.substring(0,i);
    return rtn;
}

function replacePathInUrl(url,path)
{
    var rtn = path;
    if(getProtocolFromURL(path) == null)
    {
        var protocolFromURL = getProtocolFromURL(url);
        if(protocolFromURL == null)
            protocolFromURL = "http";

        var host = getHostFromURL(url);
        if(host == null)
            host = "";

        rtn = protocolFromURL + "://" + host + path;
    }
    return rtn;
}

function formFunctionCall()
{
    var start = "";
    var parms = "";

    for(var i = 1 ; i < arguments.length ; i += 2)
    {
        var quote = (arguments[i] ? "'" : "");
        parms += start + quote + arguments[i+1] + quote ;
        start = ",";
    }
    var rtn  = arguments[0] + "(" + parms + ")";
    return rtn;
}

function findMyLeft(eSrc,offSet)
{
    if(eSrc == null)
        return 0;
    if(offSet)
        return eSrc.offsetLeft + findMyLeft(eSrc.offsetParent,offSet);
    else
        return eSrc.offsetLeft + findMyLeft(eSrc.parentElement,offSet);
}

function findMyTop(eSrc,offSet)
{
    if(eSrc == null)
        return 0;
    if(offSet)
        return eSrc.offsetTop + findMyTop(eSrc.offsetParent,offSet);
    else
        return eSrc.offsetTop + findMyTop(eSrc.parentElement,offSet);
}
function findMyLeftScroll(eSrc,includeBody)
{
    if(eSrc == null)
        return 0;
	if(eSrc.tagName == "BODY" && ! includeBody)
        return 0;
    return findMyLeftScroll(eSrc.parentElement,includeBody) + eSrc.scrollLeft;
}
function findMyTopScroll(eSrc,includeBody)
{
    if(eSrc == null)
        return 0;
	if(eSrc.tagName == "BODY" && ! includeBody)
        return 0;
    return findMyTopScroll(eSrc.parentElement,includeBody) + eSrc.scrollTop;
}

// when you are in a frameset environment that is from 
// several different web servers then there are 
// problems accessing all the windows in the frameset
// check to be sure that you reached top level frame for current domain.
// returns true if you reached top level frame (or iframe)
// returns false if you didn't reach top level frame
// Check is done based on the unique name of the frame (or iframe), which is 
// the top level window for the olap report. As soon as that level
// reached , search for applets is being done on that level (dli 12/06/2001)
function checkParentAccess(p) 
{
    var rtn = false;
    if(p == null)
        return rtn;
    try
    {
        if(p.name != null)
            rtn = true;
    }
    catch(Exception)
    {
        rtn = false;
    }
    return rtn;
}

function findObjectWindowTestFunc(nm,win,debug)
{
    if(debug)
        if(win != null)
            debugWindow("looking for " + nm + " in " + win.name);
    if(null != getObjectVar(win,nm,null))
        return true;
    return false;
}

function findAppletWindowTestFunc(nm,win,debug)
{
    if(debug)
        if(win != null)
            debugWindow("looking for " + nm + " in " + win.name);
    if(win.document.applets != null)
    {
        if(null != win.document.applets[nm])
            return true;
    }
    return false;
}

function findObjectWindowRecursive(nm)
{
    var debug = false;
    if(debug)
        debugWindow("-------------- start -------------- looking for '" + nm + "' starting from '" + window.name + "'");
    var rtn = findObjAppWindowRecursive(nm,null,null,findObjectWindowTestFunc,debug);
    if(debug)
    {
        if(rtn != null)
            debugWindow("found : '" + nm + "' in window : '" + rtn.name + "'");
        else
            debugWindow("didn't find : '" + nm + "'");
    }
    return rtn;
}

function findAppletWindowRecursive(nm)
{
    var debug = false;
    if(debug)
        debugWindow("-------------- start -------------- looking for '" + nm + "' starting from '" + window.name + "'");
    var rtn = findObjAppWindowRecursive(nm,null,null,findAppletWindowTestFunc,debug);
    if(debug)
    {
        if(rtn != null)
            debugWindow("found : '" + nm + "' in window : '" + rtn.name + "'");
        else
            debugWindow("didn't find : '" + nm + "'");
    }
    return rtn;
}

// nm : name of apple to find 
// win : to start search
// skipWindow : window not to search because we already did
function findObjAppWindowRecursive(nm,win,skipWindow,testFunc,debug)
{
    var serachParent = false;
    if(win == null)
    {
        win = window;
        serachParent = true;
    }
    if(win != null && checkParentAccess(win))
    {
        if(testFunc(nm,win,debug))
            return win;
        for(var i = 0 ; i < win.frames.length ; ++i)
        {
            if(!checkParentAccess(win.frames[i]))
                continue;
            if(win.frames[i] == skipWindow) 
                continue;
            var testWin = findObjAppWindowRecursive(nm,win.frames[i],null,testFunc,debug);
            if(testWin != null)
                return testWin;
        }
        while(serachParent && win != null)
        {
            var pWindow = win.parent;
            if(pWindow == null || pWindow == win)
                break;
            var testWin = findObjAppWindowRecursive(nm,pWindow,win,testFunc,debug);
            if(testWin != null)
                return testWin;
            win = pWindow;
        }
    }
    return null;
}

function findTagNameInDoc(tagName,doc,occurrence)
// Peter L changed this for Netscape Apr 4,2003
 {
 var tagarray = doc.getElementsByTagName(tagName);
 if (tagarray.length >= occurrence)
    return tagarray[occurrence-1];
 else
    return null;
}
function findTagNameInDoc_original(tagName,doc,occurrence)
{
    if(tagName == null || doc == null)
        return null;

    var cnt = 0;
    var childNodes = doc.documentElement.getElementsByTagName("*");
    for(var i = 0 ; i < childNodes.length ; ++i)
    {
        if(childNodes[i].tagName == tagName)
        {
            ++cnt;
            if(cnt == occurrence)
                return childNodes[i];
        }
    }
    return null;
}

function findParentTagName(tagName,hEle)
{
    while(hEle != null && hEle.tagName != tagName)
        hEle = hEle.parentNode; 
    return hEle;
}

function ibiFormFieldHelpUrl(baseUrl,FN,SEGMENT,FILE)
{
    var cgi = new ibiUrlTable(baseUrl);
    cgi.addVar("IBIF_ex",escape("IBIFINFO"));
    cgi.addVar("NAME",escape(FN));
    cgi.addVar("SEGMENT",escape(SEGMENT));
    cgi.addVar("TBNAME",escape(FILE));
    cgi.addVar("TBNAMEL",escape(FILE.toLowerCase()));
    cgi.addVar("TBNAMEU",escape(FILE).toUpperCase());
    return cgi.toString();
}

function ibigetDefaultOpenOptions()
{
    return ["scrollbars=yes","resizable=yes","screenX=0","left=0","screenY=0","top=0"];
}

// id is the id of the item(s)
// func made a func to call for each item optional
// p1 and p2 and p3 are optional parms to func
// call looks like func(item,p1,p2,p3);
// returns the array of found items
function ibiFindDocumentItem(id,func,p1,p2,p3)
{
    var a = document.getElementsByName(id);
    if(a == null)           // if none return empty array
        a = [];
    if(a.length == null) // if there is only one create an Array
        a = new Array(a);
    if(func != null)
    {
        for(var i = 0 ; i < a.length ; ++i)
            func(a[i],p1,p2,p3);
    }
    return a;
}

function setTagInnerHTML(doc,tagType,tagNumber,text,cursor)
{
    var hEle = findTagNameInDoc(tagType,doc,tagNumber);
    if(hEle == null)
        return false;
    if(text != null)
        hEle.innerHTML = text;
    if(cursor != null)
        setItemCursor(hEle,cursor);
    return true;
}
function findNodeRecur (node,id)
{
if(node == null)
    return null;

if(document.all != null)
    return node.all[id];

if(node.childNodes == null)
    return null;
for(var i = 0 ; i < node.childNodes.length ; ++i)
    {
    if(node.childNodes[i].id != null && node.childNodes[i].id == id)
        return node.childNodes[i];
    else
        {
        var yy = findNodeRecur(node.childNodes[i],id);
        if(yy != null)
            return yy;
        }
    }
return null;
}
function findNodeNameIdRecur (node,id)
{
if(node == null)
    return null;

if(document.all != null)
    return node.all[id];

if(node.childNodes == null)
    return null;
for(var i = 0 ; i < node.childNodes.length ; ++i)
    {
    if(node.childNodes[i].name == id || node.childNodes[i].id == id)
        return node.childNodes[i];
    else
        {
        var yy = findNodeNameIdRecur(node.childNodes[i],id);
        if(yy != null)
            return yy;
        }
    }
return null;
}
function findNodeInnerText(node)
{
if(node == null)
	return null;
if(isIE())
	return  node.innerText;
return null;
}
function ibiescape(str)
{
  if( str !== null )
  {
    str = escape(str);
    str = str.replace(/%u/g,'%25u').replace(/%([89A-F])/g,'%25u00$1');
  }

  return str;
}
function ibiunescape(str)
{
  if( str !== null )
  {
    str = str.replace(/%2525u/g, '%u');
    str = str.replace(/%25/g,    '%');
    str = unescape( str );
  }

  return str;
}

function ibiencodeURIComponent( str )
{
  if( str !== null )
  {
    str = escape(str);
    str = str.replace(/%u/g,'%25u').replace(/%([89A-F])/g,'%25u00$1');
    str = unescape(str);
    str = encodeURIComponent(str);
  }

  return str;
}

function ibiescapeforTDG( str )
{
  if( str !== null )
  {
    str = escape(str);
    str = str.replace(/%u/g,'\\u').replace(/%([89A-F])/g,'\\u00$1');
    str = unescape(str);
  }

  return str;
}

function escapeFocusValue(str) {
   //
   // This function excapes the & and ' characters that are special
   // characters in focus with an escaped version of the string.
   // it return a quoted string
   //
   if (str == null) return null;
   return "'" + str.replace(/'/g,"''").replace(/&/g, "&'|'") + "'";
}
////////////////////////////////////////////////////////////
// startup area 
// put all startup code here

ibigblloadIncludes();

