// Licensed Materials - Property of IBM // // IBM Cognos Products: pps // // (C) Copyright IBM Corp. 2005, 2019 // // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // This forms the javascript functions used for PowerPlay Studio Toolbar // The functions handle any minor browser differences. // Variables and constants var ext = ".gif"; var BTN_HIDDEN = -1; var BTN_NORMAL = 0; var BTN_RAISED = 1; var BTN_PRESSED = 2; var BTN_ROLL_PRESSED = 3; var BTN_DISABLED = 4; var STATUS_HIDDEN = -1; var STATUS_NORMAL = 0; var STATUS_PRESSED = 1; var STATUS_DISABLED = 2; var IDX_DEFAULT = 0; var IDX_DISABLED = 1; var ACT_PANE_GROUP = 0; var xtabButtonItem; var chartButtonItem; var displayOptionsButtonItem; var zeroSuppressionButtonItem; var helpButtonItem; var getDataAltImg = "data_now"; var toolBarImages = new Array(); var toggleGroups = new Array(); var ZS_PRESSED = 0; var ETS_PRESSED = 0; var ZS_ICON = ""; var ETS_ICON = ""; var hourglass = new Image(); // Used to keep track of original (set by server) enabled/disabled values for toolbarbuttons // since we may dynamically disbale buttons. var originalButtonStates = new Array(); var intialized = false; // ButtonName FileName Mod1 Mod2 var buttonRules =[ [ "xtab", "xtab", [ "" ] ], [ "ftab", "ftab", [ "", "_no" ] ], [ "menu", "arrow", [ "" ] ], [ "bar", "bar", [ "", "_no" ] ], [ "pie", "pie", [ "", "_no" ] ], [ "cluster", "cluster", [ "", "_no" ] ], [ "stack", "stack", [ "", "_no" ] ], [ "line", "line", [ "", "_no" ] ], [ "3d", "3d", [ "", "_no" ] ], [ "sline", "sline", [ "", "_no" ] ], [ "scatter", "scatter", [ "", "_no" ] ], [ "correlation", "correlation", [ "", "_no" ] ], [ "displayoption", "display_options", [ "", "_no" ] ], [ "chartoption", "options", [ "", "_no" ] ], [ "xtaboption", "options", [ "", "_no" ] ], [ "displayoptionmenu","display_options_menu", [ "" ] ], [ "splitview", "split_view", [ "", "_no" ] ], [ "edittitle", "edit_title", [ "", "_no" ] ], [ "calculation", "calculation", [ "", "_no" ] ], [ "rank", "rank", [ "", "_no" ] ], [ "hideshow", "hide_show", [ "", "_no" ] ], [ "customsubset", "custom_subset", [ "", "_no" ] ], [ "swap", "swap", [ "" ] ], [ "zero", "zero", [ "" ] ], [ "rows_only", "zero_rows", [ "" ] ], [ "columns_only", "zero_cols", [ "" ] ], [ "f8020", "f8020", [ "", "_no" ] ], [ "except", "except", [ "" ] ], [ "customexception", "customex", [ "" ] ], [ "bookmark", "bookmark", [ "", "_no" ] ], [ "explain", "explain", [ "" ] ], [ "find", "find", [ "", "_no" ] ], [ "drillthrough", "drillthru", [ "", "_no" ] ], [ "help", "help", [ "" ] ], [ "file", "file", [ "", "_no" ] ], [ "save", "save", [ "", "_no" ] ], [ "saveas", "saveas", [ "", "_no" ] ], [ "custom1", "custom1", [ "" ] ], [ "custom2", "custom2", [ "" ] ], [ "custom3", "custom3", [ "" ] ], [ "custom4", "custom4", [ "" ] ], [ "custom5", "custom5", [ "" ] ], [ "custom6", "custom6", [ "" ] ], [ "custom7", "custom7", [ "" ] ], [ "custom8", "custom8", [ "" ] ] ]; function winFocus(w){ if( w != null && w.focus != null ) { w.focus(); } } //In order to add a new button or change an image, modify this function. function InitializeToolbar(forceBestEffort) { if (!forceBestEffort && !checkAllButtonPropertiesLoaded()) { topparent.notifyFrameNotYetLoaded(); return; } addButtonToPreloadArray(); //Initialize the menus intializeToolbarMenus(); xtabButtonItem = getActiveMenuIndex("xtab"); chartButtonItem = getActiveMenuIndex("chart"); zeroSuppressionButtonItem = getActiveMenuIndex("zero"); helpButtonItem = getFirstMenuIndex("help"); //Set each button to its correct image setAllButtons(); setHelpButtonStatusMsg(); //Set up the toggle groups addToToggleGroup("calculation", ACT_PANE_GROUP); addToToggleGroup("rank", ACT_PANE_GROUP); addToToggleGroup("hideshow", ACT_PANE_GROUP); addToToggleGroup("customexception", ACT_PANE_GROUP); //addToToggleGroup("explain", ACT_PANE_GROUP); //addToToggleGroup("find", ACT_PANE_GROUP); addToToggleGroup("customsubset", ACT_PANE_GROUP); initialized = true; } //Modify this function to add/remove or modify toolbar menus function intializeToolbarMenus() { //Initialize menu images addMenuItem("xtab", "xtab", "xtab", "setXtabButton('xtab');doit('OY:0');"); addMenuItem("xtab", "ftab", "ftab", "setXtabButton('ftab');doit('OY:9');"); addMenuItem("xtab", "xtaboption", "options", "doit('MB')"); addMenuItem("chart", "bar", "bar", "setChartButton('bar');doit('OY:2')"); addMenuItem("chart", "pie", "pie", "setChartButton('pie');doit('OY:1')"); addMenuItem("chart", "cluster", "cluster", "setChartButton('cluster');doit('OY:3')"); addMenuItem("chart", "stack", "stack", "setChartButton('stack');doit('OY:5')"); addMenuItem("chart", "line", "line", "setChartButton('line');doit('OY:4')"); addMenuItem("chart", "3d", "3d", "setChartButton('3d');doit('OY:6')"); addMenuItem("chart", "sline", "sline", "setChartButton('sline');doit('OY:10')"); addMenuItem("chart", "scatter", "scatter", "setChartButton('scatter');doit('OY:11')"); addMenuItem("chart", "correlation", "correlation", "setChartButton('correlation');doit('OY:12')"); addMenuItem("chart", "chartoption", "options", "doit('MY')"); addMenuItem("displayoptionmenu", "displayoption","display_options", "doit('MT')"); addMenuItem("displayoptionmenu", "splitview", "split_view", "doit('OSD')"); addMenuItem("displayoptionmenu", "edittitle", "edit_title", "doit('MI')"); addMenuItem("displayoptionmenu", "getdata", "data_later", "doit('OGD')"); addMenuItem("displayoptionmenu", "reset", "reset", "doReset()"); addMenuItem("zero", "zero", "zero", "setZeroButton('zero');doit('UX:1')"); addMenuItem("zero", "rows_only", "zero_rows", "setZeroButton('rows_only');doit('UX:2')"); addMenuItem("zero", "columns_only", "zero_cols", "setZeroButton('columns_only');doit('UX:3')"); addMenuItem("zero", "options", "options", "doit('MD')"); addMenuItem("file", "pdf_options", "pdf_options", "doit('MP')"); addMenuItem("file", "savepdf", "savepdf", "ra(12)"); addMenuItem("file", "savecsv", "savecsv", "ra(1)"); addMenuItem("file", "savexls", "save_xls", "ra(11)"); addMenuItem("file", "savexlsx", "save_xlsx", "ra(13)"); addMenuItem("file", "bookmark", "bookmark", "ra(7)"); addMenuItem("file", "openas", "openas", "launchStudio('as')"); addMenuItem("file", "openrs", "openrs", "launchStudio('rs')"); addMenuItem("file", "openbua", "openbua", "launchStudio('bua')"); addMenuItem("file", "extractppx", "extractppx", "ra(98)"); addMenuItem("help", "help", "help", "doMenuHelp();"); addMenuItem("help", "find", "find", "doit('MF')"); addMenuItem("help", "explain", "explain", "doit('ME')"); } //In order to modify or add button actions, modify this function function doButtonAction(event, button) { if (typeof initialized == "undefined" || !initialized) { return false; } if (!isDisabled(button)) { switch (button.id) { case "xtab": doXtab(); break; case "chart": doChart(); break; case "displayoptionmenu": doMenuButtonAction(event, button); break; case "hideshow": toggleButton(button, true); doit('MQ'); break; case "calculation": toggleButton(button, true); doit('MC'); break; case "rank":toggleButton(button, true); doit('MO'); break; case "customsubset": toggleButton(button, true); doit('MZI'); break; case "swap": doit('EX'); break; case "zero": if (ZS_PRESSED == 1) { break; } toggleButton(button, true); doZeroSuppression();DisableZS(); break; case "f8020": if (ETS_PRESSED == 1) { break; } toggleButton(button, true); doit('OETS:1');DisableETS(); break; case "except": toggleButton(button, true); doit('OEX'); break; case "customexception": toggleButton(button, true); doit('MX'); break; case "drillthrough": ra(4); break; case "help": doHelp(); break; case "file": doMenuButtonAction(event, button); break; case "save": doit('RU:1'); fh.CO.value = ""; break; case "saveas": doParent('RU:0'); break; case "custom1": custom1(); break; case "custom2": custom2(); break; case "custom3": custom3(); break; case "custom4": custom4(); break; case "custom5": custom5(); break; case "custom6": custom6(); break; case "custom7": custom7(); break; case "custom8": custom8(); break; } } setStatusBar(button); } //Used to handle Buttons that change according to selected menu item. function getButtonId(button) { if (button.id == "xtab" && (xtabButtonItem != -1)) { return toolbarMenus["xtab"][xtabButtonItem]._name; } else if (button.id == "chart" && (chartButtonItem != -1)){ return toolbarMenus["chart"][chartButtonItem]._name; } else if (button.id == "zero" && (zeroSuppressionButtonItem != -1)) { return toolbarMenus["zero"][zeroSuppressionButtonItem]._name; } else if (button.id == "help" && (helpButtonItem != -1)) { return toolbarMenus["help"][helpButtonItem]._name; } else { return button.id; } } function doChart() { //Get the present menu item's action and perform it. eval(toolbarMenus["chart"][chartButtonItem]._action); } function doXtab() { //Get the present menu item's action and perform it. eval(toolbarMenus["xtab"][xtabButtonItem]._action); } function doHelp() { if (toolbarMenus["help"][helpButtonItem]._name == "help") { help(topparent.getXtabFrame().document.fhidden.LA.value); } else { eval(toolbarMenus["help"][helpButtonItem]._action); } } function doMenuHelp() { //In order to ensure the correct relative URL when the CCL help function //is called, invoke the onclick of the toolbar button directly. var button = document.getElementById("help"); if (button.fireEvent) { button.fireEvent('onclick'); } else { var eventObject = document.createEvent('MouseEvents'); eventObject.initMouseEvent('click',true,true,window,0,0,0,0,0,false,false,false,false,0,null); button.dispatchEvent(eventObject); } } function doZeroSuppression() { //Get the present menu item's action and perform it. eval(toolbarMenus["zero"][zeroSuppressionButtonItem]._action); } function doMenuOrButton(event, button) { //If we have only 1 menu item, then execute it. Otherwise display the menu. if (getNumMenuItems(button.id) == 1) { eval(toolbarMenus[button.id][getFirstMenuIndex(button.id)]._action); } else { doMenuButtonAction(event, button.nextSibling); } } function setChartButton(menuName) { var chartMenu = toolbarMenus["chart"]; if (menuName) { for (var i = 0; i < chartMenu.length; i++) { if (chartMenu[i]._name == menuName) { chartButtonItem = i; } } } var button = document.getElementById("chart"); if (chartButtonItem >= 0) { button.setAttribute("help",chartMenu[chartButtonItem]._help); } setButton(button,getButtonState(button)); } function setXtabButton(menuName) { var xtabMenu = toolbarMenus["xtab"]; if (menuName) { for (var i = 0; i < xtabMenu.length; i++) { if (xtabMenu[i]._name == menuName) { xtabButtonItem = i; } } } var button = document.getElementById("xtab"); if (xtabButtonItem >= 0) { button.setAttribute("help",xtabMenu[xtabButtonItem]._help); } setButton(button,getButtonState(button)); } function setZeroButton(menuName) { var zeroMenu = toolbarMenus["zero"]; if (menuName) { for (var i = 0; i < zeroMenu.length; i++) { if (zeroMenu[i]._name == menuName) { zeroSuppressionButtonItem = i; } } } var button = document.getElementById("zero"); if (zeroSuppressionButtonItem >= 0) { button.setAttribute("help",zeroMenu[zeroSuppressionButtonItem]._help); } if (isToggled(button)) { setButton(button,getButtonState(button)); } else if (menuName) { toggleButton(button,true); } } function setHelpButtonStatusMsg() { var helpMenu = toolbarMenus["help"]; var button = document.getElementById("help"); if (helpButtonItem >= 0) { button.setAttribute("help", helpMenu[helpButtonItem]._help); button.setAttribute("title", helpMenu[helpButtonItem]._label); } } function isToggled(button) { return (button.getAttribute("isToggled") == "true"); } function setToggled(button, toggled) { if (toggled) { button.setAttribute("isToggled", "true"); } else { button.setAttribute("isToggled", "false"); } } function toggleButton(button, untoggleable) { if (topparent.getXtabFrame()) { if (!isToggled(button)) { setToggled(button, true); setButton(button, getButtonState(button)); var buttonsInGroup = toggleGroups[parseInt(button.getAttribute("toggleGroup"))]; if (buttonsInGroup != null) { for (var i = 0; i < buttonsInGroup.length; i++) { if (buttonsInGroup[i] != button.id) unToggleButton(document.getElementById(buttonsInGroup[i])); } } } else if (untoggleable) { unToggleButton(button); } } } function unToggleButton(button) { if (isToggled(button)) { setToggled(button, false); setButton(button, getButtonState(button)); } } function addToToggleGroup(name, group) { if (toggleGroups[group] == null) { toggleGroups[group] = new Array(); } toggleGroups[group][toggleGroups[group].length] = name; document.getElementById(name).setAttribute("toggleGroup",group); } function addMenuItem(menuName, menuItemName, icon, action, checked) { var menuArray = toolbarMenus[menuName]; var menuItem; for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._name == menuItemName) { menuArray[i]._img = icon + ext; menuArray[i]._action = action; return; } } } function getFirstMenuIndex(menuName) { var menuArray = toolbarMenus[menuName]; for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._state != STATUS_HIDDEN) { return i; } } return -1; } function getActiveMenuIndex(menuName) { var menuArray = toolbarMenus[menuName]; for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._state == STATUS_PRESSED) { return i; } } //If we get here the currently active one is not available, so //return the first visible button. for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._state == STATUS_NORMAL) return i; } //None visible, so return -1. return -1; } function getNumMenuItems(menuName) { var ctr = 0; var menuArray = toolbarMenus[menuName]; if (!menuArray) return 0; for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._state != STATUS_HIDDEN) ctr++; } return ctr; } function doMenuButtonAction(event, button) { if (topparent.getXtabFrame() && !topparent.isXtabStillLoading()) { if (typeof initialized == "undefined" || !initialized) return false; var ownerButton = getOwnerButton(button); if (!isDisabled(ownerButton)) { var menuArray = toolbarMenus[ownerButton.id]; var contextItems = new Array(); for (var i = 0; i < menuArray.length; i++) { if (menuArray[i]._state != STATUS_HIDDEN) { var funcBody = menuArray[i]._action; var func = new Function(funcBody); contextItems[contextItems.length] = new ContextItem(menuArray[i]._img, menuArray[i]._label, func, (menuArray[i]._state == STATUS_DISABLED), menuArray[i]._checked); } } ContextMenu.display(event, contextItems); } } } function toolbarMenuRecord(name,state,label,help) { this._name = name; this._state = state; this._label = label; this._help = help; this._img = null; this._action = null; } function getOwnerButton(menuButton) { if (menuButton.id == "file" || menuButton.id == "displayoptionmenu") return menuButton; else return document.getElementById(menuButton.id.substr(5,menuButton.id.length)); } function validState(state) { return (state == STATUS_HIDDEN || state == STATUS_NORMAL || state == STATUS_PRESSED || state == STATUS_DISABLED); } function checkAllButtonPropertiesLoaded() { var buttons = document.getElementById("toolbarButtons").childNodes; for (var i = 0; i < buttons.length; i++) { if (!buttons[i].id) return false; if (buttons[i].id != "sep" && buttons[i].id.indexOf("menu") != 0 && !validState(parseInt(buttons[i].getAttribute("state")))) return false; } return true; } function isMenuButton(button) { return button.id.substr(0,5) == "menu_"; } function setAllButtons() { var buttons = document.getElementById("toolbarButtons").childNodes; var sepGif = "sep.gif" var sepPath = buttonPath + sepGif; var arrowGif = "arrow.gif" var arrowPath = buttonPath + arrowGif; for (var i = 0; i < buttons.length; i++) { if (buttons[i].id == 'sep') { if (!buttons[i].src || buttons[i].src.indexOf("/" + sepGif) < 0) { buttons[i].src = sepPath; } } else if (isMenuButton(buttons[i])) { if (!buttons[i].src || buttons[i].src.indexOf("/" + arrowGif) < 0) { buttons[i].src = arrowPath; } var ownerButton = getOwnerButton(buttons[i]); if (getNumMenuItems(ownerButton.id) > 1) { if (parseInt(ownerButton.getAttribute("state")) == STATUS_PRESSED) { setButton(buttons[i],BTN_NORMAL); } else { setButton(buttons[i],getImgType(ownerButton)); } } else { setButton(buttons[i],BTN_HIDDEN); } } else { setButton(buttons[i],getImgType(buttons[i])); if (buttons[i].getAttribute("state") != STATUS_PRESSED) { unToggleButton(buttons[i]); } else if (!isToggled(buttons[i])) { toggleButton(buttons[i], true); } // Store the original state of all toolbar buttons. originalButtonStates[buttons[i].id] = parseInt(buttons[i].getAttribute("state")) } } var buttons = document.getElementById("custom_toolbarButtons").childNodes; for (var i = 0; i < buttons.length; i++) { setButton(buttons[i],getImgType(buttons[i])); } var buttons = document.getElementById("right_toolbarButtons").childNodes; for (var i = 0; i < buttons.length; i++) { if (buttons[i].id == 'sep') { buttons[i].src = buttonPath + "/sep.gif"; } else { setButton(buttons[i],getImgType(buttons[i])); } } hourglass.src = buttonPath + "/hourglass.gif"; } function getImgType(button) { switch (parseInt(button.getAttribute("state"))) { case STATUS_HIDDEN: return BTN_HIDDEN; case STATUS_NORMAL: return BTN_NORMAL; case STATUS_PRESSED: return BTN_PRESSED; case STATUS_DISABLED: return BTN_DISABLED; } } function addButtonToPreloadArray() { for (var i = 0; i < buttonRules.length; i++) { toolBarImages[i] = new Array(); for ( var j = 0; j < buttonRules[i][2].length; j++ ) { var btnImage = new Image(); btnImage.src = buttonPath + buttonRules[i][1] + buttonRules[i][2][j] + ext; toolBarImages[j][buttonRules[i][0]] = btnImage; } } } function setButton(button, type) { var id = getButtonId(button); if (type != BTN_HIDDEN) { var arrayIdx = IDX_DEFAULT; if (type == BTN_DISABLED) arrayIdx = IDX_DISABLED; if (button.id.substr(0,5) != "menu_") { //check if the button has been loaded if (toolBarImages[arrayIdx][id]) { if (button.src != toolBarImages[arrayIdx][id].src) { button.src = toolBarImages[arrayIdx][id].src; } button.width = buttonSize; if (button.getAttribute("menu_integrated") == "true") { button.width += 10; } } } else { //check if the button has been loaded if (toolBarImages[arrayIdx]["menu"]) { if (button.src != toolBarImages[arrayIdx]["menu"].src) { button.src = toolBarImages[arrayIdx]["menu"].src; } button.width = "10"; } } button.className = getButtonClass(type); button.style.visibility = "visible"; } else { button.width = "0"; button.style.visibility = "hidden"; } } function getButtonClass(type) { switch (type) { case BTN_RAISED: return "toolbarButtonRollOver"; case BTN_PRESSED: return "toolbarButtonPressed"; case BTN_ROLL_PRESSED: return "toolbarButtonRollOverPressed"; case BTN_DISABLED: return "toolbarButtonDisabled"; } return "toolbarButtonNormal"; } function isDisabled(button) { return (button.getAttribute("state") == STATUS_DISABLED); } // Sets the button state. state is one of STATUS_* function setButtonState(button, state) { button.setAttribute("state",state); setButton(button,getImgType(button)); } function isHidden(button) { return (button.getAttribute("state") == STATUS_HIDDEN); } function setRollOver(button, rollover) { if (rollover) { button.setAttribute("rollover","true"); } else { button.setAttribute("rollover","false"); } } function isRollOver(button) { return (button.getAttribute("rollover") == "true"); } function getButtonState(button) { if (isHidden(button)) return BTN_HIDDEN; if (isDisabled(button)) return BTN_DISABLED; if (isToggled(button)) { if (isRollOver(button)) { return BTN_ROLL_PRESSED; } else { return BTN_PRESSED; } } else { if (isRollOver(button)) { return BTN_RAISED; } else { return BTN_NORMAL; } } } function setStatusBar(button) { if (getButtonState(button) == BTN_ROLL_PRESSED && button.getAttribute("pressedHelp")) window.status = CEncodingUtil.ForceUnescape(button.getAttribute("pressedHelp")); else window.status = CEncodingUtil.ForceUnescape(button.getAttribute("help")); } function buttonMouseOver(event, button) { if (typeof initialized == "undefined" || !initialized) return false; if (!isDisabled(button)) { setRollOver(button, true); setButton(button, getButtonState(button)); } setStatusBar(button); //BF 530075 - allow status bar messages for disabled buttons return true; } function buttonMouseOut(event, button) { if (typeof initialized == "undefined" || !initialized) return false; if (!isDisabled(button)) { setRollOver(button, false) setButton(button, getButtonState(button)); window.status = ""; } return true; } function buttonMouseOverMenu(event, button) { if (typeof initialized == "undefined" || !initialized) return false; var ownerButton = getOwnerButton(button); //Check the owner button var ownerButton = getOwnerButton(button); if (!isDisabled(ownerButton)) { setButton(ownerButton, getButtonState(ownerButton)); setButton(button, BTN_RAISED); } } function buttonMouseOutMenu(event, button) { if (typeof initialized == "undefined" || !initialized) return false; var ownerButton = getOwnerButton(button); //Check the owner button var ownerButton = getOwnerButton(button); if (!isDisabled(ownerButton)) { setButton(ownerButton, getButtonState(ownerButton)); setButton(button, BTN_NORMAL); } } function sync_menu(menu, syncArray) { for (var i = 0; i < menu.length; i++) { menu[i]._state = parseInt(syncArray[i]); } } function sync(){ var menuMax = 13; var xtabFrame = topparent.getXtabFrame(); var arrayIconState = topparent.getGlobal("gIconState"); var i = 0; var buttons = document.getElementById("toolbarButtons").childNodes; for (var j = 0; j < buttons.length; j++) { if (buttons[j].id != 'sep' && !isMenuButton(buttons[j])) { buttons[j].setAttribute("state",arrayIconState[i++]); } } buttons = document.getElementById("right_toolbarButtons").childNodes; for (var j = 0; j < buttons.length; j++) { if (buttons[j].id != 'sep' && !isMenuButton(buttons[j])) { buttons[j].setAttribute("state",arrayIconState[i++]); } } buttons = document.getElementById("custom_toolbarButtons").childNodes; for (var j = 0; j < buttons.length; j++) { if (buttons[j].id != 'sep' && !isMenuButton(buttons[j])) { buttons[j].setAttribute("state",arrayIconState[i++]); } } sync_menu(toolbarMenus["xtab"],topparent.getGlobal("gMenuState[0]")); sync_menu(toolbarMenus["chart"],topparent.getGlobal("gMenuState[1]")); sync_menu(toolbarMenus["displayoptionmenu"],topparent.getGlobal("gMenuState[2]")); sync_menu(toolbarMenus["zero"],topparent.getGlobal("gMenuState[3]")); sync_menu(toolbarMenus["file"],topparent.getGlobal("gMenuState[4]")); sync_menu(toolbarMenus["help"],topparent.getGlobal("gMenuState[5]")); xtabButtonItem = getActiveMenuIndex("xtab"); chartButtonItem = getActiveMenuIndex("chart"); zeroSuppressionButtonItem = getActiveMenuIndex("zero"); helpButtonItem = getFirstMenuIndex("help"); setAllButtons(); setXtabButton(); setChartButton(); setZeroButton(); setHelpButtonStatusMsg(); fh=xtabFrame.fhidden; winFocus(xtabFrame); } /********* Action Pane Handling routines **************/ function clearToggleButton() { //Clear the action pane buttons var buttonsInGroup = toggleGroups[ACT_PANE_GROUP]; if (buttonsInGroup != null) { for (var i = 0; i < buttonsInGroup.length; i++) { unToggleButton(document.getElementById(buttonsInGroup[i])); } } } function updateToggleButton(actionPaneIndex) { //Clears all except button corresponding to the acion pane given var ACT_PANE_FIND = "1"; var ACT_PANE_HIDESHOW = "2"; var ACT_PANE_EXPLAIN = "4"; var ACT_PANE_CALCULATION = "7"; switch (actionPaneIndex) { case ACT_PANE_FIND: toggleButton(document.getElementById("find"), false); break; case ACT_PANE_HIDESHOW: toggleButton(document.getElementById("hideshow"), false); break; case ACT_PANE_EXPLAIN: toggleButton(document.getElementById("explain"), false); break; case ACT_PANE_CALCULATION: toggleButton(document.getElementById("calculation"), false); break; } } //******* Functions called from buttons or menu items ******* function doit(s){ if (topparent.getXtabFrame() && topparent.getXtabFrame().doit) topparent.getXtabFrame().doit(s); } // Gets a XTab element by its position (row, col) function GetElement( row, col ) { var elem = null; if ( topparent.getXtabFrame().xtabCache.exists(row,col) ) { elem = topparent.getXtabFrame().xtabCache.getXtabCell(row,col); } return elem; } // Get parent row of an element. // If there is no parent, returns null. function GetParentRow( element ) { var parent = null; var row = topparent.getXtabFrame().parseRowId(element.id); var col = topparent.getXtabFrame().parseColId(element.id); // Get parent if ( col > 0 ) { // Get element @ row, column - 1 col--; parent = GetElement( row, col ); // Due to spanning the parent may not be at the same row number, move up the // row numbers till we get an element at the column we want. while ( !parent && ( row > 0 ) ) { row--; parent = GetElement( row, col ); } } return parent; } // Get parent column of an element. // If there is no parent, returns null. function GetParentCol( element ) { var parent = null; var row = topparent.getXtabFrame().parseRowId(element.id); var col = topparent.getXtabFrame().parseColId(element.id); // Get parent if ( row > 0 ) { // Get element @ row - 1, column row--; parent = GetElement( row, col ); // Due to spanning the parent may not be at the same column number, move left // till we get an element at the column we want. while ( !parent && ( col > 0 ) ) { col--; parent = GetElement( row, col ); } } return parent; } // Get entire nested path i.e. parents of an element in the nested crosstab hierarchy // Returns in format (ppdsID,dimIdx/ppdsID,dimIdx/...) path // Walks up the nested rows/columns. // 1st param is element, 2nd is set to "row" walk up rows function getNestedPath( pathLeaf, rowOrCol, useSummary ) { var result = ""; var element = pathLeaf; while( element ) { if( useSummary || !element.getAttribute("summary") ) // ignore summary { // Get parent path. var curPath = ""; curPath += element.getAttribute("ppdsId"); curPath += "," + element.getAttribute("dimIdx"); // Prepend parent path. if ( result != "" ) curPath += "/"; curPath += result; // Thats our new result. result = curPath; } if ( rowOrCol == "row" ) element = GetParentRow( element ); else element = GetParentCol( element ); } return result; } // Validate current selection to see if it is consistent with Drill Through. // All elemnts in row selection & col selection should have the same parent. function ValidateSelectionForDrillThru( rowSelections, colSelections ) { var bValid = true; // be optimistic ! // All row selections must have same parent if ( rowSelections.length > 1 ) { var parentRow = GetParentRow( rowSelections[0] ); for( var i = 1; bValid && i < rowSelections.length; ++i) bValid = ( GetParentRow( rowSelections[i] ) == parentRow ); } // All column selections must have same parent if ( bValid && ( colSelections.length > 1 ) ) { var parentCol = GetParentCol( colSelections[0] ); for( var i = 1; bValid && i < colSelections.length; ++i) bValid = ( GetParentCol( colSelections[i] ) == parentCol); } // If we have both row and column slections, they must not share any dimensions // in all their nested ancestor path if ( bValid && ( rowSelections.length > 0 ) && ( colSelections.length > 0 ) ) { // Get all dimensions used by row nesting. var rowDimensions = new Array(); var curElem = rowSelections[0]; while ( curElem ) { rowDimensions[curElem.getAttribute("dimIdx")] = true; curElem = GetParentRow( curElem ); } // We should not encounter any of the row Dimensions in the column ancestor path. curElem = colSelections[0]; while ( bValid && curElem ) { if ( rowDimensions[curElem.getAttribute("dimIdx")] ) bValid = false; curElem = GetParentCol( curElem ); } } return bValid; } function OnXTabSelectionChange() { // XTab Selection has changed, Do any toolbar button updates that depend on selection here. // ---- DRILL THROUGH BUTTON >>>> // Find Original State of Drill Through button. drillThruButton = document.getElementById("drillthrough") var origState = originalButtonStates[drillThruButton.id]; switch ( origState ) { case STATUS_HIDDEN : case STATUS_DISABLED : // Cannot enable drill though button that was disabled by the server break; case STATUS_NORMAL : case STATUS_PRESSED : { // see if we need to disable/enable the button var rowSelections = topparent.getXtabFrame().getSelected("r"); var colSelections = topparent.getXtabFrame().getSelected("c"); var bOkToDrillThru = ValidateSelectionForDrillThru( rowSelections, colSelections ); if ( bOkToDrillThru ) { setButtonState( drillThruButton, origState ); topparent.enableDrill(); } else { setButtonState( drillThruButton, STATUS_DISABLED ); topparent.disableDrill(); } break; } } // ---- DRILL THROUGH BUTTON <<<< } // Borrowed and modified from Custom Exceptions (custexcept.js -> buildSelectionString). // Returns current selection in as a list of tab separated (ppdsID,dimIdx/ppdsID,dimIdx/...) path pairs. function encodeSelectionForDrillThru() { var result = ""; var rowSelections = topparent.getXtabFrame().getSelected("r"); var colSelections = topparent.getXtabFrame().getSelected("c"); //result = "ROWS --> "; for(var i = 0; i < rowSelections.length; ++i) { // Add nested path. result += getNestedPath( rowSelections[i], "row", false) + "\t"; } //result += "COLS --> "; for(var i = 0; i < colSelections.length; ++i) { // Add nested path. result += getNestedPath( colSelections[i], "col", false) + "\t"; } //make sure we return a space as the value, or the parameter will get stripped //by the XSL transform the next time through if (result == "") return " "; return result; } function ra(as){ var fh = topparent.getXtabFrame().document.fhidden; if ( !topparent.getXtabFrame()._fhchanged ) { topparent.getXtabFrame()._fhchanged = true; topparent.getXtabFrame()._fhtarget = fh.target; topparent.getXtabFrame()._fhaction = fh.action; topparent.getXtabFrame()._fhRA = fh.RA.value; } var RA_CSV = 1, RA_XLS = 11, RA_PDF = 12, RA_DRILLTHRU = 4, RA_BOOKMARK = 7, RA_SPECS = 98, RA_XLSX=13; if( as == RA_CSV || as == RA_PDF || as == RA_DRILLTHRU || as == RA_BOOKMARK || as == RA_XLS ||as==RA_XLSX || RA_SPECS) { FTok = false; fh.RA.value = as; var targetWindow = topparent; if( ! targetWindow.name || targetWindow.length == 0 ) targetWindow.name = "PPESTarget"; fh.target = targetWindow.name; if( as == RA_BOOKMARK ) { if( parent.parent != parent ) { fh.target = "_blank"; // open a new window because bookmarks set the location } fh.HTTPSBM.value = location.protocol.toLowerCase(); } else if( as == RA_CSV ) { resetExportVars(fh); fh.action += "?MIME=.CSV"; } else if( as == RA_SPECS ) { /* Show Specs (PPX & CFX) */ fh.target = "_blank"; } else if( as == RA_XLS ) { resetExportVars(fh); fh.action += "?MIME=.XLS"; fh.CNCT.value = 24; } else if( as == RA_XLSX ) { resetExportVars(fh); fh.action += "?MIME=.XLSX"; fh.CNCT.value = 24; } else if( as == RA_PDF ) { resetExportVars(fh); fh.action += "?MIME=.PDF"; } else if ( as == RA_DRILLTHRU ) { var selStr = encodeSelectionForDrillThru(); fh.DTSEL.value = selStr; fh.target = "_blank"; } if( as == RA_PDF && document.cookie.length != 0 && getCookie("PageOrientation") ) { submitExportIcon( topparent.getXtabFrame() ); } else { topparent.getXtabFrame().parseAndSubmit(fh); } } else { // We're not expecting it -- eat it } } // It will clear the MiME type and CO value function resetExportVars(fh) { fh.action = fh.action.replace(/\?MIME=.CSV|\?MIME=.XLSX|\?MIME=.XLS|\?MIME=.PDF/gi, ''); fh.CO.value = ""; } function launchStudio(studio) { var fh = topparent.getXtabFrame().document.fhidden; switch (studio) { case 'as': doParent('RU:4', '_blank'); break; case 'rs': doParent('RU:3', '_blank'); break; case 'bua': doParent('RU:7', '_blank'); break; default: break; } fh.CO.value = ""; // Cleanup } function doParent(action, target){ if (topparent.getXtabFrame()) { topparent.getXtabFrame().doParent(action, target); } } function ret() { if( document.pqr != null ) { document.pqr.submit(); } } function doReset() { if(topparent.getXtabFrame() && document.reset != null ) { topparent.getXtabFrame().parseAndSubmit(document.reset); } } function ButtonEnable() { if (ZS_PRESSED == 1) { restoreZSButton(); } if (ETS_PRESSED == 1) { restoreETSButton(); } } function restoreZSButton() { ZS_PRESSED = 0; if (ZS_ICON != "") { document.getElementById("zero").src = ZS_ICON; ZS_ICON = ""; } } function restoreETSButton() { ETS_PRESSED = 0; if ( ETS_ICON != "" ) { document.getElementById("f8020").src = ETS_ICON; ETS_ICON = ""; } } function DisableZS() { ZS_PRESSED = 1; setTimeout( "setWorking('zs');", 1000 ); } function DisableETS() { ETS_PRESSED = 1; setTimeout( "setWorking('ets');", 1000 ); } function setWorking(button) { switch(button) { case 'zs': { if (ZS_PRESSED == 1) { var button = document.getElementById("zero"); ZS_ICON = button.src; button.src = hourglass.src; } break; } case 'ets': { if (ETS_PRESSED == 1) { var button = document.getElementById("f8020"); ETS_ICON = button.src; button.src = hourglass.src; } break; } } }