ppwbcustomex_addgen.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  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 Add/Edit pane of the
  9. // Custom Exceptions feature of PowerPlay Studio.
  10. // The functions handle any minor browser differences.
  11. var PPWB_CUSTOM_EXCEPTION_DEFAULT_BACKGROUND = "FFFFFF";
  12. var PPWB_CUSTOM_EXCEPTION_DEFAULT_FOREGROUND = "000000";
  13. var isNSBrowser = navigator.appName.indexOf("Netscape")>=0;
  14. if( navigator.appVersion == "" )
  15. isNSBrowser = false;
  16. var isNSMac = isNSBrowser && navigator.platform.indexOf("Mac") >= 0;
  17. var isIE = false; // Microsoft Internet Explorer
  18. var isNS4 = false; // Netscape 4+
  19. var isW3C = false; // W3C compliant (inc NS6)
  20. var isUnknown = true; // in case something else comes along
  21. if (document.getElementById) {
  22. isW3C = true ; // NS6, MSIE 5, 6 and Opera 6.01 in Opera mode
  23. isUnknown = false;
  24. }
  25. if (document.all) {
  26. isIE = true ; // MSIE (all versions) and Opera 6.01 in MSIE 5 mode
  27. isUnknown = false;
  28. }
  29. if (document.layers) {
  30. isNS4 = true ; // NS 4
  31. isUnknown = false;
  32. }
  33. var colorLookUpTable = new Array(
  34. "000000",
  35. "C0C0C0",
  36. "808080",
  37. "FFFFFF",
  38. "800000",
  39. "FF0000",
  40. "800080",
  41. "FF00FF",
  42. "008000",
  43. "00FF00",
  44. "808000",
  45. "FFFF00",
  46. "000080",
  47. "0000FF",
  48. "008080",
  49. "00FFFF");
  50. function InputKeypress(event)
  51. {
  52. if ("13" == event.keyCode) {
  53. if (isNSBrowser)
  54. event.stopPropagation();
  55. return false;
  56. }
  57. }
  58. function findObj(n, d) {
  59. var p,i,x;
  60. if(!d) d=document;
  61. if((p=n.indexOf("?"))>0&&parent.frames.length) {
  62. d=parent.frames[n.substring(p+1)].document;
  63. n=n.substring(0,p);
  64. }
  65. if(!(x=d[n])&&d.all) x=d.all[n];
  66. for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  67. for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  68. if(!x && document.getElementById) x=document.getElementById(n);
  69. return x;
  70. }
  71. function getHexColorValue(val){
  72. var hexColorCode = String(val.options[val.selectedIndex].value);
  73. if (hexColorCode == ""){
  74. hexColorCode = '000000';
  75. }
  76. return hexColorCode;
  77. }
  78. // Loop through until the color matches an index, then set the selected index
  79. function setSelectedIndex(object, hexColor){
  80. var match = false;
  81. var selectedIndex = 0;
  82. while(!match && selectedIndex < colorLookUpTable.length){
  83. if (hexColor == colorLookUpTable[selectedIndex]){
  84. match = true;
  85. object.selectedIndex = selectedIndex;
  86. }
  87. selectedIndex++;
  88. }
  89. }
  90. function numberChange(control) {
  91. var v = control.value;
  92. var name = control.name;
  93. var strMin = localizedStrMinimum.toLowerCase();
  94. var strMax = localizedStrMaximum.toLowerCase();
  95. name = name.substr(0, name.length-1);
  96. if ( (v.toLowerCase() == strMin && name.toLowerCase() == "from") || (v.toLowerCase() == strMax && name.toLowerCase() == "to") ) {
  97. return;
  98. }
  99. var w = "";
  100. var negative = false;
  101. var len = v.length;
  102. for ( var i = 0; i < len; i++ ) {
  103. if ( ( i==0||i==(len-1) ) && v.charAt(i)=="-" ) {
  104. negative = true;
  105. }
  106. else {
  107. if ( v.charAt(i) != thousandsep )
  108. w = w + v.charAt(i);
  109. }
  110. }
  111. v = w;
  112. var reptchr = "/[^0-9" + decimalpt + "]/";
  113. var pos = v.search(eval(reptchr));
  114. if (pos != -1)
  115. v = v.substring(0,pos);
  116. if ( negative )
  117. control.value = "-" + v;
  118. else
  119. control.value = v;
  120. }
  121. function buildException() {
  122. var def = findObj("Exception_Name").value;
  123. var strMin = localizedStrMinimum.toLowerCase();
  124. var strMax = localizedStrMaximum.toLowerCase();
  125. //Error: no exception name
  126. if (def.length <= 0) {
  127. writeErrorMessage(noNameErr);
  128. return (-1);
  129. }
  130. def += '\t';
  131. var ranges = "";
  132. var validChars = "/[^0-9" + decimalpt + "\-]/";
  133. var pos;
  134. for ( var i=1 ; i < 6 ; i++ ) {
  135. var from = findObj("From" + i).value;
  136. var to = findObj("To" + i).value;
  137. if (from != "" && to != "") {
  138. //minimum
  139. if (from.toLowerCase() != strMin) {
  140. pos = from.search(eval(validChars));
  141. if (pos != -1 || from.indexOf(decimalpt) != from.lastIndexOf(decimalpt)) {
  142. writeErrorMessage(invalidRangeValueErr);
  143. return (-1);
  144. }
  145. pos = from.search(decimalpt);
  146. if (pos > 0)
  147. from = from.substr(0, pos) + "." + from.substr(pos+1, from.length);
  148. ranges += from;
  149. }
  150. ranges += _rseparator;
  151. //maximum
  152. if (to.toLowerCase() != strMax) {
  153. pos = to.search(eval(validChars));
  154. if (pos != -1 || to.indexOf(decimalpt) != to.lastIndexOf(decimalpt)) {
  155. writeErrorMessage(invalidRangeValueErr);
  156. return (-1);
  157. }
  158. pos = to.search(decimalpt);
  159. if (pos > 0)
  160. to = to.substr(0,pos) + "." + to.substr(pos+1, to.length);
  161. ranges += to;
  162. }
  163. ranges += _rseparator;
  164. if (parseFloat(from) > parseFloat(to)) {
  165. writeErrorMessage(invalidRangeErr);
  166. return (-1);
  167. }
  168. var strFont = findObj("FGColor" + i).value;
  169. var strCell = findObj("BGColor" + i).value;
  170. var strFont = getHexColorValue(findObj("FGColor" + i));
  171. var strCell = getHexColorValue(findObj("BGColor" + i));
  172. strFont = strFont.toUpperCase();
  173. ranges += strFont;
  174. ranges += _rseparator;
  175. strCell = strCell.toUpperCase();
  176. ranges += strCell;
  177. ranges += ';';
  178. } else if (from != "" || to != "") {
  179. writeErrorMessage(missingRangeValueErr);
  180. return (-1);
  181. }
  182. }
  183. //Error: no valid ranges
  184. if (ranges.length <= 0) {
  185. writeErrorMessage(noValidRangeErr);
  186. return (-1);
  187. }
  188. //trim off trailing ';'
  189. ranges = ranges.substr(0, ranges.length-1);
  190. def += ranges;
  191. return (def);
  192. }
  193. function isDuplicateName (name, otherEx)
  194. {
  195. //nothing to check!
  196. if (otherEx.length <= 0) {
  197. return false;
  198. }
  199. var tabPos = otherEx.indexOf('\t\t', 0);
  200. if (tabPos > 0) {
  201. otherEx = otherEx.substr(0, tabPos);
  202. }
  203. while (otherEx.charAt(0) == '\t') {
  204. otherEx = otherEx.substr(1);
  205. }
  206. var fwdPtr = 0;
  207. var backPtr = -1;
  208. while (fwdPtr >= 0) {
  209. fwdPtr = otherEx.indexOf('\t', backPtr+1);
  210. if (name.toLowerCase() == otherEx.substr(backPtr+1, fwdPtr-(backPtr+1)).toLowerCase()) {
  211. return true; //duplicate...return TRUE
  212. }
  213. fwdPtr = otherEx.indexOf('\t', fwdPtr+1);
  214. backPtr = fwdPtr;
  215. }
  216. //unique name...return FALSE
  217. return false;
  218. }
  219. function getStartPosition() {
  220. var selectedVal = parent.getSelException()-1;
  221. if (selectedVal < 0) {
  222. return -1;
  223. }
  224. var customX = findObj("EX1", winFX.document).value;
  225. var count = 0;
  226. for (var i = 0; i < selectedVal*2; i++) {
  227. count = customX.indexOf('\t', count+1) ;
  228. }
  229. if (customX.charAt(count) == '\t') {
  230. return count+1;
  231. } else {
  232. return count;
  233. }
  234. }
  235. function getEndPosition(startCount) {
  236. var customX = findObj("EX1", winFX.document).value;
  237. var endCount = customX.indexOf('\t', startCount);
  238. endCount = customX.indexOf('\t', endCount+1);
  239. if (endCount < 0) return customX.length;
  240. return endCount;
  241. }
  242. function saveDefinition() {
  243. if (parent.isXtabStillLoading())
  244. {
  245. setTimeout("saveDefinition()", 50);
  246. return;
  247. }
  248. var beforeX, afterX, currentX;
  249. var customX = findObj("EX1", winFX.document).value;
  250. var end;
  251. var start = getStartPosition();
  252. if (start < 0 || findObj("AddOrEdit").value == 'A') {
  253. //must be a new one!! look for '\t\t'...
  254. var tabPos = customX.indexOf('\t\t', 0);
  255. if (tabPos < 0) {
  256. if (customX.length > 0) {
  257. beforeX = customX + '\t';
  258. } else {
  259. beforeX = "";
  260. }
  261. end = -1;
  262. } else {
  263. if (tabPos > 0)
  264. beforeX = customX.substr(0, tabPos) + '\t';
  265. else
  266. beforeX = "";
  267. end = tabPos;
  268. }
  269. } else {
  270. beforeX = customX.substr(0, start);
  271. end = getEndPosition(start) ;
  272. }
  273. if (end < 0) {
  274. afterX = "";
  275. } else {
  276. afterX = customX.substr(end);
  277. }
  278. // build the exception
  279. currentX = buildException();
  280. if (currentX == -1) {
  281. return;
  282. }
  283. //now, finally, check for duplicate names
  284. var tempBeforeX = beforeX;
  285. if (beforeX.charAt(beforeX.length-1) == '\t') {
  286. tempBeforeX = beforeX.substr(0, beforeX.length-1);
  287. }
  288. otherEx = tempBeforeX + afterX;
  289. if ( isDuplicateName(currentX.substr(0, currentX.indexOf('\t', 0)), otherEx) ) {
  290. writeErrorMessage(duplicateNameErr);
  291. return;
  292. }
  293. findObj("EX1", winFX.document).value = beforeX + currentX + afterX;
  294. var command = findObj("AddOrEdit").value;
  295. if (command == 'A')
  296. selectedException = -1;
  297. else if (command == 'E' && selectedException == 0)
  298. selectedException = -1;
  299. winFX.doit('X' + command + ':' + selectedException);
  300. }
  301. function loadDefinition() {
  302. if ( parent.isXtabStillLoading() ) {
  303. setTimeout("loadDefinition()", 50);
  304. return;
  305. }
  306. parent.setSelException(selectedException);
  307. var currentX = findObj("EX1", winFX.document).value;
  308. var command = findObj("AddOrEdit").value;
  309. var start = getStartPosition();
  310. var rangeCount=0;
  311. if (!(start < 0 || currentX.length == 0 || command == 'A')) {
  312. rangeCount = 1;
  313. if (findObj("ErrorMessage") != null)
  314. var err = findObj("ErrorMessage");
  315. if ((isNS4 && err.document.length > 0) || (!isNS4 && err.innerHTML.length > 1)) {
  316. return;
  317. }
  318. var end = getEndPosition(start);
  319. if (end < 0) {
  320. currentX = currentX.substr(start);
  321. } else {
  322. currentX = currentX.substr(start, end-start);
  323. }
  324. //ok...we've got the exception specification...now, just populate the fields!
  325. count = currentX.indexOf('\t');
  326. var name = currentX.substr(0, count);
  327. findObj("Exception_Name").value = name;
  328. currentX = currentX.substr(++count);
  329. var i=1;
  330. var marker=0;
  331. var rangeCount=1;
  332. while ( (marker = currentX.indexOf(";", marker+1)) > 0 ) {
  333. ++rangeCount;
  334. }
  335. count=0;
  336. // Start looping through and loading all the values
  337. for ( i = 1; i <= rangeCount; i++) {
  338. var minValue, maxValue, fgColorVal, bgColorVal;
  339. var minObj = findObj("From" + i);
  340. var maxObj = findObj("To" + i);
  341. var fontObj = findObj("FGColor" + i);
  342. var cellObj = findObj("BGColor" + i);
  343. //Lower bound
  344. minValue = localizedStrMinimum;
  345. if (currentX.charAt(0) == _rseparator) {
  346. currentX = currentX.substr(1);
  347. } else {
  348. count = currentX.indexOf(_rseparator);
  349. minValue = currentX.substr(0, count);
  350. var pos = minValue.indexOf('.');
  351. if (pos > 0)
  352. minValue = minValue.substr(0, pos) + decimalpt + minValue.substr(pos+1, minValue.length);
  353. currentX = currentX.substr(++count);
  354. }
  355. //Upper bound
  356. maxValue = localizedStrMaximum;
  357. if (currentX.charAt(0) == _rseparator) {
  358. currentX = currentX.substr(1);
  359. } else {
  360. count = currentX.indexOf(_rseparator);
  361. maxValue = currentX.substr(0, count);
  362. var pos = maxValue.indexOf('.');
  363. if (pos > 0)
  364. maxValue = maxValue.substr(0, pos) + decimalpt + maxValue.substr(pos+1, maxValue.length);
  365. currentX = currentX.substr(++count);
  366. }
  367. //Font color
  368. fgColorVal = PPWB_CUSTOM_EXCEPTION_DEFAULT_FOREGROUND;
  369. if (currentX.charAt(0) == _rseparator) {
  370. currentX = currentX.substr(1);
  371. } else {
  372. count = currentX.indexOf(_rseparator);
  373. fgColorVal = currentX.substr(0, count);
  374. currentX = currentX.substr(++count);
  375. }
  376. //BG cell color
  377. bgColorVal = PPWB_CUSTOM_EXCEPTION_DEFAULT_BACKGROUND;
  378. if (currentX.charAt(0) == _rseparator) {
  379. currentX = currentX.substr(1);
  380. } else {
  381. count = currentX.indexOf(_rseparator);
  382. bgColorVal = currentX.substr(0, count);
  383. currentX = currentX.substr(++count);
  384. }
  385. //Skip the next 5 values in the generic UI
  386. if (currentX.indexOf(';') > -1)
  387. currentX = currentX.substr(currentX.indexOf(';') + 1);
  388. count=0;
  389. minObj.value = minValue;
  390. maxObj.value = maxValue;
  391. setSelectedIndex(fontObj, fgColorVal);
  392. setSelectedIndex(cellObj, bgColorVal);
  393. } // end loop for populating fields
  394. }
  395. for (var i = rangeCount + 1; i <= 5; i++) {
  396. setSelectedIndex(findObj("FGColor" + i), PPWB_CUSTOM_EXCEPTION_DEFAULT_FOREGROUND);
  397. setSelectedIndex(findObj("BGColor" + i), PPWB_CUSTOM_EXCEPTION_DEFAULT_BACKGROUND);
  398. }
  399. }
  400. function writeErrorMessage (msg) {
  401. var err = findObj("ErrorMessage");
  402. if (err) {
  403. if (document.getElementById) { //IE 5.5+ , Netscape 6.0+
  404. err.innerHTML = '<table><tr><td valign="middle"><img src="../ppwb/Graphics/error.gif" height=18 width=18 alt=""></td><td class="CustomExceptionError" valign="middle">' + msg + '</td></tr></table><br><br>';
  405. } else if (isNSBrowser) { // Other Netscape browsers
  406. err.visibility = "visible";
  407. err.moveTo(11, document.layers["referenceLayer"].top + document.layers["referenceLayer"].clip.bottom);
  408. err.resizeTo(parent.FE.innerWidth - 25, 50);
  409. err.document.open();
  410. err.document.write('<html><body><table><tr><td><img src="../ppwb/Graphics/error.gif" height=18 width=18 alt=""></td><td class="CustomExceptionError" valign="middle">' + msg + '</td></tr></table></body></html>');
  411. err.document.close();
  412. } else
  413. alert (msg);
  414. }
  415. }
  416. function doCancel() {
  417. var command = findObj("AddOrEdit").value;
  418. if (command == 'A')
  419. winFX.doit('XA:' + parent.getSelException());
  420. else
  421. winFX.doit('XE:' + parent.getSelException());
  422. }