calcNumericDouble.xts 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. Licensed Materials - Property of IBM
  4. BI and PM: qs
  5. (C) Copyright IBM Corp. 2001, 2017
  6. US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. -->
  8. <!--
  9. Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
  10. Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
  11. -->
  12. <!--
  13. Used for difference, division, percent difference and percentage
  14. -->
  15. <xts:morphlet resolverBase="prompting" version="1.0" xmlns:xts="http://developer.cognos.com/schemas/xts/" messageBase="messages/QSRVUITextPL.xml,messages/portal.xml,messages/portalRL.xml" requiredCapability="canUseQueryStudio">
  16. <xts:block id="browserDetection" path="qs/browserDetection.xslt" mode="interpret" type="exec" processor="XSLT" contentId="browserDetection" partId="1"/>
  17. <xts:block id="page" type="exec" mode="output" processor="XSLT" mimeType="text/html" dependency="browserDetection">
  18. <!-- get the debug logic sheet -->
  19. <xts:logicsheet path="logicsheets/debuglogic.xslt"/>
  20. <!-- get the new theme stuff -->
  21. <!-- apply the following logicsheets in order -->
  22. <xts:logicsheet path="qs/logicsheets/calc_theme.xsl"/>
  23. <xts:logicsheet path="logicsheets/portal.xsl"/>
  24. <xts:logicsheet path="qs/logicsheets/dialogs.xsl"/>
  25. <xts:logicsheet path="logicsheets/presentation/dialog/framework.xsl"/>
  26. <xts:logicsheet path="logicsheets/presentation/layout.xsl"/>
  27. <xts:logicsheet path="logicsheets/presentation/dialog/presentation.xsl"/>
  28. <xts:logicsheet path="logicsheets/presentation/controls/framework.xsl"/>
  29. <xts:logicsheet path="logicsheets/presentation/controls/presentation.xsl"/>
  30. <xts:logicsheet path="logicsheets/cm-logic.xsl"/>
  31. <!-- apply the form logic -->
  32. <xts:logicsheet path="logicsheets/formlogic.xslt"/>
  33. <xsl:stylesheet version="1.0"
  34. xmlns:clcdlg="test_calculationDlg"
  35. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  36. xmlns:xts="http://developer.cognos.com/schemas/xts/"
  37. xmlns:lyt="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/layout/"
  38. xmlns:pf="http://developer.cognos.com/schemas/xts/pf"
  39. xmlns:dp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/presentation/"
  40. xmlns:df="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/dialog/framework/"
  41. xmlns:cp="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/presentation/"
  42. xmlns:cf="http://developer.cognos.com/schemas/xts/logicsheets/xslt/presentation/controls/framework/"
  43. xmlns:dbg="http://developer.cognos.com/schemas/xts/logicsheets/xslt/debug/"
  44. xmlns:qsdlg="http://developer.cognos.com/schemas/xts/logicsheets/xslt/qs/dialog/"
  45. xmlns:xtsext="xalan://com.cognos.xts.ext.XTSExt"
  46. exclude-result-prefixes="clcdlg xsl xts lyt pf dp df cp cf dbg qsdlg xtsext">
  47. <xsl:output method="html" version="1.0" encoding="UTF-8" indent="no"/>
  48. <!-- Default variables (like skin) and prompt variables -->
  49. <qsdlg:variables/>
  50. <qsdlg:promptVariables/>
  51. <!-- Prompt Control XSL include -->
  52. <xsl:include href="p_include.xsl"/>
  53. <!-- add any theme variables -->
  54. <df:variables/>
  55. <pf:variables/>
  56. <!-- start the output -->
  57. <xsl:template match="/root">
  58. <dp:page>
  59. <dp:script>
  60. <xsl:call-template name="getPromptCommonIncludes"/>
  61. <xsl:call-template name="gettextBoxIncludes">
  62. <xsl:with-param name="promptLocale" select="$promptLocale"/>
  63. <xsl:with-param name="promptContentLocale" select="$contentLocale"/>
  64. </xsl:call-template>
  65. <link href="{$qsdlgskin}/qs/QSRVDialog.css" type="text/css" rel="stylesheet"/>
  66. <script type="text/javascript">
  67. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/qs/layout.js</xsl:attribute>
  68. <xsl:text/>//<xsl:text/>
  69. </script>
  70. <script type="text/javascript">
  71. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/rv/cvConstants.js</xsl:attribute>
  72. <xsl:text/>//<xsl:text/>
  73. </script>
  74. <script type="text/javascript">
  75. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/rv/common.js</xsl:attribute><xsl:text/>//<xsl:text/>
  76. </script>
  77. <script type="text/javascript">
  78. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/rv/cvui.js</xsl:attribute>
  79. <xsl:text/>//<xsl:text/>
  80. </script>
  81. <script type="text/javascript">
  82. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/common/framework/notification/CObserver.js</xsl:attribute>
  83. <xsl:text/>//<xsl:text/>
  84. </script>
  85. <script type="text/javascript">
  86. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/qs/classes/CDialogManager.js</xsl:attribute>
  87. <xsl:text/>//<xsl:text/>
  88. </script>
  89. <script type="text/javascript">
  90. <xsl:attribute name="src"><xsl:value-of select="$webRoot"/>/qs/classes/CWindowManager.js</xsl:attribute>
  91. <xsl:text/>//<xsl:text/>
  92. </script>
  93. <script type="text/javascript">&lt;!--
  94. var goDialogManager = new CDialogManager();
  95. <clcdlg:jvs/>
  96. var expression = new Array();
  97. var calcParentIds = new Array();
  98. var calcParentLabels = new Array();
  99. var calculatedExpression = new Array();
  100. var detailAggs = new Array();
  101. var cf = getConfigFrame();
  102. var calcType = cf.dlgGlobalGetParm('xxCalcType');
  103. var reZero = /^(0|0\.0+)$/
  104. var substVarValue = null;
  105. function execute() {
  106. var oMQMgr = goDialogManager.getMiniQueryManager();
  107. var calc = document.f.calcList.options[document.f.calcList.selectedIndex].value;
  108. var before_col_id = cf.dlgGlobalGetParm('xxInsBeforeColid');
  109. var regularAgg = cf.dlgGlobalGetParm('xxRegularAgg');
  110. var detailAgg = cf.dlgGlobalGetParm('xxDetailAgg');
  111. // This is needed for 433583 - A measure divided by a count of a non-measure throws an error
  112. if (cf.dlgGlobalSize('xxSummExpr') > 1 &amp;&amp; (cf.dlgGlobalGetParmAt('xxSummExpr', 0)[0] != cf.dlgGlobalGetParmAt('xxSummExpr', 1)[0]) &amp;&amp; (cf.dlgGlobalGetParmAt('xxSummExpr', 0)[0] == "count" || cf.dlgGlobalGetParmAt('xxSummExpr', 1)[0] == "count"))
  113. detailAgg = "calculated";
  114. var calcExpr = "";
  115. var calcFormat = "none";
  116. var calcOp = "none";
  117. var textBoxnumberDecs = -1;
  118. var cType = -1;
  119. var cUsage = -1;
  120. var first = "", second = "";
  121. var firstExpr = false, secondExpr = false;
  122. if (document.f.first[0].checked)
  123. {
  124. firstExpr = true;
  125. if (cf.dlgGlobalSize('xxColInfo') == 1)
  126. {
  127. if (document.getElementById("textBoxNumeric").style.display != "none")
  128. {
  129. if (textBoxnumberValue.isValid())
  130. {
  131. second = textBoxnumberValue.sGetValue();
  132. textBoxnumberDecs = textBoxnumberValue.getDecimalSize();
  133. }
  134. else
  135. return;
  136. }
  137. else if (document.getElementById("textBoxString").style.display != "none")
  138. {
  139. second = substVarValue;
  140. }
  141. second = second.replace("\.", oMQMgr.getDecimalSeparator());
  142. }
  143. else
  144. secondExpr = true;
  145. if (detailAggs[0] == "total")
  146. regularAgg = "total";
  147. }
  148. else
  149. {
  150. secondExpr = true;
  151. if (cf.dlgGlobalSize('xxColInfo') == 1)
  152. {
  153. if (document.getElementById("textBoxNumeric").style.display != "none")
  154. {
  155. if (textBoxnumberValue.isValid())
  156. {
  157. first = textBoxnumberValue.sGetValue();
  158. textBoxnumberDecs = textBoxnumberValue.getDecimalSize();
  159. }
  160. else if ((reZero.test(textBoxnumberValue.m_oForm.value))&amp;&amp;(calc == '/'))
  161. {
  162. first = 0;
  163. }
  164. else
  165. return;
  166. }
  167. else if (document.getElementById("textBoxString").style.display != "none")
  168. {
  169. first = substVarValue;
  170. }
  171. first = first.replace("\.", oMQMgr.getDecimalSeparator());
  172. }
  173. else
  174. firstExpr = true;
  175. if (detailAggs[1] == "total")
  176. regularAgg = "total";
  177. }
  178. switch (calc) {
  179. case "-":
  180. if (document.f.first[0].checked)
  181. {
  182. if ((!secondExpr) &amp;&amp; second == "")
  183. second = 0;
  184. }
  185. else
  186. {
  187. if ((!firstExpr) &amp;&amp; first == "")
  188. first = 0;
  189. }
  190. calcExpr = "(^^^0^^^) - (^^^1^^^)";
  191. calcOp = "difference";
  192. break;
  193. case "%":
  194. calcFormat = "percent";
  195. if (cf.dlgGlobalSize('xxColInfo') == 1)
  196. regularAgg = "none";
  197. else
  198. regularAgg = "calculated";
  199. //fall through to division case
  200. case "/":
  201. detailAgg = "calculated";
  202. if (document.f.first[0].checked)
  203. {
  204. if ((!secondExpr) &amp;&amp; (second == "" || second == 1))
  205. calcExpr = "^^^0^^^";
  206. }
  207. else
  208. {
  209. if ((!firstExpr) &amp;&amp; first == "")
  210. first = 0;
  211. }
  212. if (calcExpr == "")
  213. calcExpr = "(^^^0^^^) / (^^^1^^^)";
  214. calcOp = "division";
  215. break;
  216. case "% difference":
  217. if (document.f.first[0].checked)
  218. {
  219. if ((!secondExpr) &amp;&amp; (second == ""))
  220. second = 0;
  221. }
  222. else
  223. {
  224. if ((!firstExpr) &amp;&amp; (first == "" || first == 0))
  225. calcExpr = "0";
  226. }
  227. if (calcExpr == "")
  228. calcExpr = "((^^^0^^^) - (^^^1^^^)) / (abs(^^^1^^^))";
  229. calcFormat = "percent";
  230. calcOp = "percentDifference";
  231. // Ensure % difference defaults to no summary aggregate
  232. // This is to remain consistent with regular percent behaviour (set below)
  233. regularAgg = "none";
  234. break;
  235. default:
  236. break;
  237. }
  238. if (calc == "%")
  239. calcOp = "percent";
  240. if (calcExpr != "")
  241. {
  242. var calculationExpression = calcExpr;
  243. var summarizationExpression = calcExpr;
  244. var index = 0;
  245. if (document.f.first[1].checked)
  246. index = 1;
  247. if (firstExpr)
  248. {
  249. calculationExpression = stringReplace (calculationExpression, "\\^\\^\\^" + 0 + "\\^\\^\\^", expression[index]);
  250. summarizationExpression = stringReplace (summarizationExpression, "\\^\\^\\^" + 0 + "\\^\\^\\^", calculatedExpression[index]);
  251. }
  252. else
  253. {
  254. calculationExpression = stringReplace (calculationExpression, "\\^\\^\\^" + 0 + "\\^\\^\\^", first);
  255. summarizationExpression = stringReplace (summarizationExpression, "\\^\\^\\^" + 0 + "\\^\\^\\^", first);
  256. }
  257. if (secondExpr)
  258. {
  259. if (index == 0)
  260. index += 1;
  261. else
  262. index -= 1;
  263. calculationExpression = stringReplace (calculationExpression, "\\^\\^\\^" + 1 + "\\^\\^\\^", expression[index]);
  264. summarizationExpression = stringReplace (summarizationExpression, "\\^\\^\\^" + 1 + "\\^\\^\\^", calculatedExpression[index]);
  265. }
  266. else
  267. {
  268. calculationExpression = stringReplace (calculationExpression, "\\^\\^\\^" + 1 + "\\^\\^\\^", second);
  269. summarizationExpression = stringReplace (summarizationExpression, "\\^\\^\\^" + 1 + "\\^\\^\\^", second);
  270. }
  271. // alert("regAgg is: " + regularAgg + " / detailAgg is: " + detailAgg)
  272. // alert(calculationExpression + "\n--\n" + summarizationExpression);
  273. var calcName = getCalcName();
  274. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  275. {
  276. if (i == 0)
  277. {
  278. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  279. var firstCol = label[0];
  280. }
  281. else if (i == 1)
  282. {
  283. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  284. var secondCol = label[0];
  285. break;
  286. }
  287. }
  288. var queryId1 = -1;
  289. var queryId2 = -1;
  290. for (var i = 0; i &lt; calcParentLabels.length; i++)
  291. {
  292. if (calcParentLabels[i] == firstCol)
  293. queryId1 = i;
  294. else if (firstCol.charAt(0) == "(" &amp;&amp; firstCol.charAt(firstCol.length - 1) == ")")
  295. {
  296. if (calcParentLabels[i] == firstCol.substring(1, firstCol.length - 1))
  297. queryId1 = i;
  298. }
  299. if (cf.dlgGlobalSize('xxColInfo') &gt; 1)
  300. {
  301. if (calcParentLabels[i] == secondCol)
  302. queryId2 = i;
  303. else if (secondCol.charAt(0) == "(" &amp;&amp; secondCol.charAt(secondCol.length - 1) == ")")
  304. {
  305. if (calcParentLabels[i] == secondCol.substring(1, secondCol.length - 1))
  306. queryId2 = i;
  307. }
  308. }
  309. }
  310. if (queryId1 &lt; 0)
  311. return;
  312. if (cf.dlgGlobalSize('xxColInfo') &gt; 1 &amp;&amp; queryId2 &lt; 0)
  313. return;
  314. //TODO - CLEANUP can the following code be replaced by below?
  315. //queryId1 = oMQMgr.isMeasure(calcParentIds[queryId1]);
  316. //queryId2 = oMQMgr.isMeasure(calcParentIds[queryId2]);
  317. for (var j = 0; j &lt; oMQMgr.getAllColumns().length; j++)
  318. {
  319. if (calcParentIds[queryId1] == oMQMgr.getColumnId(j))
  320. {
  321. queryId1 = oMQMgr.isMeasure(j);
  322. }
  323. if (cf.dlgGlobalSize('xxColInfo') &gt; 1)
  324. {
  325. if (calcParentIds[queryId2] == oMQMgr.getColumnId(j))
  326. {
  327. queryId2 = oMQMgr.isMeasure(j);
  328. }
  329. }
  330. }
  331. if (queryId1 &lt; 0)
  332. return;
  333. if (cf.dlgGlobalSize('xxColInfo') &gt; 1 &amp;&amp; queryId2 &lt; 0)
  334. return;
  335. else if ((queryId1 == false)&amp;&amp;((queryId2 == false)||(queryId2 == -1)))
  336. {
  337. cType = 21;
  338. cUsage = 2;
  339. detailAgg = "none";
  340. regularAgg = "none";
  341. }
  342. getConfigFrame().addCalcColumn(before_col_id, calculationExpression, summarizationExpression, calcName, "none", calcOp, "none", textBoxnumberDecs, cType, cUsage, regularAgg, -1, detailAgg, calcParentIds);
  343. }
  344. }
  345. function generateName (withQuotes) {
  346. var calcName = "";
  347. var ii;
  348. var calc = document.f.calcList.options[document.f.calcList.selectedIndex].value;
  349. var first = 0;
  350. var second = 0;
  351. if (document.f.first[0].checked)
  352. {
  353. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  354. {
  355. if (i == 0)
  356. {
  357. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  358. first = label[0];
  359. }
  360. if (cf.dlgGlobalSize('xxColInfo') == 1)
  361. {
  362. if (document.getElementById("textBoxNumeric").style.display != "none")
  363. var textBoxValue = textBoxnumberValue;
  364. else
  365. var textBoxValue = textBoxstringValue;
  366. if (textBoxValue.isValid())
  367. {
  368. if (textBoxValue.m_oForm.value == "")
  369. {
  370. if (calc == "/" || calc == "%")
  371. second = 1;
  372. else
  373. second = 0;
  374. }
  375. else
  376. second = textBoxValue.sGetFormatValue();
  377. }
  378. else
  379. second = textBoxValue.m_oForm.value;
  380. }
  381. else if (i == 1)
  382. {
  383. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  384. second = label[0];
  385. }
  386. }
  387. }
  388. else
  389. {
  390. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  391. {
  392. if (i == 0)
  393. {
  394. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  395. second = label[0];
  396. }
  397. if (cf.dlgGlobalSize('xxColInfo') == 1)
  398. {
  399. if (document.getElementById("textBoxNumeric").style.display != "none")
  400. var textBoxValue = textBoxnumberValue;
  401. else
  402. var textBoxValue = textBoxstringValue;
  403. if (textBoxValue.isValid())
  404. {
  405. if (textBoxValue.m_oForm.value == "")
  406. {
  407. if (calc == "% difference")
  408. first = 1;
  409. }
  410. else
  411. first = textBoxValue.sGetFormatValue();
  412. }
  413. else
  414. first = textBoxValue.m_oForm.value;
  415. }
  416. else if (i == 1)
  417. {
  418. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  419. first = label[0];
  420. }
  421. }
  422. }
  423. if (calc == "-")
  424. calcName = "<xts:string id="CALCULATION_SUBTRACT_EQUATION" encode="javascript"/>";
  425. else if (calc == "/")
  426. calcName = "<xts:string id="CALCULATION_DIVIDE_EQUATION" encode="javascript"/>";
  427. else if (document.f.calcList.options[document.f.calcList.selectedIndex].value == "% difference") {
  428. if (withQuotes)
  429. calcName = "<xts:string id="CALCULATION_PERCENT_DIFF_EQUATION" encode="javascript"/>";
  430. else
  431. calcName = "<xts:string id="CALCULATION_PERCENT_DIFF_SIMPLE" encode="javascript"/>";
  432. } else {
  433. if (withQuotes)
  434. calcName = "<xts:string id="CALCULATION_PERCENTAGE_EQUATION" encode="javascript"/>";
  435. else
  436. calcName = "<xts:string id="CALCULATION_PERCENTAGE_SIMPLE" encode="javascript"/>";
  437. }
  438. calcName = stringReplace (calcName, "\\^0", first);
  439. calcName = stringReplace (calcName, "\\^1", second);
  440. return calcName;
  441. }
  442. function init()
  443. {
  444. attachMouseEvents();
  445. for (var i = 0; i &lt; cf.dlgGlobalSize('xxCalcParentIds'); i++)
  446. {
  447. var label = cf.dlgGlobalGetParmAt('xxCalcParentIds', i);
  448. calcParentIds[i] = label[0];
  449. calcParentLabels[i] = label[1];
  450. }
  451. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  452. {
  453. var expr = cf.dlgGlobalGetParmAt('xxColInfo', i);
  454. expression[i] = expr[1];
  455. }
  456. for (var i = 0; i &lt; cf.dlgGlobalSize('xxSummExpr'); i++)
  457. {
  458. var expr = cf.dlgGlobalGetParmAt('xxSummExpr', i);
  459. detailAggs[i] = expr[0];
  460. calculatedExpression[i] = expr[1];
  461. }
  462. var validCalcs = new Array();
  463. for (var i = 0; i &lt; cf.dlgGlobalSize('xxValidCalcItem'); i++)
  464. validCalcs[validCalcs.length] = cf.dlgGlobalGetParmAt('xxValidCalcItem', i);
  465. if (cf.dlgGlobalGetParm('xxDialogType') == 'CALCULATION_DIFFERENCE' || cf.dlgGlobalGetParm('xxDialogType') == 'CALCULATION_DIVISION')
  466. populateCalculationList(calcType, validCalcs, "arithmetic");
  467. else
  468. populateCalculationList(calcType, validCalcs, "percentage");
  469. // select calculation
  470. document.f.calcList.selectedIndex = cf.dlgGlobalGetParm('xxCalcTypeIdx');
  471. document.f.calcNumberList.selectedIndex = cf.dlgGlobalGetParm('xxCalcSubTypeIdx');
  472. loadHint ();
  473. load ();
  474. setGlobals(calcType, false);
  475. addInsert();
  476. cf.cfgSet("CALCULATION_REFRESH", true);
  477. if (cf.dlgGlobalSize('xxColInfo') == 1)
  478. {
  479. <xsl:choose>
  480. <xsl:when test="/root/browserInfo/isNS6='true'">
  481. textBoxnumberValue.m_oForm.addEventListener("keydown", redrawHint, true);
  482. </xsl:when>
  483. <xsl:otherwise>
  484. textBoxnumberValue.m_oForm.attachEvent("onkeydown", redrawHint);
  485. </xsl:otherwise>
  486. </xsl:choose>
  487. textBoxnumberValue.m_oForm.focus();
  488. }
  489. <xsl:if test="/root/env/param[@name='xxSubstVar']='true'">
  490. <clcdlg:subst_var numeric="true"/>
  491. <xsl:choose>
  492. <xsl:when test="/root/browserInfo/isNS6='true'">
  493. textBoxstringValue.m_oForm.addEventListener("change", redrawHint, true);
  494. </xsl:when>
  495. <xsl:otherwise>
  496. textBoxstringValue.m_oForm.attachEvent("onchange", redrawHint);
  497. </xsl:otherwise>
  498. </xsl:choose>
  499. //hide the second input field
  500. document.getElementById("textBoxString").style.display = "none";
  501. </xsl:if>
  502. }
  503. function redrawHint() {
  504. setTimeout(loadHint, 10);
  505. }
  506. function setTextBoxFocus() {
  507. // no textboxes when more than 1 column is selected.
  508. if (cf.dlgGlobalSize('xxColInfo') == 1)
  509. document.f._textEditBoxnumberValue.focus();
  510. }
  511. function load() {
  512. // populate calculation word textarea
  513. var calc = document.f.calcList.options[document.f.calcList.selectedIndex].value;
  514. var calcWord = "";
  515. switch (calc)
  516. {
  517. case "-":
  518. calcWord = "<xts:string id="CALCULATION_SUBTRACT_EQUATION" encode="javascript"/>";
  519. break;
  520. case "/":
  521. calcWord = "<xts:string id="CALCULATION_DIVIDE_EQUATION" encode="javascript"/>";
  522. break;
  523. case "% difference":
  524. calcWord = "<xts:string id="CALCULATION_PERCENT_DIFFERENCE_WORD" encode="javascript"/>";
  525. break;
  526. case "%":
  527. calcWord = "<xts:string id="CALCULATION_PERCENTAGE_WORD" encode="javascript"/>";
  528. break;
  529. }
  530. var calcWord2 = calcWord;
  531. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  532. {
  533. if (i == 0)
  534. {
  535. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  536. var first = label[0];
  537. break;
  538. }
  539. }
  540. if (cf.dlgGlobalSize('xxColInfo') == 1)
  541. var second = "<xts:string id="CALCULATION_NUMBER_LABEL" encode="javascript"/>";
  542. else
  543. {
  544. for (var i = 0; i &lt; cf.dlgGlobalSize('xxColInfo'); i++)
  545. {
  546. if (i == 1)
  547. {
  548. var label = cf.dlgGlobalGetParmAt('xxColInfo', i);
  549. var second = label[0];
  550. break;
  551. }
  552. }
  553. }
  554. calcWord = stringReplace (calcWord, "\\^0", first);
  555. calcWord = stringReplace (calcWord, "\\^1", second);
  556. calcWord2 = stringReplace (calcWord2, "\\^1", first);
  557. calcWord2 = stringReplace (calcWord2, "\\^0", second);
  558. // populate calcWord
  559. var calcWordElt = document.getElementById("calcWord");
  560. while (calcWordElt.hasChildNodes())
  561. calcWordElt.removeChild(calcWordElt.firstChild);
  562. calcWordElt.appendChild(document.createTextNode(calcWord));
  563. var calcWordElt2 = document.getElementById("calcWord2");
  564. while (calcWordElt2.hasChildNodes())
  565. calcWordElt2.removeChild(calcWordElt2.firstChild);
  566. calcWordElt2.appendChild(document.createTextNode(calcWord2));
  567. }
  568. //--&gt;</script>
  569. </dp:script>
  570. <form style="margin:0px" name="f" method="POST" onsubmit="execute();return false;">
  571. <table border="0" cellspacing="0" cellpadding="0" height="100%" width="100%">
  572. <tr>
  573. <td width="100%" height="0%">
  574. <!-- dialog header -->
  575. <clcdlg:basic_header/>
  576. </td>
  577. </tr>
  578. <tr>
  579. <td width="100%" height="100%" valign="top">
  580. <lyt:layout style="2" border="no">
  581. <lyt:section>
  582. <clcdlg:calculationsType/>
  583. <clcdlg:calculations/>
  584. <table width="100%" border="0" cellpadding="0" cellspacing="0">
  585. <tr>
  586. <td class="formLabel">
  587. <xts:string id="CALCULATION_LABEL_ORDER"/>
  588. </td>
  589. </tr>
  590. <tr>
  591. <td>
  592. <table>
  593. <tr>
  594. <td nowrap="nowrap" valign="middle">
  595. <input type="radio" name="first" selected="selected" value="total" onClick="javascript:redrawHint();" checked="true"/>
  596. </td>
  597. <td valign="middle" id="calcWord" class="formText" style="width:240px;"/>
  598. </tr>
  599. </table>
  600. </td>
  601. </tr>
  602. <tr>
  603. <td>
  604. <table>
  605. <tr>
  606. <td nowrap="nowrap" valign="middle">
  607. <input type="radio" name="first" value="total" onClick="javascript:redrawHint();"/>
  608. </td>
  609. <td valign="middle" id="calcWord2" class="formText" style="width:240px;"/>
  610. </tr>
  611. </table>
  612. </td>
  613. </tr>
  614. <xsl:if test="/root/env/param[@name='xxColCount']=1">
  615. <tr>
  616. <td>
  617. <table>
  618. <tr>
  619. <td class="formLabel" nowrap="nowrap" valign="middle">
  620. <xsl:choose>
  621. <xsl:when test="/root/env/param[@name='xxSubstVar']='true'">
  622. <xts:string id="CALCULATION_VALUE"/>
  623. </xsl:when>
  624. <xsl:otherwise>
  625. <xts:string id="CALCULATION_NUMBER"/>
  626. </xsl:otherwise>
  627. </xsl:choose>
  628. </td>
  629. <td id="textBoxNumeric" valign="bottom">
  630. <xsl:variable name="promptAllowZero">
  631. <xsl:choose>
  632. <xsl:when test="/root/env/param[@name='xxDialogType'] = 'CALCULATION_DIFFERENCE'">true</xsl:when>
  633. <xsl:otherwise>false</xsl:otherwise>
  634. </xsl:choose>
  635. </xsl:variable>
  636. <xsl:call-template name="getTextBox">
  637. <xsl:with-param name="promptLocale" select="$promptLocale"/>
  638. <xsl:with-param name="promptFormName" select="$promptFormName"/>
  639. <xsl:with-param name="promptRequired" select="'false'"/>
  640. <xsl:with-param name="promptId" select="'numberValue'"/>
  641. <xsl:with-param name="promptHideText" select="'false'"/>
  642. <xsl:with-param name="promptMultiLine" select="'false'"/>
  643. <xsl:with-param name="promptParameter" select="'topParam'"/>
  644. <xsl:with-param name="promptDataType" select="'number'"/>
  645. <xsl:with-param name="promptMaxLength" select="'15'"/>
  646. <xsl:with-param name="promptAllowZero" select="$promptAllowZero"/>
  647. </xsl:call-template>
  648. </td>
  649. <xsl:if test="/root/env/param[@name='xxSubstVar']='true'">
  650. <td id="textBoxString" valign="bottom">
  651. <xsl:call-template name="getTextBox">
  652. <xsl:with-param name="promptLocale" select="$promptLocale"/>
  653. <xsl:with-param name="promptFormName" select="$promptFormName"/>
  654. <xsl:with-param name="promptRequired" select="'false'"/>
  655. <xsl:with-param name="promptId" select="'stringValue'"/>
  656. <xsl:with-param name="promptHideText" select="'false'"/>
  657. <xsl:with-param name="promptMultiLine" select="'false'"/>
  658. <xsl:with-param name="promptParameter" select="'topParam2'"/>
  659. <xsl:with-param name="promptReadOnly" select="'true'"/>
  660. </xsl:call-template>
  661. </td>
  662. <td id="buttonContainer"/>
  663. </xsl:if>
  664. </tr>
  665. </table>
  666. </td>
  667. </tr>
  668. </xsl:if>
  669. </table>
  670. </lyt:section>
  671. <lyt:section>
  672. <clcdlg:calc_hint/>
  673. </lyt:section>
  674. <lyt:section/>
  675. </lyt:layout>
  676. </td>
  677. </tr>
  678. <tr>
  679. <td width="100%" height="0%">
  680. <!-- Use default buttons [ OK = execute() and CANCEL = hideDialogFrame() ] -->
  681. <clcdlg:buttons/>
  682. </td>
  683. </tr>
  684. <!-- <dbg:dumpxml select="/"/> -->
  685. </table>
  686. </form>
  687. </dp:page>
  688. </xsl:template>
  689. </xsl:stylesheet>
  690. </xts:block>
  691. </xts:morphlet>