prompts.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. //////////////////////////////
  2. // FOR DEBUGGING ONLY
  3. var debug = false;
  4. function dumpFormFields(formName)
  5. {
  6. theForm = document.forms[formName];
  7. for ( idx = 0; idx < theForm.elements.length; ++idx )
  8. alert ( theForm.elements[idx].name + " - " + theForm.elements[idx].value );
  9. }
  10. //////////////////////////////
  11. // GLOBAL VAR
  12. var needURLEncode = false; // only need to do url encode in java
  13. var promptPrefix = "promptex-";
  14. ///////////////////////////////
  15. // properly encode prompt values
  16. function encodePrompt (prompt)
  17. {
  18. if (needURLEncode)
  19. {
  20. return encodeURIComponent(prompt);
  21. }
  22. else
  23. {
  24. return prompt;
  25. }
  26. }
  27. ////////////////////////////////
  28. // add number, currency, string from dropdown/textbox to list box
  29. // where multiple prompt values are supported
  30. function addPromptDiscreteValue ( inForm, type , paramName)
  31. {
  32. var widget, obj;
  33. widget = obj = inForm[paramName + "DiscreteValue"];
  34. if ( obj.type && obj.type.toLowerCase() != "text" &&
  35. obj.type.toLowerCase() != "hidden" && obj.type.toLowerCase() != "password")
  36. {
  37. //select box not a textbox
  38. obj = obj.options[obj.selectedIndex];
  39. }
  40. if ( ! checkSingleValue ( obj.value, type ) )
  41. {
  42. if (widget.focus && widget.type.toLowerCase() != "hidden")
  43. widget.focus();
  44. return false;
  45. }
  46. promptValue = encodePrompt(obj.value);
  47. displayString = ( obj.text ) ? obj.text : obj.value;
  48. promptEntry = new Option(displayString,promptValue,false,false);
  49. theList = inForm[paramName + "ListBox"];
  50. theList.options[theList.length] = promptEntry;
  51. if (widget.focus && widget.type.toLowerCase() != "hidden")
  52. widget.focus ();
  53. if ( widget.select )
  54. widget.select ();
  55. if ( widget.type.toLowerCase != "text" &&
  56. widget.type.toLowerCase != "hidden" &&
  57. widget.type.toLowerCase != "password")
  58. if ( widget.selectedIndex < widget.length - 1 )
  59. widget.selectedIndex = widget.selectedIndex + 1; //... or move to next selection in listbox
  60. }
  61. ////////////////////////////////////
  62. // adds Range prompt to listbox where multiple values are supported
  63. function addPromptRangeValue ( inForm, type , paramName )
  64. {
  65. lowerBound = inForm[paramName + "LowerBound"];
  66. upperBound = inForm[paramName + "UpperBound"];
  67. //handle select box, not text box case
  68. if ( lowerBound.type.toLowerCase () != "text" &&
  69. lowerBound.type.toLowerCase () != "hidden" &&
  70. lowerBound.type.toLowerCase () != "password" ) //either upper or lower, doesn't matter
  71. {
  72. lowerBound = lowerBound.options[lowerBound.selectedIndex];
  73. upperBound = upperBound.options[upperBound.selectedIndex];
  74. }
  75. lowerUnBounded = inForm[paramName + "NoLowerBoundCheck"].checked;
  76. upperUnBounded = inForm[paramName + "NoUpperBoundCheck"].checked;
  77. lvalue = uvalue = "";
  78. if ( ! lowerUnBounded )
  79. {
  80. if ( ! checkSingleValue ( lowerBound.value, type ) ) {
  81. if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  82. lowerBound.focus ();
  83. return false;
  84. }
  85. lvalue = lowerBound.value;
  86. }
  87. if ( ! upperUnBounded )
  88. {
  89. if ( ! checkSingleValue ( upperBound.value, type ) ) {
  90. if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  91. upperBound.focus ();
  92. return false;
  93. }
  94. uvalue = upperBound.value;
  95. }
  96. ldisplay = (lowerBound.text && !lowerUnBounded) ? lowerBound.text : lvalue;
  97. udisplay = (upperBound.text && !upperUnBounded) ? upperBound.text : uvalue;
  98. lowerChecked = inForm[paramName + "LowerCheck"].checked;
  99. upperChecked = inForm[paramName + "UpperCheck"].checked;
  100. value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  101. if ( ! lowerUnBounded ) //unbounded is empty string not quoted empty string (e.g not "_crEMPTY_")
  102. value += encodePrompt(lvalue);
  103. value += "_crRANGE_"
  104. if ( ! upperUnBounded )
  105. value += encodePrompt(uvalue);
  106. value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  107. if ( debug ) alert (value);
  108. display = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  109. display += ldisplay;
  110. display += " .. "
  111. display += udisplay;
  112. display += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  113. promptEntry = new Option(display,value,false,false);
  114. theList = inForm[paramName + "ListBox"];
  115. theList.options[theList.length] = promptEntry;
  116. }
  117. ////////////////////////////////////
  118. // disable check boxes based on user selection on the range parameters
  119. function disableBoundCheck(lowOrUpBound, inform, paramName) {
  120. if (lowOrUpBound == 0) {
  121. if (inform[paramName + "NoLowerBoundCheck"].checked) {
  122. inform[paramName + "NoUpperBoundCheck"].disabled = true;
  123. inform[paramName + "LowerCheck"].disabled = true;
  124. inform[paramName + "LowerBound"].disabled = true;
  125. }
  126. else {
  127. inform[paramName + "NoUpperBoundCheck"].disabled = false;
  128. inform[paramName + "LowerCheck"].disabled = false;
  129. inform[paramName + "LowerBound"].disabled = false;
  130. }
  131. } else if (lowOrUpBound == 1) {
  132. if (inform[paramName + "NoUpperBoundCheck"].checked) {
  133. inform[paramName + "NoLowerBoundCheck"].disabled = true;
  134. inform[paramName + "UpperCheck"].disabled = true;
  135. inform[paramName + "UpperBound"].disabled = true;
  136. } else {
  137. inform[paramName + "NoLowerBoundCheck"].disabled = false;
  138. inform[paramName + "UpperCheck"].disabled = false;
  139. inform[paramName + "UpperBound"].disabled = false;
  140. }
  141. }
  142. }
  143. ////////////////////////////////////
  144. // puts "select" value into text box for an editable prompt which also has defaults
  145. function setSelectedValue (inForm, selectCtrl, textCtrl)
  146. {
  147. selectedOption = inForm[selectCtrl].options[inForm[selectCtrl].selectedIndex];
  148. inForm[textCtrl].value = selectedOption.value;
  149. }
  150. ///////////////////////////////////
  151. // remove value from listbox where multiple value prompts are supported
  152. function removeFromListBox ( inForm, paramName )
  153. {
  154. lbox = inForm[paramName + "ListBox"];
  155. for ( var idx = 0; idx < lbox.options.length; )
  156. {
  157. if ( lbox.options[idx].selected )
  158. lbox.options[idx] = null;
  159. else
  160. idx++;
  161. }
  162. }
  163. /////////////////////////////////////
  164. // sets prompt value into the hidden form field in proper format so that it can be submitted
  165. function setPromptSingleValue (inform, type, paramName)
  166. {
  167. hiddenField = inform[promptPrefix + paramName];
  168. value = "";
  169. if ( inform[paramName + "NULL"] != null && inform[paramName + "NULL"].checked )
  170. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  171. else
  172. {
  173. discreteVal = inform[paramName + "DiscreteValue"];
  174. if ( discreteVal.type.toLowerCase () != "text" &&
  175. discreteVal.type.toLowerCase () != "hidden" &&
  176. discreteVal.type.toLowerCase () != "password")
  177. value = discreteVal.options[discreteVal.selectedIndex].value;
  178. else
  179. value = discreteVal.value;
  180. if ( ! checkSingleValue ( value, type ) ) {
  181. if (discreteVal.focus && discreteVal.type.toLowerCase ())
  182. discreteVal.focus ();
  183. return false;
  184. }
  185. else
  186. value = encodePrompt(value);
  187. }
  188. hiddenField.value = value;
  189. return true;
  190. }
  191. /////////////////////////////////////
  192. // sets prompt value for a range into the hidden form field in proper format so that it can be submitted
  193. function setPromptRangeValue (inform, type, paramName)
  194. {
  195. hiddenField = inform[promptPrefix + paramName];
  196. if ( inform[paramName + "NULL"] != null && inform[paramName + "NULL"].checked )
  197. {
  198. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  199. hiddenField.value = value;
  200. return true;
  201. }
  202. lowerBound = inform[paramName + "LowerBound"];
  203. upperBound = inform[paramName + "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 = inform[paramName + "NoLowerBoundCheck"].checked;
  213. upperUnBounded = inform[paramName + "NoUpperBoundCheck"].checked;
  214. lowerChecked = inform[paramName + "LowerCheck"].checked;
  215. upperChecked = inform[paramName + "UpperCheck"].checked;
  216. uvalue = lvalue = "";
  217. if ( ! lowerUnBounded )
  218. {
  219. if ( ! checkSingleValue ( lowerBound.value, type ) ) {
  220. if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  221. lowerBound.focus();
  222. return false;
  223. }
  224. lvalue = lowerBound.value;
  225. }
  226. if ( ! upperUnBounded )
  227. {
  228. if ( ! checkSingleValue ( upperBound.value, type ) ) {
  229. if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  230. upperBound.focus ();
  231. return false;
  232. }
  233. uvalue = upperBound.value;
  234. }
  235. value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
  236. if ( ! lowerUnBounded )
  237. value += encodePrompt(lvalue);
  238. value += "_crRANGE_"
  239. if ( ! upperUnBounded )
  240. value += encodePrompt(uvalue);
  241. value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
  242. if ( debug )
  243. alert (value);
  244. hiddenField.value = value;
  245. return true;
  246. }
  247. /////////////////////////////////////
  248. // sets prompt value into the hidden form field in proper format so that it can be submitted
  249. function setPromptMultipleValue (inform, type, paramName)
  250. {
  251. hiddenField = inform[promptPrefix + paramName];
  252. values = inform[paramName + "ListBox"].options;
  253. if ( inform[paramName + "NULL"] != null && inform[paramName + "NULL"].checked )
  254. {
  255. value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
  256. hiddenField.value = value;
  257. return true;
  258. }
  259. if ( values.length == 0 )
  260. {
  261. value = "_crEMPTY_"; //if value is empty, set to empty string
  262. }
  263. else
  264. {
  265. value = "";
  266. for ( idx = 0; idx < values.length; ++idx )
  267. {
  268. // first value could be empty string, then chcking value.length != 0 could miss one empty string
  269. if ( idx != 0 )
  270. value += "_crMULT_"
  271. value += values[idx].value;
  272. }
  273. }
  274. if ( debug )
  275. alert (value);
  276. hiddenField.value = value;
  277. //NOTE: we'll always return true as the validation is done before values are added to select box
  278. return true;
  279. }
  280. ///////////////////////////////////////
  281. // check and alert user about any errors based on type of prompt
  282. var regNumber = /^(\+|-)?((\d+(\.|,| |\u00A0)?\d*)+|(\d*(\.|,| |\u00A0)?\d+)+)$/
  283. var regCurrency = regNumber;
  284. 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)) *\)$/
  285. 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 *\)$/
  286. var regTime = /^(T|t)(I|i)(M|m)(E|e) *\( *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  287. function checkSingleValue ( value, type )
  288. {
  289. if ( type == 'n' && ! regNumber.test ( value ) )
  290. {
  291. alert ( L_BadNumber );
  292. return false;
  293. }
  294. else if ( type == 'c' && ! regCurrency.test ( value ) )
  295. {
  296. alert ( L_BadCurrency );
  297. return false;
  298. }
  299. else if ( type == 'd' && ! regDate.test ( value ) )
  300. {
  301. alert ( L_BadDate );
  302. return false;
  303. }
  304. else if ( type == "dt" && ! regDateTime.test ( value ) )
  305. {
  306. alert ( L_BadDateTime );
  307. return false;
  308. }
  309. else if ( type == 't' && ! regTime.test ( value ) )
  310. {
  311. alert ( L_BadTime );
  312. return false;
  313. }
  314. //by default let it go...
  315. return true;
  316. }
  317. function checkValue(evt) {
  318. if (navigator.appName == "Netscape")
  319. {
  320. if (evt.which == 13 && (evt.target.type == "text" || evt.target.type == "password"))
  321. {
  322. checkSetAndSubmitValues ();
  323. }
  324. }
  325. else
  326. {
  327. if (window.event.keyCode == 13 && (window.event.srcElement.type == "text" || window.event.srcElement.type == "password"))
  328. {
  329. checkSetAndSubmitValues ();
  330. }
  331. }
  332. }