// Licensed Materials - Property of IBM // // IBM Cognos Products: pps // // (C) Copyright IBM Corp. 2005, 2017 // // 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 the Custom Subsets pane of // PowerPlay Studio. // The functions handle any minor browser differences. var DIMCACHE_LOAD_DELAY = 100; var PRELOAD_LOADING_DELAY = 500; var metaDataPreloaded = false; var preloadMetadata = null; var csData = new CSData(); var csResults = new CSResults(); var SelectedSearchDef = -1; var CS_DEFAULT_TYPE = 3; var CS_RULE_RANGE = 0; var CS_RULE_COUNT = 1; var CS_END_TOP = 0; var CS_END_BOTTOM = 1; var actionsEnabled = true; var pickedCats = new Array(); var hierRootPath = new Array(); var resultsEmpty = true; var scopeTreeComboBox; var numWarningMessages; var measureCatTypeDiv; var measureCatRangeSection; var measureCatNumberSection; var MEASURE_TYPE_RANGE = 0; var MEASURE_TYPE_NUMBER = 1; //********************************* // Common methods //********************************* var dimensions = new Array(); function init() { topparent.openActionPane(); ContextMenu.initialize(true,false); if (wizardPane != "R") topparent.setActionPaneHeight("315"); else topparent.setActionPaneHeight("180"); if (preloadMetadata) { metaDataPreloaded = false; //we need to ensure that the dimCache has preloaded the necessary information. displayCommonMessage(strLoading, MESSAGE_TYPE_SIMPLE, [], []); preload_next_metaData_chunk(0,0); } else metaDataPreloaded = true; init_customSubset_pane(); } function init_customSubset_pane() { if (metaDataPreloaded) { removeMessage(); switch (wizardPane) { case "I": //Init init_init(); break; case "N": //Name Definition init_name_def(); break; case "M": //Measure Definition init_measure_def(); break; case "P": //PickList init_picklist(); break; case "R": //Rename init_rename(); break; } numWarningMessages = warningMessage.length; displayNextWarningMessage(); } else { setTimeout("init_customSubset_pane()",PRELOAD_LOADING_DELAY); } } function cleanup() { switch (wizardPane) { case "M": clearFlyouts(); if (measureTree) measureTree.clearTreeContainer(); case "N": if (scopeTree) scopeTree.clearTreeContainer(); break; case "P": if (pickTree) pickTree.clearTreeContainer(); break; } } function displayNextWarningMessage() { //take the last one on the list if (numWarningMessages) { if (warningMessageCancel[numWarningMessages - 1]) displayCommonMessage(warningMessage[numWarningMessages - 1], MESSAGE_TYPE_INFO, [message_ok_button_text, message_cancel_button_text], [function() {removeMessage();displayNextWarningMessage();}, function() {topparent.closeActionPane();}]); else displayCommonMessage(warningMessage[numWarningMessages - 1], MESSAGE_TYPE_INFO, [message_ok_button_text], [function() {removeMessage();displayNextWarningMessage();}]); numWarningMessages--; } } function goto_page(page) { if ((wizardPane == "I" && !validate_Init()) || (wizardPane == "M" && page == "P" && !validate_measure()) || (wizardPane == "N" && page == "P" && !validate_name())) return false; if (wizardPane == "M") setMeasureDefinitionData(); if (wizardPane != "I") var subsetType = csData.getType(); else { if (document.getElementById("methodRadioName").checked) subsetType = "1"; else if (document.getElementById("methodRadioMeasure").checked) subsetType = "2"; else subsetType = "3"; if (subsetType != csData.getType() || document.getElementById("subsetDim").selectedIndex != csData.getDimension()) csData.clearData(); csData.setName(document.getElementById("subsetName").value); csData.setDimension(document.getElementById("subsetDim").selectedIndex); } cmd = "MZ" + page + ":" + csData.makeCommonCommand(subsetType); cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand(); topparent.getXtabFrame().doit(cmd); } function submit_page() { if ((wizardPane == "P" && !validate_pickList()) || (wizardPane == "M" && !validate_measure()) || (wizardPane == "N" && !validate_name())) return false; if (wizardPane == "R") csData.setName(document.getElementById("subsetName").value); topparent.closeActionPane(); var subsetType = csData.getType(); if (wizardPane.charAt(0) == "N") subsetType = "1"; else if (wizardPane.charAt(0) == "M") subsetType = "2"; cmd = "Z"; if (wizardPane == "R") cmd += "R"; else if (csData.isEditing()) cmd += "E"; else cmd += "C"; cmd += ":" + csData.makeCommonCommand(subsetType); cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand(); topparent.getXtabFrame().doit(cmd); } function cancelEventBubble(event) { var eventM = new eventManager(event); eventM.cancelBubble(); } function displayCustomsubsetsMsg(msg) { displayCommonMessage(msg, MESSAGE_TYPE_INFO, [message_ok_button_text], [function() {removeMessage();}]); } function clearCustomsubsetsMsg() { removeMessageDiv(); } //Meta Data preloading function metaDataCat(dim, catCode) { this.dim = dim; this.code = catCode; } function preload_next_metaData_chunk(firstIdx, secondIdx) { if (preloadMetadata[firstIdx]) { var subArray = preloadMetadata[firstIdx]; //Check if we have this item in the dimCache. while (subArray[secondIdx] && dimCache.getCategory(subArray[secondIdx].dim,subArray[secondIdx].code)) { secondIdx += 1; } if (subArray[secondIdx]) { //We found an item that was not loaded. //get the parent category (must be loaded); var parent = dimCache.getCategory(subArray[secondIdx - 1].dim, subArray[secondIdx - 1].code); parent.loadChildren(); setTimeout("preload_next_metaData_chunk(" + firstIdx + "," + secondIdx + ");", DIMCACHE_LOAD_DELAY); return; } else { preload_next_metaData_chunk(firstIdx + 1, 0); } } else { //All metadata preloaded metaDataPreloaded = true; } } //*************************** // Comon Data object //*************************** function CSData() { var code = ""; var name = ""; var dimension = 0; var searchDefs = new Array(); var numSearchDefs = 0; var searchRule = null; var exclusions = new cat_collection(); var pickList = new cat_collection(); var CSType = CS_DEFAULT_TYPE; var crc32 = 0; var useShortNames = false; this.setcode = function(Code) { code = Code; } this.setcrc32 = function(idx) { crc32 = idx; } this.isEditing = function() { return (code != ""); } this.setUseShortNames = function(useShort) { useShortNames = useShort; } this.isUsingShortNames = function() { return useShortNames; } this.setName = function(Name) { name = Name; } this.getName = function() { return name; } this.setDimension = function(Dim) { dimension = Dim; } this.getDimension = function() { return parseInt(dimension); } this.setType = function(type) { type = parseInt(type); if (type <= 3 && type >= 0) { CSType = type; } } this.getType = function() { return CSType; } this.addSearchDef = function(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc,itemNum) { var increment = (itemNum == numSearchDefs); searchDefs[itemNum] = new search_def(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc); if (increment) numSearchDefs++; } this.searchDefToString = function(idx) { var string = templateSearchDefStr; switch (searchDefs[idx].opCode) { case 0: string = string.replace(/%0/,containsString); break; case 1: string = string.replace(/%0/,beginsString); break; case 2: string = string.replace(/%0/,endsString); break; } string = string.replace(/%1/,searchDefs[idx].text); string = string.replace(/%2/,searchDefs[idx].ancestorLabel); switch (searchDefs[idx].incDesc) { case 0: string = string.replace(/%3/,strShortChildren); case 1: string = string.replace(/%3/,strShortAllDesc); case 2: string = string.replace(/%3/,strShortLeaves); case 3: string = string.replace(/%3/, strShortNonLeaves); } return string; } this.getSearchDef = function(idx) { return searchDefs[idx]; } this.removeSearchDef = function(idx) { if (idx < numSearchDefs) { for (var i = idx; i < numSearchDefs - 1;i++) { searchDefs[i] = searchDefs[i+1]; } numSearchDefs--; } } this.numSearchDefs = function() { return numSearchDefs; } this.setSearchRule = function(Measure, MeasureCode, IncDesc, AncestorCode, AncestorId) { searchRule = new search_rule(Measure, MeasureCode, 0, null, IncDesc, AncestorCode, AncestorId, new Array()); } this.setSearchRuleRange = function( From, To, IsMin, IsMax ) { if (searchRule) { searchRule.type = CS_RULE_RANGE; searchRule.rule = new search_rule_range(From, To, IsMin, IsMax) } } this.setSearchRuleCount = function( End, Number ) { if (searchRule) { searchRule.type = CS_RULE_COUNT; searchRule.rule = new search_rule_count(End, Number); } } this.getSearchRule = function() { return searchRule; } this.addSearchRuleFilter = function(filter) { searchRule.filters[searchRule.filters.length] = filter; } this.addExclusion = function(exclusion) { exclusions.addItem(exclusion); } this.removeExclusion = function(exclusion) { exclusions.removeItem(exclusion); } this.isAnExclusion = function(exclusion) { return exclusions.isInCollection(exclusion); } this.addPickListCategory = function(cat, beforeCat) { pickList.addItem(cat, beforeCat); } this.removePicklistCategory = function(cat) { pickList.removeItem(cat); } this.isAPicklistCategory = function(cat) { return pickList.isInCollection(cat); } this.clearData = function() { numSearchDefs = 0; searchRule = null; exclusions = new cat_collection(); pickList = new cat_collection(); searchResults = new Array(); } this.makeAncestorPathCommand = function() { var cmd = "\t{\t\"A\"\t"; for (var i = 0; i < hierRootPath.length; i++) cmd += topparent.getGlobal("dimCache").getCategory(dimension,hierRootPath[i]).getPPDSID() + "\t"; cmd += "}"; return cmd; } this.makeCommonCommand = function(subsetType) { var cmd = ""; cmd += "\"" + code + "\"\t"; cmd += subsetType + "\t"; cmd += "\"" + CEncodingUtil.EncodeStrOperand(name) + "\"\t"; cmd += dimension + "\t"; var shn = "0"; var hiddenForm = topparent.getXtabFrame().document.fhidden; if (hiddenForm && hiddenForm.SHN != "undefined" && hiddenForm.SHN != null && hiddenForm.SHN.value == 1) shn = "1"; cmd += shn + "\t"; cmd += crc32; // Write out the Ancestor Path cmd += this.makeAncestorPathCommand(); return cmd; } this.makeSearchDefsCommand = function() { var cmd = "\t{\t\"N\"\t"; for (var i = 0; i < numSearchDefs; i++) { cmd += "\"" + CEncodingUtil.EncodeStrOperand(searchDefs[i].text) + "\"\t" + searchDefs[i].opCode + "\t" + searchDefs[i].ancestor + "\t" + searchDefs[i].incDesc + "\t"; } cmd += "}"; return cmd; } this.makeSearchRuleCommand = function() { var cmd = ""; if (CSType == 2 && searchRule != null) { cmd += "\t{\t\"M\"\t" + searchRule.type + "\t" + searchRule.measure + "\t\"\"\t0"; switch (searchRule.type) { case CS_RULE_RANGE: cmd += makeSearchRuleRangeCommand(); break; case CS_RULE_COUNT: cmd += makeSearchRuleCountCommand(); break; } cmd += "\t" + searchRule.incDesc + "\t" + searchRule.ancestorId; cmd += makeSearchRuleFiltersCommand(); cmd += "\t}"; } else { cmd += "\t{\t\"M\"\t}"; } return cmd; } function makeSearchRuleRangeCommand() { var cmd = ""; if (searchRule != null && searchRule.rule != null && searchRule.type == CS_RULE_RANGE) cmd += "\t{\t\"r\"\t\"" + searchRule.rule.from + "\"\t\"" + searchRule.rule.to + "\"\t" + searchRule.rule.isMin + "\t" + searchRule.rule.isMax + "\t}"; return cmd; } function makeSearchRuleCountCommand() { var cmd = ""; if (searchRule != null && searchRule.rule != null && searchRule.type == CS_RULE_COUNT) cmd += "\t{\t\"c\"\t" + searchRule.rule.end + "\t" + searchRule.rule.number + "\t}"; return cmd; } function makeSearchRuleFiltersCommand() { var cmd = ""; if (searchRule != null && searchRule.filters.length) { cmd += "\t{\t\"f\"\t"; for (var i = 0; i < searchRule.filters.length; i++) cmd += searchRule.filters[i] + "\t"; cmd += "}"; } return cmd; } this.makeExclusionsCommand = function() { var cmd = ""; cmd += "\t{\t\"P\"\t1\t"; for (var i = 0; i < exclusions.numItems(); i++) { cmd += exclusions.getItem(i) + "\t"; } cmd += "}"; return cmd; } this.makePickListCommand = function() { var cmd = ""; cmd = "\t{\t\"P\"\t0\t"; for (var i = 0; i < pickList.numItems(); i++) { cmd += pickList.getItem(i) + "\t"; } cmd += "}"; return cmd; } } function CSResults() { var results = new Array(); this.addResult = function(Id, Label, Code, IsLeaf, IsCalculated, fullPath, SearchResult, Picked, Excluded) { results[results.length] = new search_cat(Id, Label, Code, IsLeaf, IsCalculated, fullPath, SearchResult, Picked, Excluded); } this.getResult = function(Idx) { return results[Idx]; } this.numResults = function() { return results.length; } } function search_def(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc) { this.text = String; this.opCode = OpCode; this.ancestor = Ancestor; this.ancestorLabel = AncestorLabel; this.ancestorCode = AncestorCode; this.incDesc = IncDesc; } function search_rule(Measure, MeasureCode, Type, Rule, IncDesc, AncestorCode, AncestorId, Filters) { this.measure = Measure; this.measureCode = MeasureCode; this.type = Type; this.rule = Rule; this.incDesc = IncDesc; this.ancestorCode = AncestorCode; this.ancestorId = AncestorId; this.filters = Filters; } function search_rule_range(From, To, IsMin, IsMax) { this.from = From; this.to = To; this.isMin = IsMin; this.isMax = IsMax; } function search_rule_count(End, Number) { this.end = End; this.number = Number; } function search_cat(Id, Label, Code, IsLeaf, IsCalculated, FullPath, SearchResult, Picked, Excluded) { this.id = Id; this.label = Label; this.code = Code; this.isLeaf = IsLeaf; this.isCalculated = IsCalculated; this.fullPath = FullPath; this.searchResult = SearchResult; this.picked = Picked; this.excluded = Excluded; } function cat_collection() { var cats = new Array(); var numCats = 0; this.addItem = function(item, beforeCat) { var found = false; for (var i = 0; i < numCats && !found; i++) { if (cats[i] == item) found = true; } if (!found) { var insertBefore = -1; if (beforeCat) { for (var i = 0; i < cats.length; i++) if (cats[i] == beforeCat) insertBefore = i; } if (insertBefore == -1) cats[numCats] = item; else cats.splice(insertBefore, 0, item); numCats++; } } this.removeItem = function(item) { var found = false; for (var i = 0; i < numCats; i++) { if (cats[i] == item) { found = true; numCats--; } if (found) cats[i] = cats[i+1]; } } this.numItems = function() { return numCats; } this.getItem = function(idx) { if (idx < numCats && idx >= 0) return cats[idx]; else return null; } this.isInCollection = function(item) { var found = false; for (var i = 0; i < numCats && !found; i++) { if (cats[i] == item) found = true; } return found; } } //*************************** // Init Pane //*************************** function init_init() { populate_dimensions(); var select = document.getElementById("subsetDim"); select.selectedIndex = csData.getDimension(); if (csData.getType() == 1) { document.getElementById("methodRadioName").checked = true; } else if (csData.getType() == 2) { document.getElementById("methodRadioMeasure").checked = true; } else document.getElementById("methodRadioPickList").checked = true; if (csData.getName() != "") document.getElementById("subsetName").value = csData.getName(); if (topparent.getDimTreeFrame().dTree.numTreeItemsSelected()) { var dimIdx = parseInt(topparent.getDimTreeFrame().dTree.getTreeSelectedItem().parentNode.getAttribute("dimIdx")); if (dimIdx < document.getElementById("subsetDim").options.length) document.getElementById("subsetDim").selectedIndex = dimIdx; } } function subsetDimChange() { hierRootPath = new Array(); } function finalPaneInit() { document.getElementById("subsetName").value = csData.getName(); } function getInitNextPage() { var cmd; if (document.getElementById("methodRadioName").checked) cmd = "N"; else if (document.getElementById("methodRadioMeasure").checked) cmd = "M"; else cmd = "P"; return cmd; } function populate_dimensions() { var select = document.getElementById("subsetDim"); for (var i = 0; i < dimensions.length; i++) { select.options[i] = new Option(dimensions[i],i); } } function validate_Init() { if (!document.getElementById("subsetName").value.length) { displayCustomsubsetsMsg(strErrorNoName); return false; } return true; } //****************************** // By Name Definition Pane //****************************** function init_name_def() { for (var i = 0; i < csData.numSearchDefs(); i++) { addSearchDefToSelect(i); } scopeTree = new dimTree(document.getElementById("NameScopeTreeDiv")); scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN); scopeTree.setTreeMustSelect(true); scopeTree.setTreeWideSelect(true); scopeTree.setLeavesSelectable(false); scopeTree.setTreeShowCustomSubsets(false); scopeTree.initDimTree(csData.getDimension(),true); initScopeTreeComboBox(); if (csData.isEditing()) { disableButton(document.getElementById("button-Back")); var shn = false; var hiddenForm = topparent.getXtabFrame().document.fhidden; if (hiddenForm && hiddenForm.SHN != "undefined" && hiddenForm.SHN != null && hiddenForm.SHN.value == 1) shn = true; SelectedSearchDef = -1; } resetEnabledActionControls(); } function initScopeTreeComboBox() { scopeTreeComboBox = initComboBox(document.getElementById("scopeTypeSelect")); scopeTreeComboBox.addItem(new cbTextItem(scopeTreeOptions[0],"handleSearchLimitChange();",true)); scopeTreeComboBox.addItem(new cbTextItem(scopeTreeOptions[1],"handleSearchLimitChange();",false)); scopeTreeComboBox.addItem(new cbTextImageItem(scopeTreeOptions[2],images[IMAGE_FILE].src,"handleSearchLimitChange();",false)); scopeTreeComboBox.addItem(new cbTextImageItem(scopeTreeOptions[3],images[IMAGE_FOLDER].src,"handleSearchLimitChange();",false)); } function addSearchDef(itemNum) { var filter = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId"); var code = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("code"); var label = dimCache.getCategory(csData.getDimension(),code).getLabel(); csData.addSearchDef(document.getElementById("searchString").value,document.getElementById("searchType").selectedIndex, filter, label, code, scopeTreeComboBox.getSelectedItem() ,itemNum); addSearchDefToSelect(itemNum); } function addSearchDefToSelect(itemNum) { var string = csData.searchDefToString(itemNum); var select = document.getElementById("searchDefsSelect"); var option = new Option(string, itemNum); select.options[itemNum] = option; } function deleteItems() { if (!actionsEnabled) return; //move backwards for efficiency. var select = document.getElementById("searchDefsSelect"); for (var i = select.options.length - 1; i >= 0; i--) { if (select.options[i].selected) { csData.removeSearchDef(i); select.options[i] = null; } } if (!select.options.length) { hierRootPath = new Array(); } resetEnabledActionControls(); sendUpdateCountCommand(); } function clearFields(editing) { document.getElementById("searchType").selectedIndex = 0; document.getElementById("searchString").value = ""; var container = document.getElementById("NameScopeTreeDiv"); var select = document.getElementById("searchDefsSelect"); if (hierRootPath.length == 0 || (!editing && !document.getElementById("searchDefsSelect").childNodes.length) || (editing && document.getElementById("searchDefsSelect").childNodes.length == 1 && document.getElementById("searchDefsSelect").selectedIndex == 0)) { scopeTree.setTreeShowAlternateHierarchies(true); scopeTree.resetTreeToTop(); } else { scopeTree.setTreeShowAlternateHierarchies(false); scopeTree.clearTreeContainer(); scopeTree.initDimSubTree(csData.getDimension(),hierRootPath[0],true); } scopeTree.selectRoot(); scopeTreeComboBox.setSelectedItem(0); handleSearchLimitChange(); } function addItem() { if (!actionsEnabled) return; clearFields(false); document.getElementById("searchDefsSelect").selectedIndex = -1; showNameDefRightSide(); SelectedSearchDef = csData.numSearchDefs(); } function acceptItem() { //If adding the first, or editing the only one, update the hierRootPath. if (hierRootPath.length == 0 || (document.getElementById("searchDefsSelect").childNodes.length == 1 && document.getElementById("searchDefsSelect").selectedIndex == 0)) { hierRootPath = scopeTree.getHierarchyRootsPath(scopeTree.getTreeSelectedItem(0).parentNode); } addSearchDef(SelectedSearchDef); document.getElementById("searchDefsSelect").selectedIndex = SelectedSearchDef; hideNameDefRightSide(); resetEnabledActionControls(); sendUpdateCountCommand(); } function hideNameDefRightSide() { enableAllNameControls(); document.getElementById("CustomSubsetsNameRightTable").className = "CustomSubsetsPaneRightTableHidden"; } function showNameDefRightSide() { document.getElementById("CustomSubsetsNameRightTable").className = "CustomSubsetsPaneRightTable"; disableAllNameControls(); } function numberSelected(select) { var ctr = 0; for (var i = 0; i < select.options.length; i++) { if (select.options[i].selected) ctr++; } return ctr; } function editItem() { if (!actionsEnabled) return; var select = document.getElementById("searchDefsSelect"); if (numberSelected(select) != 1) return; SelectedSearchDef = select.selectedIndex; showNameDefRightSide(); clearFields(true); var searchDef = csData.getSearchDef(SelectedSearchDef); document.getElementById("searchType").selectedIndex = parseInt(searchDef.opCode); document.getElementById("searchString").value = searchDef.text; scopeTree.setTreeToCat(csData.getDimension(), searchDef.ancestorCode); scopeTreeComboBox.setSelectedItem(searchDef.incDesc); handleSearchLimitChange(); } function selectedSearchDefChanged() { hideNameDefRightSide(); SelectedSearchDef = document.getElementById("searchDefsSelect").selectedIndex; resetEnabledActionControls(); } function handleDimbarClick(item) { var dimbar = document.getElementById("dimbar-content"); //Find the dimbar item. var barItem = dimbar.firstChild.firstChild; while (item.getAttribute("dimIdx") != barItem.getAttribute("dimIdx")) { if (!hasNextSibling(barItem)) break; barItem = barItem.parentNode.nextSibling.firstChild; } barItem.setAttribute("category",item.getAttribute("name")); barItem.setAttribute("name",item.getAttribute("tag")); barItem.setAttribute("code",item.getAttribute("code")); barItem.setAttribute("alternate",(item.className == "dimbar_flyout_entry_alternate")); barItem.setAttribute("leaf",item.getAttribute("leaf")); barItem.setAttribute("ppds_id",item.getAttribute("ppdsId")); var link = document.getElementById("dimbar_item" + parseInt(barItem.getAttribute("number")) + "_cell").firstChild.firstChild; var img = link.childNodes[1]; for (var i = link.childNodes.length - 1; i >= 0; i--) { link.removeChild(link.childNodes[i]); } link.appendChild(document.createTextNode(item.getAttribute("name"))); link.appendChild(img); link.parentNode.className = "dimbar-dimension-span"; if (item.getAttribute("code") != dimCache.getDimTopNode(parseInt(item.getAttribute("dimIdx"))).getCode()) link.parentNode.className += "-filtered"; barItem.setAttribute("item_width",barItem.offsetWidth); reflow_dimbar(); } function validate_name() { if (!document.getElementById("searchDefsSelect").options.length) { displayCustomsubsetsMsg(strErrorNoSearchDefs); return false; } return true; } function cancelNameDefn() { hideNameDefRightSide(); } function acceptNameDefn() { acceptItem(); } function disableAllNameControls() { disableButton(document.getElementById("button-Cancel")); disableButton(document.getElementById("button-Back")); disableButton(document.getElementById("button-Next")); document.getElementById("addItemLink").className = "CustomSubsetsPaneLinkDisabled"; document.getElementById("editItemLink").className = "CustomSubsetsPaneLinkDisabled"; document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLinkDisabled"; actionsEnabled = false; } function enableAllNameControls() { enableButton(document.getElementById("button-Cancel")); if (!csData.isEditing()) enableButton(document.getElementById("button-Back")); enableButton(document.getElementById("button-Next")); actionsEnabled = true; resetEnabledActionControls(); } function resetEnabledActionControls() { if (actionsEnabled) { document.getElementById("addItemLink").className = "CustomSubsetsPaneLink"; if (SelectedSearchDef != -1 && numberSelected(document.getElementById("searchDefsSelect")) == 1) { document.getElementById("editItemLink").className = "CustomSubsetsPaneLink"; } else { document.getElementById("editItemLink").className = "CustomSubsetsPaneLinkDisabled"; } if (numberSelected(document.getElementById("searchDefsSelect")) > 0) { document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLink"; } else { document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLinkDisabled"; } } } function sendUpdateCountCommand() { if (csData.numSearchDefs()) { var cmd = "MZn:" + csData.makeCommonCommand(1); cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand(); var hf = topparent.getXtabFrame().document.getElementById("fhidden"); var target = hf.target; hf.CNCT.value = 19; hf.CO.value = cmd; hf.target = CustomSubsetsResultCountFrame.name; hf.submit(); hf.target = target; updateCount(strLoading); } else { updateCount("0"); } } function updateCount(count) { var container = document.getElementById("resultCount"); while (container.childNodes.length) container.removeChild(container.childNodes[container.childNodes.length - 1]); container.appendChild(document.createTextNode(count)); } function customSubsetLinkOver(item) { if (item.className != "CustomSubsetsPaneLinkDisabled") { item.className = "CustomSubsetsPaneLinkRollover"; } } function customSubsetLinkOut(item) { if (item.className != "CustomSubsetsPaneLinkDisabled") { item.className = "CustomSubsetsPaneLink"; } } //****************************** // By Picklist //****************************** function init_picklist() { pickTree = new dimTree(document.getElementById("sourceTreeDiv")); pickTree.setTreeMultiSelect(true); pickTree.setTreeWideSelect(true); pickTree.setTreeHierRootsSelectable(false); pickTree.setTreeShowCustomSubsets(false); pickTree.initDimTree(csData.getDimension(),false); if (csData.isEditing() && csData.getType() == 3) disableButton(document.getElementById("button-Back")); for (var i =0; i < csResults.numResults(); i++) { var result = csResults.getResult(i); document.getElementById("picklistResultsDiv").appendChild(createPickListItem(result.label, result.id, result.code, result.isCalculated, result.isLeaf, result.picked, result.searchResult, result.excluded, result.fullPath)); } refreshPicklistEnabling(null); } function getItemInPicklist(ppdsId) { var theItem = null; var item = document.getElementById("picklistResultsDiv").firstChild; while (item != null && theItem == null) { if (item.getAttribute("ppdsId") == ppdsId) theItem = item; item = item.nextSibling; } return theItem; } function moveOption(node, beforeNode) { var ppdsId = node.getAttribute("ppdsId"); var item = getItemInPicklist(ppdsId); var cat; if (item == null) { cat = dimCache.getCategory(csData.getDimension(),node.getAttribute("code")); var dim = createPickListItem(CEncodingUtil.ForceUnescape(node.childNodes[node.childNodes.length - 1].innerHTML),ppdsId,cat.getCode(),cat.isCalculated(),cat.isLeaf(),true,false,false,createNodePath(node)); //Check if the before node is a valid node, if so insert before it. if (beforeNode != null) { document.getElementById("picklistResultsDiv").insertBefore(dim,beforeNode); csData.addPickListCategory(ppdsId,beforeNode.getAttribute("ppdsId")); } else { document.getElementById("picklistResultsDiv").appendChild(dim); csData.addPickListCategory(ppdsId); } } else if (item.getAttribute("searchres") == "true") { item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", false, false); item.childNodes[1].className = "CustomSubsetsPickListResultsItemText"; item.setAttribute("csdisabled","false"); item.setAttribute("picked","true"); item.childNodes[0].title = strPickedCat; csData.removeExclusion(item.getAttribute("ppdsId")); csData.addPickListCategory(ppdsId); } } function createNodePath(node,str) { var str2; str2 = node.lastChild.innerHTML; if (str != null) str2 += "/" + str; if (dimCache.getDimTopNode(csData.getDimension()).getCode() != node.getAttribute("code")) { str2 = createNodePath(node.parentNode.previousSibling,str2); } return str2; } function moveSelectedOptions() { if (pickTree.numTreeItemsSelected()) { if (!pickTree.selectionInSameHierarchy()) return; //Check if we have a node selected to insert over. var selectedItem = getFirstSelectedItem(); for (var i = 0; i < pickTree.numTreeItemsSelected(); i++) { moveOption(pickTree.getTreeSelectedItem(i).parentNode,selectedItem); } refreshPicklistEnabling(pickTree.getTreeSelectedItem(0).parentNode); } else { reEnableSelectedItems(); } } function getIconSrc(isCalculated, leaf, searchRes, disabled) { if (!searchRes) { if (isCalculated) return images[IMAGE_CALCULATED_FILE].src; else if (leaf) return images[IMAGE_FILE].src; else return images[IMAGE_FOLDER].src; } else { if (!disabled) { if (isCalculated) return images[IMAGE_SEARCH_CALCULATED_FILE].src; else if (leaf) return images[IMAGE_SEARCH_FILE].src; else return images[IMAGE_SEARCH_FOLDER].src; } else { if (isCalculated) return images[IMAGE_SEARCH_CALCULATED_FILE_DISABLED].src; else if (leaf) return images[IMAGE_SEARCH_FILE_DISABLED].src; else return images[IMAGE_SEARCH_FOLDER_DISABLED].src; } } } function createPickListItem(text, ppdsId, code, isCalculated, isLeaf, isPicked, isSearchRes, isDisabled, fullPath) { var div = document.createElement("DIV"); div.className = "CustomSubsetsPickListResultsItem"; div.setAttribute("ppdsId",ppdsId); div.setAttribute("code", code); if (isSearchRes) div.setAttribute("searchres","true"); else div.setAttribute("searchres","false"); if (isPicked) div.setAttribute("picked","true"); else div.setAttribute("picked","false"); if (isDisabled) div.setAttribute("csdisabled","true"); else div.setAttribute("csdisabled","false"); insertIMGNode(div, getIconSrc(isCalculated, isLeaf, !isPicked, isDisabled), "CustomSubsetsPickListResultsIcon", [ new attrib("title",(isPicked)? strPickedCat : strRuleResuts), new attrib("isCalculated",(isCalculated)? "true" : "false"), new attrib("isLeaf",(isLeaf)? "true" : "false") ]); var link = document.createElement("A"); if (isDisabled) link.className = "customSubsetsPickListResultsItemTextStrikeout"; else link.className = "CustomSubsetsPickListResultsItemText"; link.href = "#"; link.appendChild(document.createTextNode(text)); link.title = fullPath; div.appendChild(link); div.onclick = selectPLResult; return div; } function handlePicklistTreeDblClick(event) { var eventM = new eventManager(event); eventM.cancelBubble(); var src = eventM.getSrc(); while (src.tagName != "DIV" && src.tagName != "div") src = src.parentNode; if (src.getAttribute("type") != "cm" || src.getAttribute("selectable") == "false" || src.getAttribute("tndisabled") == "true") return; moveOption(src); refreshPicklistEnabling(src); } function selectPLResult(event) { var eventM = new eventManager(event); var sourceObj = eventM.getSrc(); if (sourceObj.tagName != "DIV") sourceObj = sourceObj.parentNode; if (sourceObj.getAttribute("selected") == "true" && ((topparent.getGlobal("MacGecko") && eventM.theEvent.altKey) || (!topparent.getGlobal("MacGecko") && eventM.theEvent.ctrlKey))) { deSelectPL(sourceObj); } else { if ((topparent.getGlobal("MacGecko"))? !eventM.theEvent.altKey : !eventM.theEvent.ctrlKey) deselectAllPLResults(); selectPL(sourceObj); } eventM.cancelBubble(); } function selectPL(item) { item.setAttribute("selected","true"); item.className = "CustomSubsetsPickListResultsItemSelected"; if (item.getAttribute("csdisabled") == "true") item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout"; else item.childNodes[1].className = "customSubsetsPickListResultsItemTextSelected"; } function deSelectPL(item) { item.setAttribute("selected","false"); item.className = "CustomSubsetsPickListResultsItem"; if (item.getAttribute("csdisabled") == "true") item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout"; else item.childNodes[1].className = "customSubsetsPickListResultsItemText"; } function selectAllPLResults() { var item = document.getElementById("picklistResultsDiv").firstChild; while (item != null) { selectPL(item); item = item.nextSibling; } } function deselectAllPLResults() { var item = document.getElementById("picklistResultsDiv").firstChild; while (item != null) { deSelectPL(item); item = item.nextSibling; } } function removeSelectedItems() { var container = document.getElementById("picklistResultsDiv"); var item = container.firstChild; var nextItem; while (item != null) { nextItem = item.nextSibling; if (item.getAttribute("selected") == "true") { if (item.getAttribute("searchres") == "true") { item.setAttribute("csdisabled","true"); item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", true, true); item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout"; item.childNodes[0].title = strRuleResuts; csData.addExclusion(item.getAttribute("ppdsId")); } else { container.removeChild(item); } csData.removePicklistCategory(item.getAttribute("ppdsId")); } item = nextItem; } refreshPicklistEnabling(null); } function reEnableSelectedItems() { var container = document.getElementById("picklistResultsDiv"); var item = container.firstChild; while (item != null) { if (item.getAttribute("selected") == "true" && item.getAttribute("csdisabled") == "true") { item.setAttribute("csdisabled","false"); item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", true, false); item.childNodes[1].className = "customSubsetsPickListResultsItemTextSelected"; csData.removeExclusion(item.getAttribute("ppdsId")); } item = item.nextSibling; } } function getFirstSelectedItem() { var container = document.getElementById("picklistResultsDiv"); var item = container.firstChild; while (item != null) { if (item.getAttribute("selected") == "true" && item.getAttribute("searchres") != "true") return item; item = item.nextSibling; } return null; } function refreshPicklistEnabling(node) { var container = document.getElementById("picklistResultsDiv"); if (!resultsEmpty && !container.childNodes.length) { //previously not empty, now empty hierRootPath = new Array(); pickTree.enableAllTreeNodes(); resultsEmpty = true; } else if (resultsEmpty && container.childNodes.length) { //Previously empty, now not empty if (!hierRootPath.length) { if (node == null && !hierRootPath.length) { //Set to the root of tree hierRootPath = new Array(); hierRootPath[0] = document.getElementById("sourceTreeDiv").firstChild.getAttribute("code"); } else hierRootPath = pickTree.getHierarchyRootsPath(node); } pickTree.setEnabledRootNode(hierRootPath); resultsEmpty = false; } } function initOptions(options, toBox) { for (var i = 0;i < options.length; i++) { toBox.options[i] = options[i]; } } function doPickListBack() { if (csData.getType() == 1) goto_page("N"); else if (csData.getType() == 2) goto_page("M"); else goto_page("I"); } function validate_pickList() { if (!numberOfPickedItems() && csData.getType() == 3) { displayCustomsubsetsMsg(strErrorNoCats); return false; } return true; } function numberOfPickedItems() { var ctr = 0; for (var i = 0; i < document.getElementById("picklistResultsDiv").childNodes.length; i++) if (document.getElementById("picklistResultsDiv").childNodes[i].getAttribute("csdisabled") != "true") ctr++; return ctr; } function handlearrowbuttondown(button) { button.className = "customSubsetsArrowButtonPressed"; } function handlearrowbuttonup(button) { button.className = "customSubsetsArrowButtonRollover"; } function handlearrowbuttonrollover(button) { button.className = "customSubsetsArrowButtonRollover"; } function handlearrowbuttonrollout(button) { button.className = "customSubsetsArrowButton"; } //********************************* // Measures Definition //********************************* function init_measure_def() { measureCatTypeDiv = document.getElementById("measureCategoriesTypeDiv"); measureCatRangeSection = document.getElementById("measureCategoriesRange"); measureCatNumberSection = document.getElementById("measureCategoriesNumber"); measureCatTypeDiv.removeChild(measureCatRangeSection); measureCatTypeDiv.removeChild(measureCatNumberSection); measureTree = new dimTree(document.getElementById("measureTreeDiv")); measureTree.setTreeWideSelect(true); measureTree.setTreeMustSelect(true); measureTree.setMeasurePlaceholdersGrayText(true); measureTree.initDimTree(topparent.getGlobal("gDimensionInfo").length - 1,false); scopeTree = new dimTree(document.getElementById("MeasureScopeTreeDiv")); scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN); scopeTree.setTreeMustSelect(true); scopeTree.setTreeWideSelect(true); scopeTree.setLeavesSelectable(false); scopeTree.setTreeShowCustomSubsets(false); scopeTree.initDimTree(csData.getDimension(),true); scopeTree.selectRoot(); initScopeTreeComboBox(); //On a separate thread to ensure that the browser refreshes its content before this is called. setTimeout("init_dimbar();",1); if (csData.isEditing()) disableButton(document.getElementById("button-Back")); var searchRule = csData.getSearchRule(); if (searchRule != null) { document.getElementById("csMeasureType").selectedIndex = searchRule.type; csMeasureTypeChanged(); if (searchRule.type == CS_RULE_RANGE) { if (!searchRule.rule.isMin) { document.getElementById("csMinimum").value = CNumUtil.localizeDecimal(searchRule.rule.from); document.getElementById("csMinSelectCus").checked = true; } if (!searchRule.rule.isMax) { document.getElementById("csMaximum").value = CNumUtil.localizeDecimal(searchRule.rule.to); document.getElementById("csMaxSelectCus").checked = true; } } else if (searchRule.type == CS_RULE_COUNT) { if (searchRule.rule.end == CS_END_TOP) document.getElementById("csTop").checked = true; else document.getElementById("csBottom").checked = true; document.getElementById("csTopBottomNumber").value = searchRule.rule.number; } measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1,searchRule.measureCode); scopeTree.setTreeToCat(csData.getDimension(),searchRule.ancestorCode); scopeTreeComboBox.setSelectedItem(searchRule.incDesc); handleSearchLimitChange(); } else { csMeasureTypeChanged(); document.getElementById("csMinimum").value = ""; document.getElementById("csMaximum").value = ""; //Get the current measure from the crosstab cell var frame = topparent.getChartFrame(); if (!frame) frame = topparent.getXtabFrame(); var measureCode = frame.document.getElementById("dimbar-content").childNodes[topparent.getGlobal("gDimensionInfo").length - 1].firstChild.getAttribute("code"); if (dimCache.getDimTopNode(topparent.getGlobal("gDimensionInfo").length - 1).getCode() != measureCode) { measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1, measureCode); } else { //No measure selected, select the default measure. if (defaultMeasureCode == "") measureTree.selectFirstChildOfRoot(); else measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1,defaultMeasureCode); } } } function setMeasureDefinitionData() { var measure = measureTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId"); var measureCode = measureTree.getTreeSelectedItem(0).parentNode.getAttribute("code"); var searchCode = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("code"); var searchId = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId"); csData.setSearchRule(measure,measureCode,scopeTreeComboBox.getSelectedItem(), searchCode,searchId); if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_RANGE) { csData.getSearchRule().type = CS_RULE_RANGE; var from = 0; var isMin = 1; if (document.getElementById("csMinSelectCus").checked && isNumber(document.getElementById("csMinimum"))) { from = getNumFromField(document.getElementById("csMinimum").value); isMin = 0; } var to = 0; var isMax = 1; if (document.getElementById("csMaxSelectCus").checked && isNumber(document.getElementById("csMaximum"))) { to = getNumFromField(document.getElementById("csMaximum").value); isMax = 0; } csData.setSearchRuleRange(from, to, isMin, isMax); } else if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_NUMBER) { csData.getSearchRule().type = CS_RULE_COUNT; var end = (document.getElementById("csTop").checked)? CS_END_TOP : CS_END_BOTTOM ; var number = 0; if (isNumber(document.getElementById("csTopBottomNumber"), true)) number = getNumFromField(document.getElementById("csTopBottomNumber").value); csData.setSearchRuleCount( end, number ); } hierRootPath = scopeTree.getHierarchyRootsPath(scopeTree.getTreeSelectedItem(0).parentNode); getFiltersFromDimBar(document.getElementById("dimbar-content")); } function getFiltersFromDimBar(dimBar) { var dimItem = dimBar.firstChild.firstChild; while (dimItem && dimItem.tagName == "TABLE") { csData.addSearchRuleFilter(parseInt(dimItem.getAttribute("ppds_id"))); if (!hasNextSibling(dimItem)) break; dimItem = dimItem.parentNode.nextSibling.firstChild; } } function csMinimumChange() { document.getElementById("csMinSelectCus").checked = true; } function csMaximumChange() { document.getElementById("csMaxSelectCus").checked = true; } function clearCSMinimum() { document.getElementById("csMinimum").value = ""; } function clearCSMaximum() { document.getElementById("csMaximum").value = ""; } function handleSearchLimitChange() { switch (scopeTreeComboBox.getSelectedItem()) { case 0: scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN); break; case 1: scopeTree.setTreeSelectionType(TREE_SELECTION_ALL_DESCENDANTS); break; case 2: scopeTree.setTreeSelectionType(TREE_SELECTION_DESCENDENT_LEAVES); break; case 3: scopeTree.setTreeSelectionType(TREE_SELECTION_DESCENDENT_NON_LEAVES); break; } } function validate_measure() { if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_RANGE) { convertPercentages(document.getElementById("csMinimum")); convertPercentages(document.getElementById("csMaximum")); var from = document.getElementById("csMinimum").value; var to = document.getElementById("csMaximum").value; if (!document.getElementById("csMinSelectDef").checked && !isNumber(document.getElementById("csMinimum"))) { displayCustomsubsetsMsg(strErrorInvalidFrom); return false; } if (!document.getElementById("csMaxSelectDef").checked && !isNumber(document.getElementById("csMaximum"))) { displayCustomsubsetsMsg(strErrorInvalidTo); return false; } if (!document.getElementById("csMinSelectDef").checked && !document.getElementById("csMaxSelectDef").checked && !(getNumFromField(from) <= getNumFromField(to))) { displayCustomsubsetsMsg(strErrorInvalidRange); return false; } } else if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_NUMBER) { var numberField = document.getElementById("csTopBottomNumber"); if (!isNumber(numberField, true) || getNumFromField(numberField.value) <= 0) { displayCustomsubsetsMsg(strErrorInvalidNumCats); return false; } if (getNumFromField(numberField.value) > maxNoCats) { displayCustomsubsetsMsg(strErrorTooManyCats); return false; } } return true; } function getNumFromField(value) { return parseFloat(CNumUtil.normalizeDecimal(value)); } function convertPercentages(field) { var value = field.value; if (value.charAt(value.length - 1) == "%") { field.value = value.substring(0,value.length - 1); if (isNumber(field)) field.value = getNumFromField(value)/100; else field.value += "%"; } } function isNumber(elem, excludeDecimal) { if (!elem.value.length) return false; var validChars; if (excludeDecimal) validChars = "/[^0-9\-]/"; else validChars = "/[^0-9" + decimalpt + "\-]/"; return CNumUtil.validateNumField(elem, true, validChars); } function makeScopeTreeOptions(event) { scopeTreeComboBox.displayDropDown(); } function clearScopeTreeOptionsDropDown() { scopeTreeComboBox.hideDropDown(); } function csMeasureTypeChanged() { while (measureCatTypeDiv.childNodes.length) measureCatTypeDiv.removeChild(measureCatTypeDiv.firstChild); switch(document.getElementById("csMeasureType").selectedIndex) { case MEASURE_TYPE_RANGE: measureCatTypeDiv.appendChild(measureCatRangeSection); break; case MEASURE_TYPE_NUMBER: measureCatTypeDiv.appendChild(measureCatNumberSection); break; } } //****************************** // Rename Dialog //****************************** function init_rename() { document.getElementById("subsetName").value = csData.getName(); }