customSubsets.js 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650
  1. // Licensed Materials - Property of IBM
  2. //
  3. // IBM Cognos Products: pps
  4. //
  5. // (C) Copyright IBM Corp. 2005, 2017
  6. //
  7. // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. // This forms the javascript functions used for the Custom Subsets pane of
  9. // PowerPlay Studio.
  10. // The functions handle any minor browser differences.
  11. var DIMCACHE_LOAD_DELAY = 100;
  12. var PRELOAD_LOADING_DELAY = 500;
  13. var metaDataPreloaded = false;
  14. var preloadMetadata = null;
  15. var csData = new CSData();
  16. var csResults = new CSResults();
  17. var SelectedSearchDef = -1;
  18. var CS_DEFAULT_TYPE = 3;
  19. var CS_RULE_RANGE = 0;
  20. var CS_RULE_COUNT = 1;
  21. var CS_END_TOP = 0;
  22. var CS_END_BOTTOM = 1;
  23. var actionsEnabled = true;
  24. var pickedCats = new Array();
  25. var hierRootPath = new Array();
  26. var resultsEmpty = true;
  27. var scopeTreeComboBox;
  28. var numWarningMessages;
  29. var measureCatTypeDiv;
  30. var measureCatRangeSection;
  31. var measureCatNumberSection;
  32. var MEASURE_TYPE_RANGE = 0;
  33. var MEASURE_TYPE_NUMBER = 1;
  34. //*********************************
  35. // Common methods
  36. //*********************************
  37. var dimensions = new Array();
  38. function init() {
  39. topparent.openActionPane();
  40. ContextMenu.initialize(true,false);
  41. if (wizardPane != "R")
  42. topparent.setActionPaneHeight("315");
  43. else
  44. topparent.setActionPaneHeight("180");
  45. if (preloadMetadata) {
  46. metaDataPreloaded = false;
  47. //we need to ensure that the dimCache has preloaded the necessary information.
  48. displayCommonMessage(strLoading, MESSAGE_TYPE_SIMPLE, [], []);
  49. preload_next_metaData_chunk(0,0);
  50. } else
  51. metaDataPreloaded = true;
  52. init_customSubset_pane();
  53. }
  54. function init_customSubset_pane() {
  55. if (metaDataPreloaded) {
  56. removeMessage();
  57. switch (wizardPane) {
  58. case "I": //Init
  59. init_init();
  60. break;
  61. case "N": //Name Definition
  62. init_name_def();
  63. break;
  64. case "M": //Measure Definition
  65. init_measure_def();
  66. break;
  67. case "P": //PickList
  68. init_picklist();
  69. break;
  70. case "R": //Rename
  71. init_rename();
  72. break;
  73. }
  74. numWarningMessages = warningMessage.length;
  75. displayNextWarningMessage();
  76. } else {
  77. setTimeout("init_customSubset_pane()",PRELOAD_LOADING_DELAY);
  78. }
  79. }
  80. function cleanup() {
  81. switch (wizardPane) {
  82. case "M":
  83. clearFlyouts();
  84. if (measureTree)
  85. measureTree.clearTreeContainer();
  86. case "N":
  87. if (scopeTree)
  88. scopeTree.clearTreeContainer();
  89. break;
  90. case "P":
  91. if (pickTree)
  92. pickTree.clearTreeContainer();
  93. break;
  94. }
  95. }
  96. function displayNextWarningMessage() {
  97. //take the last one on the list
  98. if (numWarningMessages) {
  99. if (warningMessageCancel[numWarningMessages - 1])
  100. displayCommonMessage(warningMessage[numWarningMessages - 1], MESSAGE_TYPE_INFO, [message_ok_button_text, message_cancel_button_text], [function() {removeMessage();displayNextWarningMessage();}, function() {topparent.closeActionPane();}]);
  101. else
  102. displayCommonMessage(warningMessage[numWarningMessages - 1], MESSAGE_TYPE_INFO, [message_ok_button_text], [function() {removeMessage();displayNextWarningMessage();}]);
  103. numWarningMessages--;
  104. }
  105. }
  106. function goto_page(page) {
  107. if ((wizardPane == "I" && !validate_Init()) ||
  108. (wizardPane == "M" && page == "P" && !validate_measure()) ||
  109. (wizardPane == "N" && page == "P" && !validate_name()))
  110. return false;
  111. if (wizardPane == "M")
  112. setMeasureDefinitionData();
  113. if (wizardPane != "I")
  114. var subsetType = csData.getType();
  115. else {
  116. if (document.getElementById("methodRadioName").checked)
  117. subsetType = "1";
  118. else if (document.getElementById("methodRadioMeasure").checked)
  119. subsetType = "2";
  120. else
  121. subsetType = "3";
  122. if (subsetType != csData.getType() || document.getElementById("subsetDim").selectedIndex != csData.getDimension())
  123. csData.clearData();
  124. csData.setName(document.getElementById("subsetName").value);
  125. csData.setDimension(document.getElementById("subsetDim").selectedIndex);
  126. }
  127. cmd = "MZ" + page + ":" + csData.makeCommonCommand(subsetType);
  128. cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand();
  129. topparent.getXtabFrame().doit(cmd);
  130. }
  131. function submit_page() {
  132. if ((wizardPane == "P" && !validate_pickList()) ||
  133. (wizardPane == "M" && !validate_measure()) ||
  134. (wizardPane == "N" && !validate_name()))
  135. return false;
  136. if (wizardPane == "R")
  137. csData.setName(document.getElementById("subsetName").value);
  138. topparent.closeActionPane();
  139. var subsetType = csData.getType();
  140. if (wizardPane.charAt(0) == "N")
  141. subsetType = "1";
  142. else if (wizardPane.charAt(0) == "M")
  143. subsetType = "2";
  144. cmd = "Z";
  145. if (wizardPane == "R")
  146. cmd += "R";
  147. else if (csData.isEditing())
  148. cmd += "E";
  149. else
  150. cmd += "C";
  151. cmd += ":" + csData.makeCommonCommand(subsetType);
  152. cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand();
  153. topparent.getXtabFrame().doit(cmd);
  154. }
  155. function cancelEventBubble(event) {
  156. var eventM = new eventManager(event);
  157. eventM.cancelBubble();
  158. }
  159. function displayCustomsubsetsMsg(msg) {
  160. displayCommonMessage(msg, MESSAGE_TYPE_INFO, [message_ok_button_text], [function() {removeMessage();}]);
  161. }
  162. function clearCustomsubsetsMsg() {
  163. removeMessageDiv();
  164. }
  165. //Meta Data preloading
  166. function metaDataCat(dim, catCode) {
  167. this.dim = dim;
  168. this.code = catCode;
  169. }
  170. function preload_next_metaData_chunk(firstIdx, secondIdx) {
  171. if (preloadMetadata[firstIdx]) {
  172. var subArray = preloadMetadata[firstIdx];
  173. //Check if we have this item in the dimCache.
  174. while (subArray[secondIdx] && dimCache.getCategory(subArray[secondIdx].dim,subArray[secondIdx].code)) {
  175. secondIdx += 1;
  176. }
  177. if (subArray[secondIdx]) {
  178. //We found an item that was not loaded.
  179. //get the parent category (must be loaded);
  180. var parent = dimCache.getCategory(subArray[secondIdx - 1].dim, subArray[secondIdx - 1].code);
  181. parent.loadChildren();
  182. setTimeout("preload_next_metaData_chunk(" + firstIdx + "," + secondIdx + ");", DIMCACHE_LOAD_DELAY);
  183. return;
  184. } else {
  185. preload_next_metaData_chunk(firstIdx + 1, 0);
  186. }
  187. } else {
  188. //All metadata preloaded
  189. metaDataPreloaded = true;
  190. }
  191. }
  192. //***************************
  193. // Comon Data object
  194. //***************************
  195. function CSData() {
  196. var code = "";
  197. var name = "";
  198. var dimension = 0;
  199. var searchDefs = new Array();
  200. var numSearchDefs = 0;
  201. var searchRule = null;
  202. var exclusions = new cat_collection();
  203. var pickList = new cat_collection();
  204. var CSType = CS_DEFAULT_TYPE;
  205. var crc32 = 0;
  206. var useShortNames = false;
  207. this.setcode = function(Code) {
  208. code = Code;
  209. }
  210. this.setcrc32 = function(idx) {
  211. crc32 = idx;
  212. }
  213. this.isEditing = function() {
  214. return (code != "");
  215. }
  216. this.setUseShortNames = function(useShort) {
  217. useShortNames = useShort;
  218. }
  219. this.isUsingShortNames = function() {
  220. return useShortNames;
  221. }
  222. this.setName = function(Name) {
  223. name = Name;
  224. }
  225. this.getName = function() {
  226. return name;
  227. }
  228. this.setDimension = function(Dim) {
  229. dimension = Dim;
  230. }
  231. this.getDimension = function() {
  232. return parseInt(dimension);
  233. }
  234. this.setType = function(type) {
  235. type = parseInt(type);
  236. if (type <= 3 && type >= 0) {
  237. CSType = type;
  238. }
  239. }
  240. this.getType = function() {
  241. return CSType;
  242. }
  243. this.addSearchDef = function(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc,itemNum) {
  244. var increment = (itemNum == numSearchDefs);
  245. searchDefs[itemNum] = new search_def(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc);
  246. if (increment)
  247. numSearchDefs++;
  248. }
  249. this.searchDefToString = function(idx) {
  250. var string = templateSearchDefStr;
  251. switch (searchDefs[idx].opCode) {
  252. case 0: string = string.replace(/%0/,containsString); break;
  253. case 1: string = string.replace(/%0/,beginsString); break;
  254. case 2: string = string.replace(/%0/,endsString); break;
  255. }
  256. string = string.replace(/%1/,searchDefs[idx].text);
  257. string = string.replace(/%2/,searchDefs[idx].ancestorLabel);
  258. switch (searchDefs[idx].incDesc) {
  259. case 0: string = string.replace(/%3/,strShortChildren);
  260. case 1: string = string.replace(/%3/,strShortAllDesc);
  261. case 2: string = string.replace(/%3/,strShortLeaves);
  262. case 3: string = string.replace(/%3/, strShortNonLeaves);
  263. }
  264. return string;
  265. }
  266. this.getSearchDef = function(idx) {
  267. return searchDefs[idx];
  268. }
  269. this.removeSearchDef = function(idx) {
  270. if (idx < numSearchDefs) {
  271. for (var i = idx; i < numSearchDefs - 1;i++) {
  272. searchDefs[i] = searchDefs[i+1];
  273. }
  274. numSearchDefs--;
  275. }
  276. }
  277. this.numSearchDefs = function() {
  278. return numSearchDefs;
  279. }
  280. this.setSearchRule = function(Measure, MeasureCode, IncDesc, AncestorCode, AncestorId) {
  281. searchRule = new search_rule(Measure, MeasureCode, 0, null, IncDesc, AncestorCode, AncestorId, new Array());
  282. }
  283. this.setSearchRuleRange = function( From, To, IsMin, IsMax ) {
  284. if (searchRule) {
  285. searchRule.type = CS_RULE_RANGE;
  286. searchRule.rule = new search_rule_range(From, To, IsMin, IsMax)
  287. }
  288. }
  289. this.setSearchRuleCount = function( End, Number ) {
  290. if (searchRule) {
  291. searchRule.type = CS_RULE_COUNT;
  292. searchRule.rule = new search_rule_count(End, Number);
  293. }
  294. }
  295. this.getSearchRule = function() {
  296. return searchRule;
  297. }
  298. this.addSearchRuleFilter = function(filter) {
  299. searchRule.filters[searchRule.filters.length] = filter;
  300. }
  301. this.addExclusion = function(exclusion) {
  302. exclusions.addItem(exclusion);
  303. }
  304. this.removeExclusion = function(exclusion) {
  305. exclusions.removeItem(exclusion);
  306. }
  307. this.isAnExclusion = function(exclusion) {
  308. return exclusions.isInCollection(exclusion);
  309. }
  310. this.addPickListCategory = function(cat, beforeCat) {
  311. pickList.addItem(cat, beforeCat);
  312. }
  313. this.removePicklistCategory = function(cat) {
  314. pickList.removeItem(cat);
  315. }
  316. this.isAPicklistCategory = function(cat) {
  317. return pickList.isInCollection(cat);
  318. }
  319. this.clearData = function() {
  320. numSearchDefs = 0;
  321. searchRule = null;
  322. exclusions = new cat_collection();
  323. pickList = new cat_collection();
  324. searchResults = new Array();
  325. }
  326. this.makeAncestorPathCommand = function() {
  327. var cmd = "\t{\t\"A\"\t";
  328. for (var i = 0; i < hierRootPath.length; i++)
  329. cmd += topparent.getGlobal("dimCache").getCategory(dimension,hierRootPath[i]).getPPDSID() + "\t";
  330. cmd += "}";
  331. return cmd;
  332. }
  333. this.makeCommonCommand = function(subsetType) {
  334. var cmd = "";
  335. cmd += "\"" + code + "\"\t";
  336. cmd += subsetType + "\t";
  337. cmd += "\"" + CEncodingUtil.EncodeStrOperand(name) + "\"\t";
  338. cmd += dimension + "\t";
  339. var shn = "0";
  340. var hiddenForm = topparent.getXtabFrame().document.fhidden;
  341. if (hiddenForm && hiddenForm.SHN != "undefined" && hiddenForm.SHN != null && hiddenForm.SHN.value == 1)
  342. shn = "1";
  343. cmd += shn + "\t";
  344. cmd += crc32;
  345. // Write out the Ancestor Path
  346. cmd += this.makeAncestorPathCommand();
  347. return cmd;
  348. }
  349. this.makeSearchDefsCommand = function() {
  350. var cmd = "\t{\t\"N\"\t";
  351. for (var i = 0; i < numSearchDefs; i++) {
  352. cmd += "\"" + CEncodingUtil.EncodeStrOperand(searchDefs[i].text) + "\"\t" + searchDefs[i].opCode + "\t" + searchDefs[i].ancestor + "\t" + searchDefs[i].incDesc + "\t";
  353. }
  354. cmd += "}";
  355. return cmd;
  356. }
  357. this.makeSearchRuleCommand = function() {
  358. var cmd = "";
  359. if (CSType == 2 && searchRule != null) {
  360. cmd += "\t{\t\"M\"\t" + searchRule.type + "\t" + searchRule.measure + "\t\"\"\t0";
  361. switch (searchRule.type) {
  362. case CS_RULE_RANGE:
  363. cmd += makeSearchRuleRangeCommand();
  364. break;
  365. case CS_RULE_COUNT:
  366. cmd += makeSearchRuleCountCommand();
  367. break;
  368. }
  369. cmd += "\t" + searchRule.incDesc + "\t" + searchRule.ancestorId;
  370. cmd += makeSearchRuleFiltersCommand();
  371. cmd += "\t}";
  372. } else {
  373. cmd += "\t{\t\"M\"\t}";
  374. }
  375. return cmd;
  376. }
  377. function makeSearchRuleRangeCommand() {
  378. var cmd = "";
  379. if (searchRule != null && searchRule.rule != null && searchRule.type == CS_RULE_RANGE)
  380. cmd += "\t{\t\"r\"\t\"" + searchRule.rule.from + "\"\t\"" + searchRule.rule.to + "\"\t" + searchRule.rule.isMin + "\t" + searchRule.rule.isMax + "\t}";
  381. return cmd;
  382. }
  383. function makeSearchRuleCountCommand() {
  384. var cmd = "";
  385. if (searchRule != null && searchRule.rule != null && searchRule.type == CS_RULE_COUNT)
  386. cmd += "\t{\t\"c\"\t" + searchRule.rule.end + "\t" + searchRule.rule.number + "\t}";
  387. return cmd;
  388. }
  389. function makeSearchRuleFiltersCommand() {
  390. var cmd = "";
  391. if (searchRule != null && searchRule.filters.length) {
  392. cmd += "\t{\t\"f\"\t";
  393. for (var i = 0; i < searchRule.filters.length; i++)
  394. cmd += searchRule.filters[i] + "\t";
  395. cmd += "}";
  396. }
  397. return cmd;
  398. }
  399. this.makeExclusionsCommand = function() {
  400. var cmd = "";
  401. cmd += "\t{\t\"P\"\t1\t";
  402. for (var i = 0; i < exclusions.numItems(); i++) {
  403. cmd += exclusions.getItem(i) + "\t";
  404. }
  405. cmd += "}";
  406. return cmd;
  407. }
  408. this.makePickListCommand = function() {
  409. var cmd = "";
  410. cmd = "\t{\t\"P\"\t0\t";
  411. for (var i = 0; i < pickList.numItems(); i++) {
  412. cmd += pickList.getItem(i) + "\t";
  413. }
  414. cmd += "}";
  415. return cmd;
  416. }
  417. }
  418. function CSResults() {
  419. var results = new Array();
  420. this.addResult = function(Id, Label, Code, IsLeaf, IsCalculated, fullPath, SearchResult, Picked, Excluded) {
  421. results[results.length] = new search_cat(Id, Label, Code, IsLeaf, IsCalculated, fullPath, SearchResult, Picked, Excluded);
  422. }
  423. this.getResult = function(Idx) {
  424. return results[Idx];
  425. }
  426. this.numResults = function() {
  427. return results.length;
  428. }
  429. }
  430. function search_def(String,OpCode,Ancestor,AncestorLabel,AncestorCode,IncDesc) {
  431. this.text = String;
  432. this.opCode = OpCode;
  433. this.ancestor = Ancestor;
  434. this.ancestorLabel = AncestorLabel;
  435. this.ancestorCode = AncestorCode;
  436. this.incDesc = IncDesc;
  437. }
  438. function search_rule(Measure, MeasureCode, Type, Rule, IncDesc, AncestorCode, AncestorId, Filters) {
  439. this.measure = Measure;
  440. this.measureCode = MeasureCode;
  441. this.type = Type;
  442. this.rule = Rule;
  443. this.incDesc = IncDesc;
  444. this.ancestorCode = AncestorCode;
  445. this.ancestorId = AncestorId;
  446. this.filters = Filters;
  447. }
  448. function search_rule_range(From, To, IsMin, IsMax) {
  449. this.from = From;
  450. this.to = To;
  451. this.isMin = IsMin;
  452. this.isMax = IsMax;
  453. }
  454. function search_rule_count(End, Number) {
  455. this.end = End;
  456. this.number = Number;
  457. }
  458. function search_cat(Id, Label, Code, IsLeaf, IsCalculated, FullPath, SearchResult, Picked, Excluded) {
  459. this.id = Id;
  460. this.label = Label;
  461. this.code = Code;
  462. this.isLeaf = IsLeaf;
  463. this.isCalculated = IsCalculated;
  464. this.fullPath = FullPath;
  465. this.searchResult = SearchResult;
  466. this.picked = Picked;
  467. this.excluded = Excluded;
  468. }
  469. function cat_collection() {
  470. var cats = new Array();
  471. var numCats = 0;
  472. this.addItem = function(item, beforeCat) {
  473. var found = false;
  474. for (var i = 0; i < numCats && !found; i++) {
  475. if (cats[i] == item)
  476. found = true;
  477. }
  478. if (!found) {
  479. var insertBefore = -1;
  480. if (beforeCat) {
  481. for (var i = 0; i < cats.length; i++)
  482. if (cats[i] == beforeCat)
  483. insertBefore = i;
  484. }
  485. if (insertBefore == -1)
  486. cats[numCats] = item;
  487. else
  488. cats.splice(insertBefore, 0, item);
  489. numCats++;
  490. }
  491. }
  492. this.removeItem = function(item) {
  493. var found = false;
  494. for (var i = 0; i < numCats; i++) {
  495. if (cats[i] == item) {
  496. found = true;
  497. numCats--;
  498. }
  499. if (found)
  500. cats[i] = cats[i+1];
  501. }
  502. }
  503. this.numItems = function() {
  504. return numCats;
  505. }
  506. this.getItem = function(idx) {
  507. if (idx < numCats && idx >= 0)
  508. return cats[idx];
  509. else
  510. return null;
  511. }
  512. this.isInCollection = function(item) {
  513. var found = false;
  514. for (var i = 0; i < numCats && !found; i++) {
  515. if (cats[i] == item)
  516. found = true;
  517. }
  518. return found;
  519. }
  520. }
  521. //***************************
  522. // Init Pane
  523. //***************************
  524. function init_init() {
  525. populate_dimensions();
  526. var select = document.getElementById("subsetDim");
  527. select.selectedIndex = csData.getDimension();
  528. if (csData.getType() == 1) {
  529. document.getElementById("methodRadioName").checked = true;
  530. } else if (csData.getType() == 2) {
  531. document.getElementById("methodRadioMeasure").checked = true;
  532. } else
  533. document.getElementById("methodRadioPickList").checked = true;
  534. if (csData.getName() != "")
  535. document.getElementById("subsetName").value = csData.getName();
  536. if (topparent.getDimTreeFrame().dTree.numTreeItemsSelected()) {
  537. var dimIdx = parseInt(topparent.getDimTreeFrame().dTree.getTreeSelectedItem().parentNode.getAttribute("dimIdx"));
  538. if (dimIdx < document.getElementById("subsetDim").options.length)
  539. document.getElementById("subsetDim").selectedIndex = dimIdx;
  540. }
  541. }
  542. function subsetDimChange() {
  543. hierRootPath = new Array();
  544. }
  545. function finalPaneInit() {
  546. document.getElementById("subsetName").value = csData.getName();
  547. }
  548. function getInitNextPage() {
  549. var cmd;
  550. if (document.getElementById("methodRadioName").checked)
  551. cmd = "N";
  552. else if (document.getElementById("methodRadioMeasure").checked)
  553. cmd = "M";
  554. else
  555. cmd = "P";
  556. return cmd;
  557. }
  558. function populate_dimensions() {
  559. var select = document.getElementById("subsetDim");
  560. for (var i = 0; i < dimensions.length; i++) {
  561. select.options[i] = new Option(dimensions[i],i);
  562. }
  563. }
  564. function validate_Init() {
  565. if (!document.getElementById("subsetName").value.length) {
  566. displayCustomsubsetsMsg(strErrorNoName);
  567. return false;
  568. }
  569. return true;
  570. }
  571. //******************************
  572. // By Name Definition Pane
  573. //******************************
  574. function init_name_def() {
  575. for (var i = 0; i < csData.numSearchDefs(); i++) {
  576. addSearchDefToSelect(i);
  577. }
  578. scopeTree = new dimTree(document.getElementById("NameScopeTreeDiv"));
  579. scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN);
  580. scopeTree.setTreeMustSelect(true);
  581. scopeTree.setTreeWideSelect(true);
  582. scopeTree.setLeavesSelectable(false);
  583. scopeTree.setTreeShowCustomSubsets(false);
  584. scopeTree.initDimTree(csData.getDimension(),true);
  585. initScopeTreeComboBox();
  586. if (csData.isEditing()) {
  587. disableButton(document.getElementById("button-Back"));
  588. var shn = false;
  589. var hiddenForm = topparent.getXtabFrame().document.fhidden;
  590. if (hiddenForm && hiddenForm.SHN != "undefined" && hiddenForm.SHN != null && hiddenForm.SHN.value == 1)
  591. shn = true;
  592. SelectedSearchDef = -1;
  593. }
  594. resetEnabledActionControls();
  595. }
  596. function initScopeTreeComboBox() {
  597. scopeTreeComboBox = initComboBox(document.getElementById("scopeTypeSelect"));
  598. scopeTreeComboBox.addItem(new cbTextItem(scopeTreeOptions[0],"handleSearchLimitChange();",true));
  599. scopeTreeComboBox.addItem(new cbTextItem(scopeTreeOptions[1],"handleSearchLimitChange();",false));
  600. scopeTreeComboBox.addItem(new cbTextImageItem(scopeTreeOptions[2],images[IMAGE_FILE].src,"handleSearchLimitChange();",false));
  601. scopeTreeComboBox.addItem(new cbTextImageItem(scopeTreeOptions[3],images[IMAGE_FOLDER].src,"handleSearchLimitChange();",false));
  602. }
  603. function addSearchDef(itemNum) {
  604. var filter = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId");
  605. var code = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("code");
  606. var label = dimCache.getCategory(csData.getDimension(),code).getLabel();
  607. csData.addSearchDef(document.getElementById("searchString").value,document.getElementById("searchType").selectedIndex, filter, label, code, scopeTreeComboBox.getSelectedItem() ,itemNum);
  608. addSearchDefToSelect(itemNum);
  609. }
  610. function addSearchDefToSelect(itemNum) {
  611. var string = csData.searchDefToString(itemNum);
  612. var select = document.getElementById("searchDefsSelect");
  613. var option = new Option(string, itemNum);
  614. select.options[itemNum] = option;
  615. }
  616. function deleteItems() {
  617. if (!actionsEnabled)
  618. return;
  619. //move backwards for efficiency.
  620. var select = document.getElementById("searchDefsSelect");
  621. for (var i = select.options.length - 1; i >= 0; i--) {
  622. if (select.options[i].selected) {
  623. csData.removeSearchDef(i);
  624. select.options[i] = null;
  625. }
  626. }
  627. if (!select.options.length) {
  628. hierRootPath = new Array();
  629. }
  630. resetEnabledActionControls();
  631. sendUpdateCountCommand();
  632. }
  633. function clearFields(editing) {
  634. document.getElementById("searchType").selectedIndex = 0;
  635. document.getElementById("searchString").value = "";
  636. var container = document.getElementById("NameScopeTreeDiv");
  637. var select = document.getElementById("searchDefsSelect");
  638. if (hierRootPath.length == 0 || (!editing && !document.getElementById("searchDefsSelect").childNodes.length) || (editing && document.getElementById("searchDefsSelect").childNodes.length == 1 && document.getElementById("searchDefsSelect").selectedIndex == 0)) {
  639. scopeTree.setTreeShowAlternateHierarchies(true);
  640. scopeTree.resetTreeToTop();
  641. } else {
  642. scopeTree.setTreeShowAlternateHierarchies(false);
  643. scopeTree.clearTreeContainer();
  644. scopeTree.initDimSubTree(csData.getDimension(),hierRootPath[0],true);
  645. }
  646. scopeTree.selectRoot();
  647. scopeTreeComboBox.setSelectedItem(0);
  648. handleSearchLimitChange();
  649. }
  650. function addItem() {
  651. if (!actionsEnabled)
  652. return;
  653. clearFields(false);
  654. document.getElementById("searchDefsSelect").selectedIndex = -1;
  655. showNameDefRightSide();
  656. SelectedSearchDef = csData.numSearchDefs();
  657. }
  658. function acceptItem() {
  659. //If adding the first, or editing the only one, update the hierRootPath.
  660. if (hierRootPath.length == 0 ||
  661. (document.getElementById("searchDefsSelect").childNodes.length == 1 && document.getElementById("searchDefsSelect").selectedIndex == 0)) {
  662. hierRootPath = scopeTree.getHierarchyRootsPath(scopeTree.getTreeSelectedItem(0).parentNode);
  663. }
  664. addSearchDef(SelectedSearchDef);
  665. document.getElementById("searchDefsSelect").selectedIndex = SelectedSearchDef;
  666. hideNameDefRightSide();
  667. resetEnabledActionControls();
  668. sendUpdateCountCommand();
  669. }
  670. function hideNameDefRightSide() {
  671. enableAllNameControls();
  672. document.getElementById("CustomSubsetsNameRightTable").className = "CustomSubsetsPaneRightTableHidden";
  673. }
  674. function showNameDefRightSide() {
  675. document.getElementById("CustomSubsetsNameRightTable").className = "CustomSubsetsPaneRightTable";
  676. disableAllNameControls();
  677. }
  678. function numberSelected(select) {
  679. var ctr = 0;
  680. for (var i = 0; i < select.options.length; i++) {
  681. if (select.options[i].selected)
  682. ctr++;
  683. }
  684. return ctr;
  685. }
  686. function editItem() {
  687. if (!actionsEnabled)
  688. return;
  689. var select = document.getElementById("searchDefsSelect");
  690. if (numberSelected(select) != 1)
  691. return;
  692. SelectedSearchDef = select.selectedIndex;
  693. showNameDefRightSide();
  694. clearFields(true);
  695. var searchDef = csData.getSearchDef(SelectedSearchDef);
  696. document.getElementById("searchType").selectedIndex = parseInt(searchDef.opCode);
  697. document.getElementById("searchString").value = searchDef.text;
  698. scopeTree.setTreeToCat(csData.getDimension(), searchDef.ancestorCode);
  699. scopeTreeComboBox.setSelectedItem(searchDef.incDesc);
  700. handleSearchLimitChange();
  701. }
  702. function selectedSearchDefChanged() {
  703. hideNameDefRightSide();
  704. SelectedSearchDef = document.getElementById("searchDefsSelect").selectedIndex;
  705. resetEnabledActionControls();
  706. }
  707. function handleDimbarClick(item) {
  708. var dimbar = document.getElementById("dimbar-content");
  709. //Find the dimbar item.
  710. var barItem = dimbar.firstChild.firstChild;
  711. while (item.getAttribute("dimIdx") != barItem.getAttribute("dimIdx")) {
  712. if (!hasNextSibling(barItem)) break;
  713. barItem = barItem.parentNode.nextSibling.firstChild;
  714. }
  715. barItem.setAttribute("category",item.getAttribute("name"));
  716. barItem.setAttribute("name",item.getAttribute("tag"));
  717. barItem.setAttribute("code",item.getAttribute("code"));
  718. barItem.setAttribute("alternate",(item.className == "dimbar_flyout_entry_alternate"));
  719. barItem.setAttribute("leaf",item.getAttribute("leaf"));
  720. barItem.setAttribute("ppds_id",item.getAttribute("ppdsId"));
  721. var link = document.getElementById("dimbar_item" + parseInt(barItem.getAttribute("number")) + "_cell").firstChild.firstChild;
  722. var img = link.childNodes[1];
  723. for (var i = link.childNodes.length - 1; i >= 0; i--) {
  724. link.removeChild(link.childNodes[i]);
  725. }
  726. link.appendChild(document.createTextNode(item.getAttribute("name")));
  727. link.appendChild(img);
  728. link.parentNode.className = "dimbar-dimension-span";
  729. if (item.getAttribute("code") != dimCache.getDimTopNode(parseInt(item.getAttribute("dimIdx"))).getCode())
  730. link.parentNode.className += "-filtered";
  731. barItem.setAttribute("item_width",barItem.offsetWidth);
  732. reflow_dimbar();
  733. }
  734. function validate_name() {
  735. if (!document.getElementById("searchDefsSelect").options.length) {
  736. displayCustomsubsetsMsg(strErrorNoSearchDefs);
  737. return false;
  738. }
  739. return true;
  740. }
  741. function cancelNameDefn() {
  742. hideNameDefRightSide();
  743. }
  744. function acceptNameDefn() {
  745. acceptItem();
  746. }
  747. function disableAllNameControls() {
  748. disableButton(document.getElementById("button-Cancel"));
  749. disableButton(document.getElementById("button-Back"));
  750. disableButton(document.getElementById("button-Next"));
  751. document.getElementById("addItemLink").className = "CustomSubsetsPaneLinkDisabled";
  752. document.getElementById("editItemLink").className = "CustomSubsetsPaneLinkDisabled";
  753. document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLinkDisabled";
  754. actionsEnabled = false;
  755. }
  756. function enableAllNameControls() {
  757. enableButton(document.getElementById("button-Cancel"));
  758. if (!csData.isEditing())
  759. enableButton(document.getElementById("button-Back"));
  760. enableButton(document.getElementById("button-Next"));
  761. actionsEnabled = true;
  762. resetEnabledActionControls();
  763. }
  764. function resetEnabledActionControls() {
  765. if (actionsEnabled) {
  766. document.getElementById("addItemLink").className = "CustomSubsetsPaneLink";
  767. if (SelectedSearchDef != -1 && numberSelected(document.getElementById("searchDefsSelect")) == 1) {
  768. document.getElementById("editItemLink").className = "CustomSubsetsPaneLink";
  769. } else {
  770. document.getElementById("editItemLink").className = "CustomSubsetsPaneLinkDisabled";
  771. }
  772. if (numberSelected(document.getElementById("searchDefsSelect")) > 0) {
  773. document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLink";
  774. } else {
  775. document.getElementById("deleteItemLink").className = "CustomSubsetsPaneLinkDisabled";
  776. }
  777. }
  778. }
  779. function sendUpdateCountCommand() {
  780. if (csData.numSearchDefs()) {
  781. var cmd = "MZn:" + csData.makeCommonCommand(1);
  782. cmd += csData.makeSearchDefsCommand() + csData.makeSearchRuleCommand() + csData.makeExclusionsCommand() + csData.makePickListCommand();
  783. var hf = topparent.getXtabFrame().document.getElementById("fhidden");
  784. var target = hf.target;
  785. hf.CNCT.value = 19;
  786. hf.CO.value = cmd;
  787. hf.target = CustomSubsetsResultCountFrame.name;
  788. hf.submit();
  789. hf.target = target;
  790. updateCount(strLoading);
  791. } else {
  792. updateCount("0");
  793. }
  794. }
  795. function updateCount(count) {
  796. var container = document.getElementById("resultCount");
  797. while (container.childNodes.length)
  798. container.removeChild(container.childNodes[container.childNodes.length - 1]);
  799. container.appendChild(document.createTextNode(count));
  800. }
  801. function customSubsetLinkOver(item) {
  802. if (item.className != "CustomSubsetsPaneLinkDisabled") {
  803. item.className = "CustomSubsetsPaneLinkRollover";
  804. }
  805. }
  806. function customSubsetLinkOut(item) {
  807. if (item.className != "CustomSubsetsPaneLinkDisabled") {
  808. item.className = "CustomSubsetsPaneLink";
  809. }
  810. }
  811. //******************************
  812. // By Picklist
  813. //******************************
  814. function init_picklist() {
  815. pickTree = new dimTree(document.getElementById("sourceTreeDiv"));
  816. pickTree.setTreeMultiSelect(true);
  817. pickTree.setTreeWideSelect(true);
  818. pickTree.setTreeHierRootsSelectable(false);
  819. pickTree.setTreeShowCustomSubsets(false);
  820. pickTree.initDimTree(csData.getDimension(),false);
  821. if (csData.isEditing() && csData.getType() == 3)
  822. disableButton(document.getElementById("button-Back"));
  823. for (var i =0; i < csResults.numResults(); i++) {
  824. var result = csResults.getResult(i);
  825. document.getElementById("picklistResultsDiv").appendChild(createPickListItem(result.label, result.id, result.code, result.isCalculated, result.isLeaf, result.picked, result.searchResult, result.excluded, result.fullPath));
  826. }
  827. refreshPicklistEnabling(null);
  828. }
  829. function getItemInPicklist(ppdsId) {
  830. var theItem = null;
  831. var item = document.getElementById("picklistResultsDiv").firstChild;
  832. while (item != null && theItem == null) {
  833. if (item.getAttribute("ppdsId") == ppdsId)
  834. theItem = item;
  835. item = item.nextSibling;
  836. }
  837. return theItem;
  838. }
  839. function moveOption(node, beforeNode) {
  840. var ppdsId = node.getAttribute("ppdsId");
  841. var item = getItemInPicklist(ppdsId);
  842. var cat;
  843. if (item == null) {
  844. cat = dimCache.getCategory(csData.getDimension(),node.getAttribute("code"));
  845. var dim = createPickListItem(CEncodingUtil.ForceUnescape(node.childNodes[node.childNodes.length - 1].innerHTML),ppdsId,cat.getCode(),cat.isCalculated(),cat.isLeaf(),true,false,false,createNodePath(node));
  846. //Check if the before node is a valid node, if so insert before it.
  847. if (beforeNode != null) {
  848. document.getElementById("picklistResultsDiv").insertBefore(dim,beforeNode);
  849. csData.addPickListCategory(ppdsId,beforeNode.getAttribute("ppdsId"));
  850. } else {
  851. document.getElementById("picklistResultsDiv").appendChild(dim);
  852. csData.addPickListCategory(ppdsId);
  853. }
  854. } else if (item.getAttribute("searchres") == "true") {
  855. item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", false, false);
  856. item.childNodes[1].className = "CustomSubsetsPickListResultsItemText";
  857. item.setAttribute("csdisabled","false");
  858. item.setAttribute("picked","true");
  859. item.childNodes[0].title = strPickedCat;
  860. csData.removeExclusion(item.getAttribute("ppdsId"));
  861. csData.addPickListCategory(ppdsId);
  862. }
  863. }
  864. function createNodePath(node,str) {
  865. var str2;
  866. str2 = node.lastChild.innerHTML;
  867. if (str != null)
  868. str2 += "/" + str;
  869. if (dimCache.getDimTopNode(csData.getDimension()).getCode() != node.getAttribute("code")) {
  870. str2 = createNodePath(node.parentNode.previousSibling,str2);
  871. }
  872. return str2;
  873. }
  874. function moveSelectedOptions() {
  875. if (pickTree.numTreeItemsSelected()) {
  876. if (!pickTree.selectionInSameHierarchy())
  877. return;
  878. //Check if we have a node selected to insert over.
  879. var selectedItem = getFirstSelectedItem();
  880. for (var i = 0; i < pickTree.numTreeItemsSelected(); i++) {
  881. moveOption(pickTree.getTreeSelectedItem(i).parentNode,selectedItem);
  882. }
  883. refreshPicklistEnabling(pickTree.getTreeSelectedItem(0).parentNode);
  884. } else {
  885. reEnableSelectedItems();
  886. }
  887. }
  888. function getIconSrc(isCalculated, leaf, searchRes, disabled) {
  889. if (!searchRes) {
  890. if (isCalculated)
  891. return images[IMAGE_CALCULATED_FILE].src;
  892. else if (leaf)
  893. return images[IMAGE_FILE].src;
  894. else
  895. return images[IMAGE_FOLDER].src;
  896. } else {
  897. if (!disabled) {
  898. if (isCalculated)
  899. return images[IMAGE_SEARCH_CALCULATED_FILE].src;
  900. else if (leaf)
  901. return images[IMAGE_SEARCH_FILE].src;
  902. else
  903. return images[IMAGE_SEARCH_FOLDER].src;
  904. } else {
  905. if (isCalculated)
  906. return images[IMAGE_SEARCH_CALCULATED_FILE_DISABLED].src;
  907. else if (leaf)
  908. return images[IMAGE_SEARCH_FILE_DISABLED].src;
  909. else
  910. return images[IMAGE_SEARCH_FOLDER_DISABLED].src;
  911. }
  912. }
  913. }
  914. function createPickListItem(text, ppdsId, code, isCalculated, isLeaf, isPicked, isSearchRes, isDisabled, fullPath) {
  915. var div = document.createElement("DIV");
  916. div.className = "CustomSubsetsPickListResultsItem";
  917. div.setAttribute("ppdsId",ppdsId);
  918. div.setAttribute("code", code);
  919. if (isSearchRes)
  920. div.setAttribute("searchres","true");
  921. else
  922. div.setAttribute("searchres","false");
  923. if (isPicked)
  924. div.setAttribute("picked","true");
  925. else
  926. div.setAttribute("picked","false");
  927. if (isDisabled)
  928. div.setAttribute("csdisabled","true");
  929. else
  930. div.setAttribute("csdisabled","false");
  931. insertIMGNode(div, getIconSrc(isCalculated, isLeaf, !isPicked, isDisabled), "CustomSubsetsPickListResultsIcon", [
  932. new attrib("title",(isPicked)? strPickedCat : strRuleResuts),
  933. new attrib("isCalculated",(isCalculated)? "true" : "false"),
  934. new attrib("isLeaf",(isLeaf)? "true" : "false")
  935. ]);
  936. var link = document.createElement("A");
  937. if (isDisabled)
  938. link.className = "customSubsetsPickListResultsItemTextStrikeout";
  939. else
  940. link.className = "CustomSubsetsPickListResultsItemText";
  941. link.href = "#";
  942. link.appendChild(document.createTextNode(text));
  943. link.title = fullPath;
  944. div.appendChild(link);
  945. div.onclick = selectPLResult;
  946. return div;
  947. }
  948. function handlePicklistTreeDblClick(event) {
  949. var eventM = new eventManager(event);
  950. eventM.cancelBubble();
  951. var src = eventM.getSrc();
  952. while (src.tagName != "DIV" && src.tagName != "div")
  953. src = src.parentNode;
  954. if (src.getAttribute("type") != "cm" || src.getAttribute("selectable") == "false" || src.getAttribute("tndisabled") == "true")
  955. return;
  956. moveOption(src);
  957. refreshPicklistEnabling(src);
  958. }
  959. function selectPLResult(event) {
  960. var eventM = new eventManager(event);
  961. var sourceObj = eventM.getSrc();
  962. if (sourceObj.tagName != "DIV")
  963. sourceObj = sourceObj.parentNode;
  964. if (sourceObj.getAttribute("selected") == "true" &&
  965. ((topparent.getGlobal("MacGecko") && eventM.theEvent.altKey) ||
  966. (!topparent.getGlobal("MacGecko") && eventM.theEvent.ctrlKey))) {
  967. deSelectPL(sourceObj);
  968. } else {
  969. if ((topparent.getGlobal("MacGecko"))? !eventM.theEvent.altKey : !eventM.theEvent.ctrlKey)
  970. deselectAllPLResults();
  971. selectPL(sourceObj);
  972. }
  973. eventM.cancelBubble();
  974. }
  975. function selectPL(item) {
  976. item.setAttribute("selected","true");
  977. item.className = "CustomSubsetsPickListResultsItemSelected";
  978. if (item.getAttribute("csdisabled") == "true")
  979. item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout";
  980. else
  981. item.childNodes[1].className = "customSubsetsPickListResultsItemTextSelected";
  982. }
  983. function deSelectPL(item) {
  984. item.setAttribute("selected","false");
  985. item.className = "CustomSubsetsPickListResultsItem";
  986. if (item.getAttribute("csdisabled") == "true")
  987. item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout";
  988. else
  989. item.childNodes[1].className = "customSubsetsPickListResultsItemText";
  990. }
  991. function selectAllPLResults() {
  992. var item = document.getElementById("picklistResultsDiv").firstChild;
  993. while (item != null) {
  994. selectPL(item);
  995. item = item.nextSibling;
  996. }
  997. }
  998. function deselectAllPLResults() {
  999. var item = document.getElementById("picklistResultsDiv").firstChild;
  1000. while (item != null) {
  1001. deSelectPL(item);
  1002. item = item.nextSibling;
  1003. }
  1004. }
  1005. function removeSelectedItems() {
  1006. var container = document.getElementById("picklistResultsDiv");
  1007. var item = container.firstChild;
  1008. var nextItem;
  1009. while (item != null) {
  1010. nextItem = item.nextSibling;
  1011. if (item.getAttribute("selected") == "true") {
  1012. if (item.getAttribute("searchres") == "true") {
  1013. item.setAttribute("csdisabled","true");
  1014. item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", true, true);
  1015. item.childNodes[1].className = "customSubsetsPickListResultsItemTextStrikeout";
  1016. item.childNodes[0].title = strRuleResuts;
  1017. csData.addExclusion(item.getAttribute("ppdsId"));
  1018. } else {
  1019. container.removeChild(item);
  1020. }
  1021. csData.removePicklistCategory(item.getAttribute("ppdsId"));
  1022. }
  1023. item = nextItem;
  1024. }
  1025. refreshPicklistEnabling(null);
  1026. }
  1027. function reEnableSelectedItems() {
  1028. var container = document.getElementById("picklistResultsDiv");
  1029. var item = container.firstChild;
  1030. while (item != null) {
  1031. if (item.getAttribute("selected") == "true" && item.getAttribute("csdisabled") == "true") {
  1032. item.setAttribute("csdisabled","false");
  1033. item.firstChild.src = getIconSrc(item.firstChild.getAttribute("isCalculated") == "true", item.firstChild.getAttribute("isLeaf") == "true", true, false);
  1034. item.childNodes[1].className = "customSubsetsPickListResultsItemTextSelected";
  1035. csData.removeExclusion(item.getAttribute("ppdsId"));
  1036. }
  1037. item = item.nextSibling;
  1038. }
  1039. }
  1040. function getFirstSelectedItem() {
  1041. var container = document.getElementById("picklistResultsDiv");
  1042. var item = container.firstChild;
  1043. while (item != null) {
  1044. if (item.getAttribute("selected") == "true" && item.getAttribute("searchres") != "true")
  1045. return item;
  1046. item = item.nextSibling;
  1047. }
  1048. return null;
  1049. }
  1050. function refreshPicklistEnabling(node) {
  1051. var container = document.getElementById("picklistResultsDiv");
  1052. if (!resultsEmpty && !container.childNodes.length) { //previously not empty, now empty
  1053. hierRootPath = new Array();
  1054. pickTree.enableAllTreeNodes();
  1055. resultsEmpty = true;
  1056. } else if (resultsEmpty && container.childNodes.length) { //Previously empty, now not empty
  1057. if (!hierRootPath.length) {
  1058. if (node == null && !hierRootPath.length) { //Set to the root of tree
  1059. hierRootPath = new Array();
  1060. hierRootPath[0] = document.getElementById("sourceTreeDiv").firstChild.getAttribute("code");
  1061. } else
  1062. hierRootPath = pickTree.getHierarchyRootsPath(node);
  1063. }
  1064. pickTree.setEnabledRootNode(hierRootPath);
  1065. resultsEmpty = false;
  1066. }
  1067. }
  1068. function initOptions(options, toBox) {
  1069. for (var i = 0;i < options.length; i++) {
  1070. toBox.options[i] = options[i];
  1071. }
  1072. }
  1073. function doPickListBack() {
  1074. if (csData.getType() == 1)
  1075. goto_page("N");
  1076. else if (csData.getType() == 2)
  1077. goto_page("M");
  1078. else
  1079. goto_page("I");
  1080. }
  1081. function validate_pickList() {
  1082. if (!numberOfPickedItems() && csData.getType() == 3) {
  1083. displayCustomsubsetsMsg(strErrorNoCats);
  1084. return false;
  1085. }
  1086. return true;
  1087. }
  1088. function numberOfPickedItems() {
  1089. var ctr = 0;
  1090. for (var i = 0; i < document.getElementById("picklistResultsDiv").childNodes.length; i++)
  1091. if (document.getElementById("picklistResultsDiv").childNodes[i].getAttribute("csdisabled") != "true")
  1092. ctr++;
  1093. return ctr;
  1094. }
  1095. function handlearrowbuttondown(button) {
  1096. button.className = "customSubsetsArrowButtonPressed";
  1097. }
  1098. function handlearrowbuttonup(button) {
  1099. button.className = "customSubsetsArrowButtonRollover";
  1100. }
  1101. function handlearrowbuttonrollover(button) {
  1102. button.className = "customSubsetsArrowButtonRollover";
  1103. }
  1104. function handlearrowbuttonrollout(button) {
  1105. button.className = "customSubsetsArrowButton";
  1106. }
  1107. //*********************************
  1108. // Measures Definition
  1109. //*********************************
  1110. function init_measure_def() {
  1111. measureCatTypeDiv = document.getElementById("measureCategoriesTypeDiv");
  1112. measureCatRangeSection = document.getElementById("measureCategoriesRange");
  1113. measureCatNumberSection = document.getElementById("measureCategoriesNumber");
  1114. measureCatTypeDiv.removeChild(measureCatRangeSection);
  1115. measureCatTypeDiv.removeChild(measureCatNumberSection);
  1116. measureTree = new dimTree(document.getElementById("measureTreeDiv"));
  1117. measureTree.setTreeWideSelect(true);
  1118. measureTree.setTreeMustSelect(true);
  1119. measureTree.setMeasurePlaceholdersGrayText(true);
  1120. measureTree.initDimTree(topparent.getGlobal("gDimensionInfo").length - 1,false);
  1121. scopeTree = new dimTree(document.getElementById("MeasureScopeTreeDiv"));
  1122. scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN);
  1123. scopeTree.setTreeMustSelect(true);
  1124. scopeTree.setTreeWideSelect(true);
  1125. scopeTree.setLeavesSelectable(false);
  1126. scopeTree.setTreeShowCustomSubsets(false);
  1127. scopeTree.initDimTree(csData.getDimension(),true);
  1128. scopeTree.selectRoot();
  1129. initScopeTreeComboBox();
  1130. //On a separate thread to ensure that the browser refreshes its content before this is called.
  1131. setTimeout("init_dimbar();",1);
  1132. if (csData.isEditing())
  1133. disableButton(document.getElementById("button-Back"));
  1134. var searchRule = csData.getSearchRule();
  1135. if (searchRule != null) {
  1136. document.getElementById("csMeasureType").selectedIndex = searchRule.type;
  1137. csMeasureTypeChanged();
  1138. if (searchRule.type == CS_RULE_RANGE) {
  1139. if (!searchRule.rule.isMin) {
  1140. document.getElementById("csMinimum").value = CNumUtil.localizeDecimal(searchRule.rule.from);
  1141. document.getElementById("csMinSelectCus").checked = true;
  1142. }
  1143. if (!searchRule.rule.isMax) {
  1144. document.getElementById("csMaximum").value = CNumUtil.localizeDecimal(searchRule.rule.to);
  1145. document.getElementById("csMaxSelectCus").checked = true;
  1146. }
  1147. } else if (searchRule.type == CS_RULE_COUNT) {
  1148. if (searchRule.rule.end == CS_END_TOP)
  1149. document.getElementById("csTop").checked = true;
  1150. else
  1151. document.getElementById("csBottom").checked = true;
  1152. document.getElementById("csTopBottomNumber").value = searchRule.rule.number;
  1153. }
  1154. measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1,searchRule.measureCode);
  1155. scopeTree.setTreeToCat(csData.getDimension(),searchRule.ancestorCode);
  1156. scopeTreeComboBox.setSelectedItem(searchRule.incDesc);
  1157. handleSearchLimitChange();
  1158. } else {
  1159. csMeasureTypeChanged();
  1160. document.getElementById("csMinimum").value = "";
  1161. document.getElementById("csMaximum").value = "";
  1162. //Get the current measure from the crosstab cell
  1163. var frame = topparent.getChartFrame();
  1164. if (!frame)
  1165. frame = topparent.getXtabFrame();
  1166. var measureCode = frame.document.getElementById("dimbar-content").childNodes[topparent.getGlobal("gDimensionInfo").length - 1].firstChild.getAttribute("code");
  1167. if (dimCache.getDimTopNode(topparent.getGlobal("gDimensionInfo").length - 1).getCode() != measureCode) {
  1168. measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1, measureCode);
  1169. } else {
  1170. //No measure selected, select the default measure.
  1171. if (defaultMeasureCode == "")
  1172. measureTree.selectFirstChildOfRoot();
  1173. else
  1174. measureTree.setTreeToCat(topparent.getGlobal("gDimensionInfo").length - 1,defaultMeasureCode);
  1175. }
  1176. }
  1177. }
  1178. function setMeasureDefinitionData() {
  1179. var measure = measureTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId");
  1180. var measureCode = measureTree.getTreeSelectedItem(0).parentNode.getAttribute("code");
  1181. var searchCode = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("code");
  1182. var searchId = scopeTree.getTreeSelectedItem(0).parentNode.getAttribute("ppdsId");
  1183. csData.setSearchRule(measure,measureCode,scopeTreeComboBox.getSelectedItem(), searchCode,searchId);
  1184. if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_RANGE) {
  1185. csData.getSearchRule().type = CS_RULE_RANGE;
  1186. var from = 0;
  1187. var isMin = 1;
  1188. if (document.getElementById("csMinSelectCus").checked && isNumber(document.getElementById("csMinimum"))) {
  1189. from = getNumFromField(document.getElementById("csMinimum").value);
  1190. isMin = 0;
  1191. }
  1192. var to = 0;
  1193. var isMax = 1;
  1194. if (document.getElementById("csMaxSelectCus").checked && isNumber(document.getElementById("csMaximum"))) {
  1195. to = getNumFromField(document.getElementById("csMaximum").value);
  1196. isMax = 0;
  1197. }
  1198. csData.setSearchRuleRange(from, to, isMin, isMax);
  1199. } else if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_NUMBER) {
  1200. csData.getSearchRule().type = CS_RULE_COUNT;
  1201. var end = (document.getElementById("csTop").checked)? CS_END_TOP : CS_END_BOTTOM ;
  1202. var number = 0;
  1203. if (isNumber(document.getElementById("csTopBottomNumber"), true))
  1204. number = getNumFromField(document.getElementById("csTopBottomNumber").value);
  1205. csData.setSearchRuleCount( end, number );
  1206. }
  1207. hierRootPath = scopeTree.getHierarchyRootsPath(scopeTree.getTreeSelectedItem(0).parentNode);
  1208. getFiltersFromDimBar(document.getElementById("dimbar-content"));
  1209. }
  1210. function getFiltersFromDimBar(dimBar) {
  1211. var dimItem = dimBar.firstChild.firstChild;
  1212. while (dimItem && dimItem.tagName == "TABLE") {
  1213. csData.addSearchRuleFilter(parseInt(dimItem.getAttribute("ppds_id")));
  1214. if (!hasNextSibling(dimItem)) break;
  1215. dimItem = dimItem.parentNode.nextSibling.firstChild;
  1216. }
  1217. }
  1218. function csMinimumChange() {
  1219. document.getElementById("csMinSelectCus").checked = true;
  1220. }
  1221. function csMaximumChange() {
  1222. document.getElementById("csMaxSelectCus").checked = true;
  1223. }
  1224. function clearCSMinimum() {
  1225. document.getElementById("csMinimum").value = "";
  1226. }
  1227. function clearCSMaximum() {
  1228. document.getElementById("csMaximum").value = "";
  1229. }
  1230. function handleSearchLimitChange() {
  1231. switch (scopeTreeComboBox.getSelectedItem()) {
  1232. case 0: scopeTree.setTreeSelectionType(TREE_SELECTION_CHILDREN); break;
  1233. case 1: scopeTree.setTreeSelectionType(TREE_SELECTION_ALL_DESCENDANTS); break;
  1234. case 2: scopeTree.setTreeSelectionType(TREE_SELECTION_DESCENDENT_LEAVES); break;
  1235. case 3: scopeTree.setTreeSelectionType(TREE_SELECTION_DESCENDENT_NON_LEAVES); break;
  1236. }
  1237. }
  1238. function validate_measure() {
  1239. if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_RANGE) {
  1240. convertPercentages(document.getElementById("csMinimum"));
  1241. convertPercentages(document.getElementById("csMaximum"));
  1242. var from = document.getElementById("csMinimum").value;
  1243. var to = document.getElementById("csMaximum").value;
  1244. if (!document.getElementById("csMinSelectDef").checked && !isNumber(document.getElementById("csMinimum"))) {
  1245. displayCustomsubsetsMsg(strErrorInvalidFrom);
  1246. return false;
  1247. }
  1248. if (!document.getElementById("csMaxSelectDef").checked && !isNumber(document.getElementById("csMaximum"))) {
  1249. displayCustomsubsetsMsg(strErrorInvalidTo);
  1250. return false;
  1251. }
  1252. if (!document.getElementById("csMinSelectDef").checked && !document.getElementById("csMaxSelectDef").checked && !(getNumFromField(from) <= getNumFromField(to))) {
  1253. displayCustomsubsetsMsg(strErrorInvalidRange);
  1254. return false;
  1255. }
  1256. } else if (document.getElementById("csMeasureType").selectedIndex == MEASURE_TYPE_NUMBER) {
  1257. var numberField = document.getElementById("csTopBottomNumber");
  1258. if (!isNumber(numberField, true) || getNumFromField(numberField.value) <= 0) {
  1259. displayCustomsubsetsMsg(strErrorInvalidNumCats);
  1260. return false;
  1261. }
  1262. if (getNumFromField(numberField.value) > maxNoCats) {
  1263. displayCustomsubsetsMsg(strErrorTooManyCats);
  1264. return false;
  1265. }
  1266. }
  1267. return true;
  1268. }
  1269. function getNumFromField(value) {
  1270. return parseFloat(CNumUtil.normalizeDecimal(value));
  1271. }
  1272. function convertPercentages(field) {
  1273. var value = field.value;
  1274. if (value.charAt(value.length - 1) == "%") {
  1275. field.value = value.substring(0,value.length - 1);
  1276. if (isNumber(field))
  1277. field.value = getNumFromField(value)/100;
  1278. else
  1279. field.value += "%";
  1280. }
  1281. }
  1282. function isNumber(elem, excludeDecimal) {
  1283. if (!elem.value.length)
  1284. return false;
  1285. var validChars;
  1286. if (excludeDecimal)
  1287. validChars = "/[^0-9\-]/";
  1288. else
  1289. validChars = "/[^0-9" + decimalpt + "\-]/";
  1290. return CNumUtil.validateNumField(elem, true, validChars);
  1291. }
  1292. function makeScopeTreeOptions(event) {
  1293. scopeTreeComboBox.displayDropDown();
  1294. }
  1295. function clearScopeTreeOptionsDropDown() {
  1296. scopeTreeComboBox.hideDropDown();
  1297. }
  1298. function csMeasureTypeChanged() {
  1299. while (measureCatTypeDiv.childNodes.length)
  1300. measureCatTypeDiv.removeChild(measureCatTypeDiv.firstChild);
  1301. switch(document.getElementById("csMeasureType").selectedIndex) {
  1302. case MEASURE_TYPE_RANGE:
  1303. measureCatTypeDiv.appendChild(measureCatRangeSection);
  1304. break;
  1305. case MEASURE_TYPE_NUMBER:
  1306. measureCatTypeDiv.appendChild(measureCatNumberSection);
  1307. break;
  1308. }
  1309. }
  1310. //******************************
  1311. // Rename Dialog
  1312. //******************************
  1313. function init_rename() {
  1314. document.getElementById("subsetName").value = csData.getName();
  1315. }