promptengine_prompts.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086
  1. /* Copyright (c) Business Objects 2006. All rights reserved. */
  2. //////////////////////////////
  3. // FOR DEBUGGING ONLY
  4. var debug = false;
  5. function dumpFormFields(formName)
  6. {
  7. theForm = document.forms[formName];
  8. for ( idx = 0; idx < theForm.elements.length; ++idx )
  9. alert ( theForm.elements[idx].name + " - " + theForm.elements[idx].value );
  10. }
  11. //////////////////////////////
  12. // GLOBAL VAR
  13. var isJava = false; // do encodeURIComponent for Java only
  14. var isNetscape = navigator.appName.indexOf("Netscape") != -1;
  15. var LEFT_ARROW_KEY = 37;
  16. var RIGHT_ARROW_KEY = 39;
  17. var ENTER_KEY = 13;
  18. var DateTimeFormatSetting = {
  19. "datePattern":"Y-M-D",
  20. "isTwoDigitMonth":true,
  21. "isTwoDigitDay":true,
  22. "dateRegex":null,
  23. "dateTimeRegex":null
  24. };
  25. ///////////////////////////////
  26. // functions for DateTimeFormatSetting
  27. function promptengine_getDatePattern()
  28. {
  29. return DateTimeFormatSetting.datePattern;
  30. }
  31. function promptengine_setDatePattern(pattern)
  32. {
  33. DateTimeFormatSetting.datePattern = pattern;
  34. }
  35. function promptengine_getIsTwoDigitMonth()
  36. {
  37. return DateTimeFormatSetting.isTwoDigitMonth;
  38. }
  39. function promptengine_setIsTwoDigitMonth(isTwoDigitMonth)
  40. {
  41. DateTimeFormatSetting.isTwoDigitMonth = isTwoDigitMonth;
  42. }
  43. function promptengine_getIsTwoDigitDay()
  44. {
  45. return DateTimeFormatSetting.isTwoDigitDay;
  46. }
  47. function promptengine_setIsTwoDigitDay(isTwoDigitDay)
  48. {
  49. DateTimeFormatSetting.isTwoDigitDay = isTwoDigitDay;
  50. }
  51. function promptengine_getDateRegex()
  52. {
  53. return DateTimeFormatSetting.dateRegex;
  54. }
  55. function promptengine_setDateRegex(dateRegex)
  56. {
  57. DateTimeFormatSetting.dateRegex = dateRegex;
  58. }
  59. function promptengine_getDateTimeRegex()
  60. {
  61. return DateTimeFormatSetting.dateTineRegex;
  62. }
  63. function promptengine_setDateTimeRegex(dateTineRegex)
  64. {
  65. DateTimeFormatSetting.dateTineRegex = dateTineRegex;
  66. }
  67. ///////////////////////////////
  68. // properly encode prompt values
  69. function promptengine_encodePrompt (prompt)
  70. {
  71. if (isJava)
  72. {
  73. return encodeURIComponent(prompt);
  74. }
  75. else
  76. {
  77. return promptengine_urlEncode(prompt);
  78. }
  79. }
  80. ////////////////////////////////
  81. // add number, currency, string from dropdown/textbox to list box
  82. // where multiple prompt values are supported
  83. function promptengine_addDiscreteValue (
  84. form,
  85. type ,
  86. promptID)
  87. {
  88. var widget, obj;
  89. widget = obj = form[promptID + "DiscreteValue"];
  90. if ( obj.type && obj.type.toLowerCase() != "text" &&
  91. obj.type.toLowerCase() != "hidden" && obj.type.toLowerCase() != "password")
  92. {
  93. //select box not a textbox
  94. obj = obj.options[obj.selectedIndex];
  95. }
  96. if ( ! promptengine_checkValue ( obj.value, type ) )
  97. {
  98. if (widget.focus && widget.type.toLowerCase() != "hidden")
  99. widget.focus();
  100. return false;
  101. }
  102. promptValue = obj.value;
  103. displayString = ( obj.text ) ? obj.text : obj.value;
  104. promptEntry = new Option(displayString,promptValue,false,false);
  105. theList = form[promptID + "ListBox"];
  106. theList.options[theList.length] = promptEntry;
  107. if (widget.focus && widget.type.toLowerCase() != "hidden" && !widget.disabled)
  108. widget.focus ();
  109. if ( widget.select )
  110. widget.select ();
  111. if ( widget.type.toLowerCase != "text" &&
  112. widget.type.toLowerCase != "hidden" &&
  113. widget.type.toLowerCase != "password")
  114. if ( widget.selectedIndex < widget.length - 1 )
  115. widget.selectedIndex = widget.selectedIndex + 1; //... or move to next selection in listbox
  116. }
  117. function promptengine_deselectAllItems(listbox)
  118. {
  119. for (var i = 0; i < listbox.length; i++)
  120. listbox.options[i].selected = false;
  121. }
  122. function promptengine_addAvailableItem(
  123. availableList,
  124. index,
  125. selectedList)
  126. {
  127. for (var i = 0; i < selectedList.length; i++)
  128. {
  129. if (selectedList.options[i].value == availableList.options[index].value &&
  130. selectedList.options[i].text == availableList.options[index].text)
  131. {
  132. selectedList.options[i].selected = true;
  133. return false;
  134. }
  135. }
  136. var promptEntry = new Option(availableList.options[index].text, availableList.options[index].value, false, true);
  137. selectedList.options[selectedList.length] = promptEntry;
  138. return true;
  139. }
  140. ////////////////////////////////
  141. // add number, currency, string from available list box to selected list box
  142. // where multiple prompt values are supported
  143. function promptengine_addValueFromPickList(
  144. form,
  145. type,
  146. promptID)
  147. {
  148. var AvailableList, SelectedList;
  149. AvailableList = form[promptID + "AvailableList"];
  150. SelectedList = form[promptID + "ListBox"];
  151. promptengine_deselectAllItems(SelectedList);
  152. var changed = false;
  153. var lastSelected = -1;
  154. for (var i = 0; i < AvailableList.length; i++)
  155. {
  156. if (AvailableList.options[i].selected)
  157. {
  158. var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
  159. if (added == true)
  160. changed = true;
  161. lastSelected = i;
  162. }
  163. }
  164. // set focus to the next item on the available list
  165. if (lastSelected++ >= 0 && lastSelected < AvailableList.length)
  166. {
  167. promptengine_deselectAllItems(AvailableList);
  168. AvailableList.options[lastSelected].selected = true;
  169. }
  170. return changed;
  171. }
  172. ////////////////////////////////
  173. // add all number, currency, string from available list box to selected list box
  174. // where multiple prompt values are supported
  175. function promptengine_addAllValues(
  176. form,
  177. type,
  178. promptID)
  179. {
  180. var AvailableList, SelectedList;
  181. AvailableList = form[promptID + "AvailableList"];
  182. SelectedList = form[promptID + "ListBox"];
  183. promptengine_deselectAllItems(SelectedList);
  184. var changed = false;
  185. for (var i = 0; i < AvailableList.length; i++)
  186. {
  187. var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
  188. if (added == true)
  189. changed = true;
  190. }
  191. return changed;
  192. }
  193. ////////////////////////////////////
  194. // adds Range prompt to listbox where multiple values are supported
  195. function promptengine_addRangeValue (
  196. form,
  197. type ,
  198. promptID )
  199. {
  200. var lowerBoundPickList = form[promptID + "SelectLowerRangeValue"];
  201. var upperBoundPickList = form[promptID + "SelectUpperRangeValue"];
  202. lowerBound = form[promptID + "LowerBound"];
  203. upperBound = form[promptID + "UpperBound"];
  204. //handle select box, not text box case
  205. if ( lowerBound.type.toLowerCase () != "text" &&
  206. lowerBound.type.toLowerCase () != "hidden" &&
  207. lowerBound.type.toLowerCase () != "password" ) //either upper or lower, doesn't matter
  208. {
  209. lowerBound = lowerBound.options[lowerBound.selectedIndex];
  210. upperBound = upperBound.options[upperBound.selectedIndex];
  211. }
  212. lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
  213. upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
  214. lvalue = uvalue = "";
  215. if ( ! lowerUnBounded )
  216. {
  217. if ( ! promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
  218. if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  219. lowerBound.focus ();
  220. return false;
  221. }
  222. lvalue = lowerBound.value;
  223. }
  224. if ( ! upperUnBounded )
  225. {
  226. if ( ! promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
  227. if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  228. upperBound.focus ();
  229. return false;
  230. }
  231. uvalue = upperBound.value;
  232. }
  233. var ldisplay = "";
  234. var udisplay = "";
  235. var found = false;
  236. if (lowerBoundPickList != null && lvalue != null && lvalue.length > 0)
  237. {
  238. var cItems = lowerBoundPickList.length;
  239. for (var item = 0; item < cItems; item++)
  240. {
  241. var value = lowerBoundPickList.options[item].value;
  242. if (value != null && value.length > 0 && value == lvalue)
  243. {
  244. ldisplay = lowerBoundPickList.options[item].text;
  245. found = true;
  246. break;
  247. }
  248. }
  249. }
  250. if (!found)
  251. ldisplay = (lowerBound.text && !lowerUnBounded) ? lowerBound.text : lvalue;
  252. found = false;
  253. if (upperBoundPickList != null && uvalue != null && uvalue.length > 0)
  254. {
  255. var cItems = upperBoundPickList.length;
  256. for (var item = 0; item < cItems; item++)
  257. {
  258. var value = upperBoundPickList.options[item].value;
  259. if (value != null && value == uvalue)
  260. {
  261. udisplay = upperBoundPickList.options[item].text;
  262. found = true;
  263. break;
  264. }
  265. }
  266. }
  267. if (!found)
  268. udisplay = (upperBound.text && !upperUnBounded) ? upperBound.text : uvalue;
  269. lowerChecked = form[promptID + "LowerCheck"].checked;
  270. upperChecked = form[promptID + "UpperCheck"].checked;
  271. // value for showing in the list box only, no need encode here
  272. value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  273. if ( ! lowerUnBounded ) //unbounded is empty string not quoted empty string (e.g not "_crEMPTY_")
  274. value += (lvalue);
  275. value += "_crRANGE_"
  276. if ( ! upperUnBounded )
  277. value += (uvalue);
  278. value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  279. if ( debug ) alert (value);
  280. display = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  281. display += ldisplay;
  282. display += " .. "
  283. display += udisplay;
  284. display += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  285. promptEntry = new Option(display,value,false,false);
  286. theList = form[promptID + "ListBox"];
  287. // search the list/select box for the new option, if the returned index is -1, i.e., no such option, add it
  288. // otherwise, highlight that option
  289. var idx = promptengine_findOptionInList(theList, value);
  290. if (idx > -1)
  291. theList.selectedIndex = idx;
  292. else
  293. theList.options[theList.length] = promptEntry;
  294. return true;
  295. }
  296. ////////////////////////////////////
  297. // search the given select object for the given option value, and returns its index.
  298. function promptengine_findOptionInList(selectObj, optionValue)
  299. {
  300. if (selectObj == null || optionValue == null || optionValue == "")
  301. return -1;
  302. for (var i = 0; i < selectObj.options.length; i++)
  303. {
  304. if (selectObj.options[i].value == optionValue)
  305. return i;
  306. }
  307. return -1;
  308. }
  309. ////////////////////////////////////
  310. // disable check boxes / dropdowns / textboxes based on user selection on the range parameters
  311. function promptengine_onNoBoundCheckClicked(
  312. form,
  313. promptID,
  314. lowOrUpBound)
  315. {
  316. if (lowOrUpBound == 0) {
  317. if (form[promptID + "NoLBoundCheck"].checked) {
  318. form[promptID + "NoUBoundCheck"].disabled = true;
  319. form[promptID + "LowerCheck"].disabled = true;
  320. form[promptID + "LowerBound"].disabled = true;
  321. if (form[promptID + "SelectLowerRangeValue"] != null)
  322. form[promptID + "SelectLowerRangeValue"].disabled = true;
  323. }
  324. else {
  325. form[promptID + "NoUBoundCheck"].disabled = false;
  326. form[promptID + "LowerCheck"].disabled = false;
  327. form[promptID + "LowerBound"].disabled = false;
  328. if (form[promptID + "SelectLowerRangeValue"] != null)
  329. form[promptID + "SelectLowerRangeValue"].disabled = false;
  330. }
  331. } else if (lowOrUpBound == 1) {
  332. if (form[promptID + "NoUBoundCheck"].checked) {
  333. form[promptID + "NoLBoundCheck"].disabled = true;
  334. form[promptID + "UpperCheck"].disabled = true;
  335. form[promptID + "UpperBound"].disabled = true;
  336. if (form[promptID + "SelectUpperRangeValue"] != null)
  337. form[promptID + "SelectUpperRangeValue"].disabled = true;
  338. } else {
  339. form[promptID + "NoLBoundCheck"].disabled = false;
  340. form[promptID + "UpperCheck"].disabled = false;
  341. form[promptID + "UpperBound"].disabled = false;
  342. if (form[promptID + "SelectUpperRangeValue"] != null)
  343. form[promptID + "SelectUpperRangeValue"].disabled = false;
  344. }
  345. }
  346. }
  347. ////////////////////////////////////
  348. // disable text boxes / list boxes based on whether setNull is checked
  349. function promptengine_onSetNullCheckClicked(
  350. form,
  351. promptID)
  352. {
  353. if (form[promptID + "NULL"].checked)
  354. {
  355. if (form[promptID + "DiscreteValue"] != null)
  356. form[promptID + "DiscreteValue"].disabled = true;
  357. if (form[promptID + "SelectValue"] != null)
  358. form[promptID + "SelectValue"].disabled = true;
  359. }
  360. else
  361. {
  362. if (form[promptID + "DiscreteValue"] != null)
  363. form[promptID + "DiscreteValue"].disabled = false;
  364. if (form[promptID + "SelectValue"] != null)
  365. form[promptID + "SelectValue"].disabled = false;
  366. }
  367. }
  368. ////////////////////////////////////
  369. // puts "select" value into text box for an editable prompt which also has defaults
  370. function promptengine_selectValue(
  371. form,
  372. selectCtrl,
  373. textCtrl)
  374. {
  375. // If no selection, return unchanged.
  376. if(form[selectCtrl].selectedIndex < 0)
  377. return false;
  378. selectedOption = form[selectCtrl].options[form[selectCtrl].selectedIndex];
  379. if (selectedOption.value == null && form[textCtrl].value == null)
  380. return false;
  381. var changed = true;
  382. if (selectedOption.value == form[textCtrl].value)
  383. changed = false;
  384. form[textCtrl].value = selectedOption.value;
  385. return changed;
  386. }
  387. function promptengine_hasValueInTextBox(
  388. form,
  389. textboxID)
  390. {
  391. if (form[textboxID].value == null)
  392. return false;
  393. return true;
  394. }
  395. /////////////////////////////////////////
  396. // set cascading prompt id into value field.
  397. function promptengine_setCascadingPID(
  398. form,
  399. valueID,
  400. promptID)
  401. {
  402. valueField = form[valueID];
  403. curVal = valueField.value;
  404. if (curVal.length > 0)
  405. curVal += "&";
  406. curVal += "cascadingPID" + "=" + promptID;
  407. if ( debug )
  408. alert (curVal);
  409. valueField.value = curVal;
  410. return true;
  411. }
  412. /////////////////////////////////////////////////
  413. // remove selected values from multi-value prompt
  414. function promptengine_removeValue(
  415. form,
  416. promptID)
  417. {
  418. var lbox = form[promptID + "ListBox"];
  419. var changed = false;
  420. var lastSelected = -1;
  421. for ( var idx = 0; idx < lbox.options.length; )
  422. {
  423. if ( lbox.options[idx].selected )
  424. {
  425. lbox.options[idx] = null;
  426. changed = true;
  427. lastSelected = idx;
  428. }
  429. else
  430. idx++;
  431. }
  432. if (lastSelected >= 0 && lastSelected < lbox.length)
  433. {
  434. // highlight the next item
  435. promptengine_deselectAllItems(lbox);
  436. lbox.options[lastSelected].selected = true;
  437. }
  438. else if (lastSelected == lbox.length && lastSelected > 0)
  439. {
  440. // highlight the last item
  441. promptengine_deselectAllItems(lbox);
  442. lbox.options[lastSelected - 1].selected = true;
  443. }
  444. return changed;
  445. }
  446. function promptengine_onRemoveValue(
  447. form,
  448. promptID)
  449. {
  450. promptengine_removeValue(form, promptID);
  451. }
  452. /////////////////////////////////////////////////
  453. // remove all values from multi-value prompt
  454. function promptengine_removeAllValues(
  455. form,
  456. promptID)
  457. {
  458. var lbox = form[promptID + "ListBox"];
  459. var changed = false;
  460. if (lbox.options.length > 0)
  461. changed = true;
  462. for ( var idx = 0; idx < lbox.options.length; )
  463. {
  464. lbox.options[idx] = null;
  465. }
  466. return changed;
  467. }
  468. function promptengine_onRemoveAllValues(
  469. form,
  470. promptID)
  471. {
  472. promptengine_removeAllValues(form, promptID);
  473. }
  474. /////////////////////////////////////
  475. // update hidden value field with encoded value
  476. function promptengine_updateValueField (
  477. form,
  478. valueID,
  479. promptID,
  480. value)
  481. {
  482. valueField = form[valueID];
  483. curVal = valueField.value;
  484. if (curVal.length > 0)
  485. curVal += "&";
  486. curVal += promptID + "=" + value;
  487. if ( debug )
  488. alert (curVal);
  489. valueField.value = curVal;
  490. return true;
  491. }
  492. ///////////////////////////////////////
  493. // reset hidden value field
  494. function promptengine_resetValueField (
  495. form,
  496. valueID)
  497. {
  498. valueField = form[valueID];
  499. valueField.value = "";
  500. }
  501. /////////////////////////////////////
  502. // sets prompt value into the hidden form field in proper format so that it can be submitted
  503. function promptengine_updateDiscreteValue (
  504. form,
  505. valueID,
  506. promptID,
  507. type,
  508. checkValue)
  509. {
  510. var value = "";
  511. if (form[promptID + "NULL"] != null &&
  512. form[promptID + "NULL"].checked )
  513. {
  514. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  515. }
  516. else
  517. {
  518. valueField = form[promptID + "DiscreteValue"];
  519. if (valueField.type.toLowerCase () != "text" &&
  520. valueField.type.toLowerCase () != "hidden" &&
  521. valueField.type.toLowerCase () != "password")
  522. {
  523. value = valueField.options[valueField.selectedIndex].value;
  524. }
  525. else
  526. {
  527. value = valueField.value;
  528. }
  529. if ( checkValue && !promptengine_checkValue ( value, type ) )
  530. {
  531. if (valueField.focus && valueField.type.toLowerCase () != "hidden")
  532. valueField.focus ();
  533. return false;
  534. }
  535. else
  536. {
  537. value = promptengine_encodePrompt(value);
  538. }
  539. }
  540. return promptengine_updateValueField(form, valueID, promptID, value);
  541. }
  542. /////////////////////////////////////
  543. // sets prompt value for a range into the hidden form field in proper format so that it can be submitted
  544. function promptengine_updateRangeValue (
  545. form,
  546. valueID,
  547. promptID,
  548. type,
  549. checkValue)
  550. {
  551. if (form[promptID + "NULL"] != null &&
  552. form[promptID + "NULL"].checked )
  553. {
  554. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  555. }
  556. else
  557. {
  558. lowerBound = form[promptID + "LowerBound"];
  559. upperBound = form[promptID + "UpperBound"];
  560. //handle select box, not text box case
  561. if (lowerBound.type.toLowerCase () != "text" &&
  562. lowerBound.type.toLowerCase () != "hidden" &&
  563. lowerBound.type.toLowerCase () != "password") //either upper or lower, doesn't matter
  564. {
  565. lowerBound = lowerBound.options[lowerBound.selectedIndex];
  566. upperBound = upperBound.options[upperBound.selectedIndex];
  567. }
  568. lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
  569. upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
  570. lowerChecked = form[promptID + "LowerCheck"].checked;
  571. upperChecked = form[promptID + "UpperCheck"].checked;
  572. uvalue = lvalue = "";
  573. if ( ! lowerUnBounded )
  574. {
  575. if ( checkValue && !promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
  576. if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  577. lowerBound.focus();
  578. return false;
  579. }
  580. lvalue = lowerBound.value;
  581. }
  582. if ( ! upperUnBounded )
  583. {
  584. if ( checkValue && !promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
  585. if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  586. upperBound.focus ();
  587. return false;
  588. }
  589. uvalue = upperBound.value;
  590. }
  591. value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  592. if ( ! lowerUnBounded )
  593. value += promptengine_encodePrompt(lvalue);
  594. value += "_crRANGE_"
  595. if ( ! upperUnBounded )
  596. value += promptengine_encodePrompt(uvalue);
  597. value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  598. }
  599. return promptengine_updateValueField(form, valueID, promptID, value);
  600. }
  601. /////////////////////////////////////
  602. // sets prompt value into the hidden form field in proper format so that it can be submitted
  603. function promptengine_updateMultiValue (
  604. form,
  605. valueID,
  606. promptID,
  607. type,
  608. checkValue)
  609. {
  610. values = form[promptID + "ListBox"].options;
  611. value = "";
  612. if (form[promptID + "NULL"] != null &&
  613. form[promptID + "NULL"].checked)
  614. {
  615. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  616. }
  617. else
  618. {
  619. if ( values.length == 0 )
  620. {
  621. value = "_crEMPTY_"; //if value is empty, set to empty string
  622. }
  623. else
  624. {
  625. for ( i = 0; i < values.length; i++ )
  626. {
  627. // first value could be empty string, then chcking value.length != 0 could miss one empty string
  628. if ( i != 0 )
  629. value += "_crMULT_"
  630. value += promptengine_encodePrompt(values[i].value);
  631. }
  632. }
  633. }
  634. //NOTE: we'll always return true as the validation is done before values are added to select box
  635. return promptengine_updateValueField(form, valueID, promptID, value);
  636. }
  637. ///////////////////////////////////////
  638. // check and alert user about any errors based on type of prompt
  639. var regNumber = /^(\+|-)?((\d+(\.|,|'| |\xA0)?\d*)+|(\d*(\.|,| |\xA0)?\d+)+)$/
  640. var regCurrency = regNumber;
  641. var regDate = /^(D|d)(A|a)(T|t)(E|e) *\( *\d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]\d)|3(0|1)) *\)$/
  642. var regDateTime = /^(D|d)(A|a)(T|t)(E|e)(T|t)(I|i)(M|m)(E|e) *\( *\d{4} *, *(0?[1-9]|1[0-2]) *, *((0?[1-9]|[1-2]\d)|3(0|1)) *, *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  643. var regTime = /^(T|t)(I|i)(M|m)(E|e) *\( *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  644. var regDateTimeHTML = /^ *\d{4} *- *(0?[1-9]|1[0-2]) *- *((0?[1-9]|[1-2]\d)|3(0|1)) * *([0-1]?\d|2[0-3]) *: *[0-5]?\d *: *[0-5]?\d *$/
  645. var regDateHTML = /^ *\d{4} *- *(0?[1-9]|1[0-2]) *- *((0?[1-9]|[1-2]\d)|3(0|1)) *$/
  646. var regTimeHTML = /^ *([0-1]?\d|2[0-3]) *: *[0-5]?\d *: *[0-5]?\d *$/
  647. function promptengine_getDateSpec()
  648. {
  649. var datePattern = promptengine_getDatePattern();
  650. datePattern = datePattern.replace("Y", L_YYYY);
  651. datePattern = datePattern.replace("M", L_MM);
  652. datePattern = datePattern.replace("D", L_DD);
  653. return datePattern;
  654. }
  655. function promptengine_checkValue (
  656. value,
  657. type )
  658. {
  659. if (value == null)
  660. return false;
  661. if (value == "_crNULL_")
  662. return true;
  663. if ( type == 'n' && ! regNumber.test ( value ) )
  664. {
  665. if (value.length > 0)
  666. alert ( L_BadNumber );
  667. return false;
  668. }
  669. else if ( type == 'c' && ! regCurrency.test ( value ) )
  670. {
  671. if (value.length > 0)
  672. alert ( L_BadCurrency );
  673. return false;
  674. }
  675. else if ( type == 'd' )
  676. {
  677. var regex = promptengine_getDateRegex();
  678. if((regex == null || !regex.test(value)) && ! regDate.test ( value ) && !regDateHTML.test( value ))
  679. {
  680. if (value.length > 0)
  681. {
  682. var badDate = L_BadDate.replace("%1", promptengine_getDateSpec());
  683. alert ( badDate );
  684. }
  685. return false;
  686. }
  687. }
  688. else if ( type == "dt" )
  689. {
  690. var regex = promptengine_getDateTimeRegex();
  691. if((regex == null || !regex.test(value)) && ! regDateTime.test ( value ) && !regDateTimeHTML.test( value ))
  692. {
  693. if (value.length > 0)
  694. {
  695. var badDateTime = L_BadDateTime.replace("%1", promptengine_getDateSpec());
  696. alert ( badDateTime );
  697. }
  698. return false;
  699. }
  700. }
  701. else if ( type == 't' && ! regTime.test ( value ) && !regTimeHTML.test( value ) )
  702. {
  703. if (value.length > 0)
  704. alert ( L_BadTime );
  705. return false;
  706. }
  707. //by default let it go...
  708. return true;
  709. }
  710. function promptengine_checkRangeBoundValue (
  711. value,
  712. type )
  713. {
  714. if (value == null || value.length == 0)
  715. return false;
  716. return promptengine_checkValue(value, type);
  717. }
  718. function promptengine_isSubmitEvent(evt)
  719. {
  720. if (isNetscape)
  721. {
  722. if (evt.which == ENTER_KEY && (evt.target.type == "text" || evt.target.type == "password"))
  723. return true;
  724. }
  725. else
  726. {
  727. if (window.event.keyCode == ENTER_KEY && (window.event.srcElement.type == "text" || window.event.srcElement.type == "password"))
  728. return true;
  729. }
  730. return false;
  731. }
  732. function promptengine_isEnterKey(evt)
  733. {
  734. if (isNetscape)
  735. {
  736. if (evt.which == ENTER_KEY && evt.target.tagName.toLowerCase() != "a")
  737. return true;
  738. }
  739. else
  740. {
  741. if (window.event.keyCode == ENTER_KEY && window.event.srcElement.tagName.toLowerCase() != "a")
  742. return true;
  743. }
  744. }
  745. //This function should only be called from the COM components.
  746. //Use encodeURIComponent for Java
  747. function promptengine_urlEncode(strToBeEncoded)
  748. {
  749. var encodedString = new String("");
  750. for( var i = 0; i < strToBeEncoded.length; i++ )
  751. {
  752. var nextChar = strToBeEncoded.charAt(i);
  753. switch( nextChar )
  754. {
  755. //Unsafe characters
  756. case '%':
  757. {
  758. encodedString += "%25";
  759. break;
  760. }
  761. case '+':
  762. {
  763. encodedString += "%2B";
  764. break;
  765. }
  766. case ' ':
  767. {
  768. encodedString += "%20";
  769. break;
  770. }
  771. case '<':
  772. {
  773. encodedString += "%3C";
  774. break;
  775. }
  776. case '>':
  777. {
  778. encodedString += "%3E";
  779. break;
  780. }
  781. case '"':
  782. {
  783. encodedString += "%22";
  784. break;
  785. }
  786. case '\'':
  787. {
  788. encodedString += "%27";
  789. break;
  790. }
  791. case '#':
  792. {
  793. encodedString += "%23";
  794. break;
  795. }
  796. case '{':
  797. {
  798. encodedString += "%7B";
  799. break;
  800. }
  801. case '}':
  802. {
  803. encodedString += "%7D";
  804. break;
  805. }
  806. case '|':
  807. {
  808. encodedString += "%7C";
  809. break;
  810. }
  811. case '\\':
  812. {
  813. encodedString += "%5C";
  814. break;
  815. }
  816. case '^':
  817. {
  818. encodedString += "%5E";
  819. break;
  820. }
  821. case '~':
  822. {
  823. encodedString += "%7E";
  824. break;
  825. }
  826. case '`':
  827. {
  828. encodedString += "%60";
  829. break;
  830. }
  831. case '[':
  832. {
  833. encodedString += "%5B";
  834. break;
  835. }
  836. case ']':
  837. {
  838. encodedString += "%5D";
  839. break;
  840. }
  841. //Reserved characters
  842. case ';':
  843. {
  844. encodedString += "%3B";
  845. break;
  846. }
  847. case '/':
  848. {
  849. encodedString += "%2F";
  850. break;
  851. }
  852. case '?':
  853. {
  854. encodedString += "%3F";
  855. break;
  856. }
  857. case ':':
  858. {
  859. encodedString += "%3A";
  860. break;
  861. }
  862. case '@':
  863. {
  864. encodedString += "%40";
  865. break;
  866. }
  867. case '=':
  868. {
  869. encodedString += "%3D";
  870. break;
  871. }
  872. case '&':
  873. {
  874. encodedString += "%26";
  875. break;
  876. }
  877. default:
  878. {
  879. encodedString += nextChar;
  880. break;
  881. }
  882. }
  883. }
  884. return encodedString;
  885. }
  886. function promptengine_CancelRightClick(evt)
  887. {
  888. if (isNetscape)
  889. {
  890. if (evt.target.type != "text" && evt.target.type != "textarea")
  891. {
  892. evt.preventDefault();
  893. evt.cancelBubble = true;
  894. return true;
  895. }
  896. }
  897. else
  898. {
  899. if (window.event.srcElement.type != "text" && window.event.srcElement.type != "textarea")
  900. {
  901. window.event.cancelBubble = true;
  902. window.event.returnValue = false;
  903. }
  904. }
  905. }
  906. function promptengine_showHidePromptByKey(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  907. {
  908. var correctKey = false;
  909. var fieldSet = document.getElementById(fieldSetId);
  910. if (fieldSet == null)
  911. return;
  912. if (isNetscape)
  913. {
  914. if ( (evt.which == LEFT_ARROW_KEY && fieldSet.style.display == "") ||
  915. (evt.which == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
  916. correctKey = true;
  917. }
  918. else
  919. {
  920. if ( (window.event.keyCode == LEFT_ARROW_KEY && fieldSet.style.display == "") ||
  921. (window.event.keyCode == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
  922. correctKey = true;
  923. }
  924. if (correctKey == true)
  925. promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  926. }
  927. function promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
  928. {
  929. var imgElem;
  930. imgElem = document.getElementById(imgId);
  931. if (imgElem!= null && fieldSetId != null)
  932. {
  933. if (!imgElem.origImage)
  934. imgElem.origImage = imgElem.src;
  935. var fieldSet = document.getElementById(fieldSetId);
  936. if (fieldSet != null)
  937. {
  938. if (fieldSet.style.display == "")
  939. fieldSet.style.display = "none";
  940. else
  941. fieldSet.style.display = "";
  942. if (!imgElem.changed || imgElem.changed == false)
  943. {
  944. imgElem.src = changeImgPath;
  945. imgElem.changed = true;
  946. }
  947. else
  948. {
  949. imgElem.src = currentImgPath;
  950. imgElem.changed = false;
  951. }
  952. }
  953. }
  954. }
  955. function promptengine_scrollTo(elt)
  956. {
  957. if (!elt) return;
  958. var offsetTop = elt.offsetTop;
  959. if (!offsetTop) return;
  960. var myOffsetParent = elt.offsetParent;
  961. while( myOffsetParent )
  962. {
  963. offsetTop += myOffsetParent.offsetTop;
  964. myOffsetParent = myOffsetParent.offsetParent;
  965. }
  966. window.scrollTo(0, offsetTop);
  967. }
  968. /* Crystal Decisions Confidential Proprietary Information */