CCombinedFilter.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. /****************************************************************
  2. ** Licensed Materials - Property of IBM
  3. **
  4. ** BI and PM: qs
  5. **
  6. ** (C) Copyright IBM Corp. 2001, 2015
  7. **
  8. ** US Government Users Restricted Rights - Use, duplication or
  9. ** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  10. *****************************************************************/
  11. // Copyright (C) 2008 Cognos ULC, an IBM Company. All Rights Reserved.
  12. // Cognos and the Cognos logo are trademarks of Cognos ULC (formerly Cognos Incorporated) in the United States and/or other countries. IBM and the IBM logo are trademarks of International Business Machines Corporation in the United States, or other countries, or both. Other company, product, or service names may be trademarks or service marks of others.
  13. var giFILTERVIEW_SUMMARY = 1;
  14. var giFILTERVIEW_RAW = 2;
  15. var gsFILTERID_RAW = "raw";
  16. var gsFILTERID_SUMMARY = "summary";
  17. var greCLS_FILTERTOPROW = /\bclsFilterTopRow\b/g;
  18. var greCLS_FILTERSELECTED = /\bclsFilterSelected\b/g;
  19. var _space_ = " ";
  20. var gSelRows = [];
  21. function CCombinedFilter(nNode)
  22. {
  23. this.m_nNode = nNode;
  24. if (!this.m_nNode)
  25. {
  26. this.m_nNode = XMLBuilderCreateElementNS("", "CombinedFilter", getOrCreateMiniQueryDocument());
  27. }
  28. this.m_oRawFilter = null;
  29. this.m_oSummaryFilter = null;
  30. this.m_bDirty = false;
  31. this.m_dicPromptValues = new CDictionary();
  32. this.m_iFilterView = giFILTERVIEW_RAW;
  33. this.m_oContainer = null;
  34. this.m_oAnchor = null;
  35. };
  36. function CCombinedFilter_clone()
  37. {
  38. return ( new CCombinedFilter(this.m_nNode.cloneNode(true)) );
  39. };
  40. function CCombinedFilter_addFilter(sId, sRefId, sRefType, sType, sCondition, sSummary, sText)
  41. {
  42. var oCurrentFilterGroup = this.getCurrentFilterGroup();
  43. var oFilter = new CFilter(sId, sRefId, sRefType, sType, sCondition, sSummary, sText);
  44. oCurrentFilterGroup.addPredicate(oFilter);
  45. return oFilter;
  46. };
  47. function CCombinedFilter_addPromptValue(sKey, oValue)
  48. {
  49. this.m_dicPromtValues.add(sKey, oValue);
  50. this.setDirty();
  51. };
  52. function CCombinedFilter_clearDirtyFlag()
  53. {
  54. this.setDirty(false);
  55. this.getSummaryFilter().clearDirtyFlag();
  56. this.getRawFilter().clearDirtyFlag();
  57. };
  58. function CCombinedFilter_deleteAll()
  59. {
  60. if (this.m_iFilterView == giFILTERVIEW_SUMMARY)
  61. {
  62. this.removeNodes("SummaryFilter");
  63. this.m_oSummaryFilter = null;
  64. }
  65. else
  66. {
  67. this.removeNodes("RawFilter");
  68. this.m_oRawFilter = null;
  69. }
  70. this.setDirty();
  71. };
  72. function CCombinedFilter_deleteFilters(arID)
  73. {
  74. var sId = null;
  75. for (var i in arID)
  76. {
  77. sId = arID[i];
  78. if (this.getRawFilter().getId() == sId)
  79. {
  80. this.removeNodes("RawFilter");
  81. this.m_oRawFilter = null;
  82. }
  83. else if (this.getSummaryFilter().getId() == sId)
  84. {
  85. this.removeNodes("SummaryFilter");
  86. this.m_oSummaryFilter = null;
  87. }
  88. else
  89. {
  90. var obj = this.getFilterById(sId);
  91. if (obj !== null)
  92. {
  93. obj.removeSelf(false);
  94. }
  95. }
  96. }
  97. this.setDirty();
  98. };
  99. function CCombinedFilter_findOrCreateRootNode(sId)
  100. {
  101. var bIsRaw = (sId == gsFILTERID_RAW);
  102. var sNodeName = ( bIsRaw ? "RawFilter" : "SummaryFilter" );
  103. var oF = ( bIsRaw ? this.m_oRawFilter : this.m_oSummaryFilter );
  104. if (!oF)
  105. {
  106. var oMQMgr = goApplicationManager.getMiniQueryManager();
  107. var nRoot = XMLHelper_FindChildByTagName(this.m_nNode, sNodeName);
  108. if (!nRoot)
  109. {
  110. nRoot = XMLBuilderCreateElementNS("", sNodeName, oMQMgr.getDoc());
  111. this.m_nNode.appendChild(nRoot);
  112. }
  113. var nFG = XMLHelper_FindChildByTagName(nRoot, "FilterGroup", false);
  114. if (!nFG)
  115. {
  116. nFG = XMLBuilderCreateElementNS("", "FilterGroup", oMQMgr.getDoc());
  117. nFG.setAttribute("operator", "AND");
  118. nRoot.appendChild(nFG);
  119. }
  120. oF = new CFilterGroup("", nFG);
  121. if (bIsRaw) {
  122. this.m_oRawFilter = oF;
  123. }
  124. else {
  125. this.m_oSummaryFilter = oF;
  126. }
  127. }
  128. return oF;
  129. };
  130. function CCombinedFilter_generateID(sPrefix)
  131. {
  132. var iIndex = 0;
  133. var bInUse = true;
  134. var sIndex = "";
  135. var sId = "";
  136. if (!sPrefix || sPrefix.length === 0)
  137. {
  138. sPrefix = "F";
  139. }
  140. while (bInUse == true)
  141. {
  142. sIndex = iIndex + '';
  143. sId = sPrefix + sIndex;
  144. if (this.isIdUnique(sId))
  145. {
  146. bInUse = false;
  147. break;
  148. }
  149. iIndex++;
  150. }
  151. return sId;
  152. };
  153. function CCombinedFilter_isIdUnique(sId)
  154. {
  155. var aElements = XMLHelper_FindChildrenByAttribute(this.m_nNode, "id", sId, true, false);
  156. var oMQMgr = goApplicationManager.getMiniQueryManager();
  157. var aMQElements = XMLHelper_FindChildrenByAttribute(oMQMgr.getDoc(), "id", sId, true, false);
  158. var bIsUnique = false;
  159. if ((! aElements || aElements.length === 0) && (!aMQElements || aMQElements.length === 0))
  160. {
  161. bIsUnique = true;
  162. }
  163. return bIsUnique;
  164. };
  165. function CCombinedFilter_getCommand()
  166. {
  167. var oSummary = this.getSummaryFilter();
  168. var oRaw = this.getRawFilter();
  169. this.validateCFilterGroupRoot(oSummary);
  170. this.validateCFilterGroupRoot(oRaw);
  171. var aSummary = oSummary.getCommand();
  172. var aRaw = oRaw.getCommand();
  173. var sCmd = createCommand("O", "X", aSummary.concat(aRaw));
  174. sCmd = this.addHiddenColumns(oRaw, sCmd);
  175. sCmd = this.addHiddenColumns(oSummary, sCmd);
  176. return sCmd;
  177. };
  178. CCombinedFilter.prototype.addHiddenColumns = function(oFG, sCmd)
  179. {
  180. var sRetval = sCmd;
  181. var aIDs = oFG.getColumnIds();
  182. var sId = "";
  183. for (var i = 0; i < aIDs.length; i++)
  184. {
  185. sRetval = wrapCmdWithCreateColumnBasedonMetadataItem(sRetval, aIDs[i]);
  186. }
  187. return sRetval;
  188. };
  189. function CCombinedFilter_getCurrentFilterGroup()
  190. {
  191. if (this.m_iFilterView == giFILTERVIEW_RAW)
  192. {
  193. return this.getRawFilter();
  194. }
  195. return this.getSummaryFilter();
  196. };
  197. function CCombinedFilter_getFilterById(sId)
  198. {
  199. var oFilterTemp = null;
  200. oFilterTemp = this.getCurrentFilterGroup().getFilterById(sId);
  201. if (oFilterTemp === null && this.getSummaryFilter())
  202. {
  203. oFilterTemp = this.getSummaryFilter().getFilterById(sId);
  204. }
  205. if (oFilterTemp === null && this.getRawFilter())
  206. {
  207. oFilterTemp = this.getRawFilter().getFilterById(sId);
  208. }
  209. return oFilterTemp;
  210. };
  211. function CCombinedFilter_getPromptKeys()
  212. {
  213. return this.m_dicPromptValues.keys();
  214. };
  215. function CCombinedFilter_getPromptValue(key)
  216. {
  217. return this.m_dicPromptValues[key];
  218. };
  219. function CCombinedFilter_getRawFilter()
  220. {
  221. if (!this.m_oRawFilter)
  222. {
  223. this.m_oRawFilter = this.findOrCreateRootNode(gsFILTERID_RAW);
  224. }
  225. return this.m_oRawFilter;
  226. };
  227. function CCombinedFilter_getSelectedIds(oContainer)
  228. {
  229. var arIds = [];
  230. var oTRs = oContainer.getElementsByTagName("TR");
  231. for (var i = 0; i < oTRs.length; i++)
  232. {
  233. if (oTRs[i].className.match(greCLS_FILTERSELECTED))
  234. {
  235. arIds.push(oTRs[i].id);
  236. }
  237. }
  238. return arIds;
  239. };
  240. function CCombinedFilter_getSummaryFilter()
  241. {
  242. if (!this.m_oSummaryFilter)
  243. {
  244. this.m_oSummaryFilter = this.findOrCreateRootNode(gsFILTERID_SUMMARY);
  245. }
  246. return this.m_oSummaryFilter;
  247. };
  248. function CCombinedFilter_groupFilters(arID, sOperator)
  249. {
  250. var sId = null;
  251. if (arID === null || typeof arID != "object" || arID.length < 2)
  252. {
  253. return null;
  254. }
  255. var oNewFG = new CFilterGroup();
  256. if (arID.length)
  257. {
  258. var oFirstSelectedChild = this.getFilterById(arID[0]);
  259. this.getCurrentFilterGroup().m_nNode.insertBefore(oNewFG.m_nNode, oFirstSelectedChild.m_nNode);
  260. }
  261. for (var i = 0; i < arID.length; i++)
  262. {
  263. sId = arID[i];
  264. var oPred = this.getFilterById(sId);
  265. if (oPred !== null)
  266. {
  267. oNewFG.addPredicate(oPred.m_nNode.cloneNode(true));
  268. oPred.removeSelf(true);
  269. }
  270. }
  271. if (!sOperator) { sOperator = this.getCurrentFilterGroup().getOperator(); }
  272. oNewFG.setOperator(sOperator);
  273. this.getCurrentFilterGroup().setDirty();
  274. this.setDirty();
  275. return oNewFG;
  276. };
  277. function CCombinedFilter_isDirty()
  278. {
  279. return (this.m_bDirty || this.hasDirtyChildren());
  280. };
  281. function CCombinedFilter_hasDirtyChildren()
  282. {
  283. var oFilterGroupDetail = this.getRawFilter();
  284. var oFilterGroupSummary = this.getSummaryFilter();
  285. if (oFilterGroupDetail.isDirty() || oFilterGroupSummary.isDirty())
  286. {
  287. return true;
  288. }
  289. return (oFilterGroupDetail.hasDirtyChildren() || oFilterGroupSummary.hasDirtyChildren());
  290. };
  291. function CCombinedFilter_setDirty(bDirty)
  292. {
  293. this.m_bDirty = (bDirty !== false);
  294. };
  295. function CCombinedFilter_setFilterView(iView)
  296. {
  297. this.m_iFilterView = (iView == giFILTERVIEW_RAW ? giFILTERVIEW_RAW : giFILTERVIEW_SUMMARY);
  298. };
  299. function CCombinedFilter_removeNodes(sNodeName)
  300. {
  301. var aNodes = this.m_nNode.getElementsByTagName(sNodeName);
  302. for (var idxNode = 0; idxNode < aNodes.length; idxNode++)
  303. {
  304. aNodes[idxNode].parentNode.removeChild(aNodes[idxNode]);
  305. }
  306. };
  307. function CCombinedFilter_render()
  308. {
  309. var s = '<table width="100%" border="0" cellspacing="0" cellpadding="2"><tbody>';
  310. s += '<tr class="tableHeader">' +
  311. this.renderHeader(16) +
  312. this.renderSeparator() +
  313. this.renderHeader(30) +
  314. this.renderSeparator() +
  315. this.renderHeader("100%", filterMsgStrings["FILTER_COMBINE_COLUMN_HEADER"]) +
  316. '</tr>';
  317. var oFilterGroup = this.getCurrentFilterGroup();
  318. var aChildNodes = oFilterGroup.m_nNode.childNodes;
  319. if (aChildNodes.length <= 0)
  320. {
  321. s += '<tr>';
  322. s += '<td class="tabletext">&nbsp;</td>';
  323. s += '<td class="tabletext">&nbsp;</td>';
  324. s += '<td class="tabletext" style="vertical-align:top">&nbsp;</td>';
  325. s += '<td class="tabletext">&nbsp;</td>';
  326. s += '<td class="tabletext" style="padding-right:3px"><span' + ( this.isDirty() ? ' class="bold"' : '') + '>';
  327. s += filterMsgStrings["FILTER_COMBINE_NO_FILTER"];
  328. s += '</span> <a href="javascript:void afl();" alt="" title=""';
  329. s += ' onmouseover="window.status=\'\';if(event.preventDefault) event.preventDefault();return true;"';
  330. s += ' onmouseout="window.status=\'\';if(event.preventDefault) event.preventDefault();return true;"';
  331. s += '>' + filterMsgStrings["FILTER_COMBINE_ADD_LINE"] + '</a></td></tr>';
  332. }
  333. for (var i = 0; i < aChildNodes.length; i++)
  334. {
  335. var oChild = aChildNodes[i];
  336. var oPredicate = null;
  337. if (oChild.nodeName.match(/^FilterGroup$/i)) {
  338. oPredicate = new CFilterGroup("", oChild);
  339. }
  340. else {
  341. oPredicate = new CFilter("", oChild);
  342. }
  343. var sId = oChild.getAttribute("id");
  344. s += '<tr id="' + sId + '" class="clsFilterTopRow">';
  345. s += '<td class="tabletext" style="vertical-align:top">' + oFilterGroup.renderSelector() + '</td>';
  346. s += '<td class="tabletext">&nbsp;</td>';
  347. s += '<td class="tabletext" style="padding:5px 0px 0px 0px;vertical-align:top">';
  348. if ( i > 0 ) {
  349. s += oFilterGroup.renderOperator();
  350. }
  351. else {
  352. s += '&nbsp;';
  353. }
  354. s += '</td><td class="tabletext">&nbsp;</td>';
  355. s += '<td class="tabletext" style="padding-right:3px">' + oPredicate.render() + '</td></tr>';
  356. }
  357. s += '</tbody></table>';
  358. return s;
  359. };
  360. function CCombinedFilter_renderHeader(wdth, sText)
  361. {
  362. var s = '<td class="tableTitle" height="10" width="' + wdth + '" valign="center" nowrap="nowrap" style="padding-left:2px;padding-top:2px;">';
  363. if (typeof sText == "string")
  364. {
  365. s += sText;
  366. }
  367. else
  368. {
  369. var sRoot = "";
  370. if (goApplicationManager.getReportFrame())
  371. {
  372. sRoot = goApplicationManager.getReportFrame().oCVQS.getWebContentRoot();
  373. }
  374. s += '<img src="' + sRoot + '/ps/images/space.gif" width="' + wdth + '" height="1">';
  375. }
  376. return s;
  377. };
  378. function CCombinedFilter_renderSeparator()
  379. {
  380. var sRoot = "";
  381. if (goApplicationManager.getReportFrame())
  382. {
  383. sRoot = goApplicationManager.getReportFrame().oCVQS.getWebContentRoot();
  384. }
  385. return '<td height="15" width="1"><table cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="tableHeaderDivider"><img src="' + sRoot + '/ps/images/space.gif" width="1" height="15"></td></tr></tbody></table></td>';
  386. };
  387. function CCombinedFilter_renderFilterView(oFilterViewObj)
  388. {
  389. cf.cfgSet("LAST_DIALOG", "filterComplex");
  390. cf.gSelRows = new Array();
  391. oFilterViewObj.innerHTML = this.render();
  392. };
  393. function CCombinedFilter_unGroupFilters(arID)
  394. {
  395. var sId = null;
  396. for (var i = 0; i < arID.length; i++)
  397. {
  398. sId = arID[i];
  399. var oPred = this.getFilterById(sId);
  400. if (oPred instanceof CFilterGroup)
  401. {
  402. var nPred = oPred.m_nNode;
  403. var nParent = nPred.parentNode;
  404. var oParent = new CFilterGroup("", nParent);
  405. if (nParent && nParent.childNodes && nParent.childNodes.length <= 1)
  406. {
  407. oParent.setOperator(oPred.getOperator());
  408. this.validateCFilterGroupRoot(oParent);
  409. }
  410. for (var idxChild = 0; idxChild < nPred.childNodes.length; idxChild++)
  411. {
  412. nParent.insertBefore(nPred.childNodes[idxChild].cloneNode(true), nPred);
  413. }
  414. nParent.removeChild(nPred);
  415. oParent.setDirty();
  416. }
  417. }
  418. this.setDirty();
  419. };
  420. function CCombinedFilter_validateCFilterGroupRoot(oFG)
  421. {
  422. if (oFG instanceof CFilterGroup && oFG.getDepth() === 0)
  423. {
  424. if (oFG.getOperator() == gsFILTEROPERATOR_NAND)
  425. {
  426. oFG.setOperator(gsFILTEROPERATOR_AND);
  427. }
  428. else if (oFG.getOperator() == gsFILTEROPERATOR_NOR)
  429. {
  430. oFG.setOperator(gsFILTEROPERATOR_OR);
  431. }
  432. var bReStart = true;
  433. while (bReStart)
  434. {
  435. bReStart = false;
  436. var aFGs = XMLHelper_FindChildrenByTagName(this.m_nNode, "FilterGroup");
  437. for (var idxFG = 0; idxFG < aFGs.length; idxFG++)
  438. {
  439. var nChild = aFGs[idxFG];
  440. if (nChild.childNodes.length <= 0)
  441. {
  442. nChild.parentNode.removeChild(nChild);
  443. bReStart = true;
  444. }
  445. }
  446. }
  447. }
  448. };
  449. CCombinedFilter.prototype.addFilter = CCombinedFilter_addFilter;
  450. CCombinedFilter.prototype.addPromptValue = CCombinedFilter_addPromptValue;
  451. CCombinedFilter.prototype.clone = CCombinedFilter_clone;
  452. CCombinedFilter.prototype.clearDirtyFlag = CCombinedFilter_clearDirtyFlag;
  453. CCombinedFilter.prototype.deleteAll = CCombinedFilter_deleteAll;
  454. CCombinedFilter.prototype.deleteFilters = CCombinedFilter_deleteFilters;
  455. CCombinedFilter.prototype.findOrCreateRootNode = CCombinedFilter_findOrCreateRootNode;
  456. CCombinedFilter.prototype.generateID = CCombinedFilter_generateID;
  457. CCombinedFilter.prototype.getCommand = CCombinedFilter_getCommand;
  458. CCombinedFilter.prototype.getCurrentFilterGroup = CCombinedFilter_getCurrentFilterGroup;
  459. CCombinedFilter.prototype.getFilterById = CCombinedFilter_getFilterById;
  460. CCombinedFilter.prototype.getPromptKeys = CCombinedFilter_getPromptKeys;
  461. CCombinedFilter.prototype.getPromptValue = CCombinedFilter_getPromptValue;
  462. CCombinedFilter.prototype.getRawFilter = CCombinedFilter_getRawFilter;
  463. CCombinedFilter.prototype.getSelectedIds = CCombinedFilter_getSelectedIds;
  464. CCombinedFilter.prototype.getSummaryFilter = CCombinedFilter_getSummaryFilter;
  465. CCombinedFilter.prototype.groupFilters = CCombinedFilter_groupFilters;
  466. CCombinedFilter.prototype.isDirty = CCombinedFilter_isDirty;
  467. CCombinedFilter.prototype.hasDirtyChildren = CCombinedFilter_hasDirtyChildren;
  468. CCombinedFilter.prototype.removeNodes = CCombinedFilter_removeNodes;
  469. CCombinedFilter.prototype.render = CCombinedFilter_render;
  470. CCombinedFilter.prototype.renderHeader = CCombinedFilter_renderHeader;
  471. CCombinedFilter.prototype.renderSeparator = CCombinedFilter_renderSeparator;
  472. CCombinedFilter.prototype.setDirty = CCombinedFilter_setDirty;
  473. CCombinedFilter.prototype.setFilterView = CCombinedFilter_setFilterView;
  474. CCombinedFilter.prototype.unGroupFilters = CCombinedFilter_unGroupFilters;
  475. CCombinedFilter.prototype.validateCFilterGroupRoot = CCombinedFilter_validateCFilterGroupRoot;
  476. CCombinedFilter.prototype.isIdUnique = CCombinedFilter_isIdUnique;
  477. CCombinedFilter.prototype.renderFilterView = CCombinedFilter_renderFilterView;
  478. function CF_SelectRow(e)
  479. {
  480. var oSrc = null;
  481. var oCFilters = getConfigFrame().getCombinedFilter();
  482. var bSelected = true;
  483. oSrc = (e.srcElement ? e.srcElement : e.target);
  484. while ( oSrc && !oSrc.className.match(greCLS_FILTERTOPROW) && oSrc.parentNode) { oSrc = oSrc.parentNode; }
  485. if (!oSrc.className.match(greCLS_FILTERTOPROW)) { oSrc = null; }
  486. bSelected = !oSrc.className.match(greCLS_FILTERSELECTED);
  487. if (oCFilters)
  488. {
  489. var oRows = oCFilters.getCurrentFilterGroup().getPredicates();
  490. var oDoc = (oSrc.ownerDocument ? oSrc.ownerDocument : oSrc.document);
  491. var idxRow = 0;
  492. if (!e.ctrlKey)
  493. {
  494. for (idxRow = 0; idxRow < oRows.length; idxRow++)
  495. {
  496. CF_selectObj(oDoc.getElementById(oRows[idxRow].getId()), false);
  497. }
  498. }
  499. if (e.shiftKey && oCFilters.m_oAnchor !== null)
  500. {
  501. var lowest = -1;
  502. var highest = -1;
  503. for (idxRow = 0; idxRow < oRows.length; idxRow++)
  504. {
  505. if (oDoc.getElementById(oRows[idxRow].getId()) == oCFilters.m_oAnchor)
  506. {
  507. lowest = highest = idxRow;
  508. break;
  509. }
  510. }
  511. for (idxRow = 0; idxRow < oRows.length; idxRow++)
  512. {
  513. if (oDoc.getElementById(oRows[idxRow].getId()) == oSrc)
  514. {
  515. if (idxRow < lowest) { lowest = idxRow; }
  516. else { highest = idxRow; }
  517. break;
  518. }
  519. }
  520. if (lowest >=0 && highest >=0)
  521. {
  522. for (idxRow = lowest; idxRow <= highest; idxRow++)
  523. {
  524. CF_selectObj( oDoc.getElementById(oRows[idxRow].getId()), true );
  525. }
  526. }
  527. }
  528. else
  529. {
  530. CF_selectObj( oSrc, (e.ctrlKey ? bSelected : true) );
  531. oCFilters.m_oAnchor = oSrc;
  532. }
  533. }
  534. return true;
  535. };
  536. function CF_selectObj(obj, bSelected)
  537. {
  538. if (obj)
  539. {
  540. if (bSelected !== false && bSelected !== true)
  541. {
  542. bSelected = !( obj.className.match(greCLS_FILTERSELECTED) );
  543. }
  544. if (bSelected)
  545. {
  546. obj.className += " clsFilterSelected";
  547. addToArray(gSelRows, obj.id);
  548. }
  549. else
  550. {
  551. obj.className = obj.className.replace(greCLS_FILTERSELECTED, "").replace(/^\s+|\s+$/g, "");
  552. var newArray = [];
  553. for (var i = 0; i < gSelRows.length; i++) {
  554. if (gSelRows[i] != obj.id) { newArray[newArray.length] = gSelRows[i]; }
  555. }
  556. gSelRows = newArray;
  557. }
  558. }
  559. };
  560. function getCombinedFilter()
  561. {
  562. var cf = getConfigFrame();
  563. var oCF = null;
  564. if (cf)
  565. {
  566. oCF = cf.cfgGet("combinedFilters");
  567. if (!oCF)
  568. {
  569. var oMQMgr = goApplicationManager.getMiniQueryManager();
  570. var nCF = XMLHelper_FindChildByTagName(oMQMgr.getDoc(), "CombinedFilter", true);
  571. if (nCF)
  572. {
  573. oCF = new CCombinedFilter(nCF);
  574. cf.cfgSet("combinedFilters", oCF);
  575. }
  576. }
  577. }
  578. return oCF;
  579. };