/aspnet_client/system_web/2_0_50727/CrystalReportWebFormViewer3/js/prompts_param.js

http://github.com/khaneh/Orders · JavaScript · 1103 lines · 892 code · 125 blank · 86 comment · 431 complexity · b7cddc04b169463fdb361a95c64e6963 MD5 · raw file

  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. var CR_NULL = "_crNULL_";
  15. var CR_USE_VALUE = "_crUseValue_";
  16. var _bver = parseInt(navigator.appVersion);
  17. var Nav4 = ((navigator.appName == "Netscape") && _bver==4);
  18. var Nav4plus = ((navigator.appName == "Netscape") && _bver >= 4);
  19. var IE4plus = ((navigator.userAgent.indexOf("MSIE") != -1) && _bver>4);
  20. if (Nav4plus)
  21. var userLanguage = (navigator.language.substr(0, 2));
  22. else
  23. var userLanguage = (navigator.browserLanguage.substr(0, 2));
  24. ///////////////////////////////
  25. // substitue range string
  26. function ConstructRangeDisplayString(rangeStr, param0, param1)
  27. {
  28. var newString = rangeStr.replace("{0}", param0);
  29. newString = newString.replace("{1}", param1);
  30. return newString;
  31. }
  32. ///////////////////////////////
  33. // Display string for range value in ListBox
  34. function GetRangeValueDisplayText(rangeStr, param0, param1, paramType)
  35. {
  36. if (paramType == "dt" || paramType == "d" || paramType == "t")
  37. {
  38. if (param0.length != 0)
  39. {
  40. param0 = NeutralDT2D(param0);
  41. }
  42. if (param1.length != 0)
  43. {
  44. param1 = NeutralDT2D(param1);
  45. }
  46. }
  47. return ConstructRangeDisplayString(rangeStr, param0, param1);
  48. }
  49. ///////////////////////////////
  50. // properly encode prompt values
  51. function encodePrompt (prompt)
  52. {
  53. if (needURLEncode)
  54. {
  55. return encodeURIComponent(prompt);
  56. }
  57. else
  58. {
  59. return prompt;
  60. }
  61. }
  62. function clickSetNullCheckBox(inForm, paramName, suffix)
  63. {
  64. var nullCtrl = inForm[paramName + "NULL"];
  65. var textCtrl = inForm[paramName + suffix];
  66. var hiddenCtrl = inForm[paramName + suffix + "Hidden"];
  67. var hourCtrl = inForm[paramName + suffix + "Hour"];
  68. var minuteCtrl = inForm[paramName + suffix + "Minute"];
  69. var secondCtrl = inForm[paramName + suffix + "Second"];
  70. var ampmCtrl = inForm[paramName + suffix + "AMPM"];
  71. if (nullCtrl.checked)
  72. {
  73. if (textCtrl != null) textCtrl.disabled = true;
  74. if (hourCtrl != null) hourCtrl.disabled = true;
  75. if (minuteCtrl != null) minuteCtrl.disabled = true;
  76. if (secondCtrl != null) secondCtrl.disabled = true;
  77. if (ampmCtrl != null) ampmCtrl.disabled = true;
  78. }
  79. else
  80. {
  81. if (textCtrl != null) textCtrl.disabled = false;
  82. if (hourCtrl != null) hourCtrl.disabled = false;
  83. if (minuteCtrl != null) minuteCtrl.disabled = false;
  84. if (secondCtrl != null) secondCtrl.disabled = false;
  85. if (ampmCtrl != null) ampmCtrl.disabled = false;
  86. }
  87. }
  88. function ClearListBoxAndSetNULL(theList)
  89. {
  90. // delete everything in the listbox, add _crNULL_ as an item
  91. promptEntry = new Option(L_NoValue, CR_NULL,false,false);
  92. for ( var idx = 0; idx < theList.options.length; )
  93. {
  94. theList.options[0] = null;
  95. idx++;
  96. }
  97. theList.options[0] = promptEntry;
  98. return;
  99. }
  100. ////////////////////////////////
  101. // add number, currency, string from dropdown/textbox to list box
  102. // where multiple prompt values are supported
  103. function DateTimePromptValueHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl)
  104. {
  105. var promptValue = "";
  106. var year;
  107. var month;
  108. var day;
  109. if ((type == "dt") || (type == "d"))
  110. {
  111. var d = hiddenCtrl.value;
  112. if (d.length == 0)
  113. {
  114. alert(L_NoDateEntered);
  115. return "";
  116. }
  117. var leftIndex = d.indexOf("(");
  118. var rightIndex = d.indexOf(")");
  119. d = d.substr(leftIndex + 1, rightIndex - leftIndex - 1);
  120. var dArray = d.split(",");
  121. year = dArray[0];
  122. month = dArray[1];
  123. day = dArray[2];
  124. }
  125. if (type == "dt")
  126. {
  127. promptValue = "DateTime(";
  128. promptValue += year;
  129. promptValue += ",";
  130. promptValue += month;
  131. promptValue += ",";
  132. promptValue += day;
  133. promptValue += ",";
  134. var hour = 0;
  135. if (ampmCtrl != undefined)
  136. {
  137. var i = 0;
  138. if (ampmCtrl.selectedIndex == 1)
  139. i = 1;
  140. hour = hourCtrl.selectedIndex + 1 + i * 12;
  141. if (hour == 12) hour = 0;
  142. else if (hour == 24) hour = 12;
  143. }
  144. else
  145. {
  146. hour = hourCtrl.selectedIndex;
  147. }
  148. promptValue += hour;
  149. promptValue += ",";
  150. promptValue += minuteCtrl.selectedIndex;
  151. promptValue += ",";
  152. promptValue += secondCtrl.selectedIndex;
  153. promptValue += ")";
  154. }
  155. else if (type == "d")
  156. {
  157. promptValue = "Date(";
  158. promptValue += year;
  159. promptValue += ",";
  160. promptValue += month;
  161. promptValue += ",";
  162. promptValue += day;
  163. promptValue += ")";
  164. }
  165. else if (type == "t")
  166. {
  167. promptValue = "Time("
  168. var hour = 0;
  169. if (ampmCtrl != undefined)
  170. {
  171. var i = 0;
  172. if (ampmCtrl.selectedIndex == 1)
  173. i = 1;
  174. hour = hourCtrl.selectedIndex + 1 + i * 12;
  175. if (hour == 12) hour = 0;
  176. else if (hour == 24) hour = 12;
  177. }
  178. else
  179. {
  180. hour = hourCtrl.selectedIndex;
  181. }
  182. promptValue += hour;
  183. promptValue += ",";
  184. promptValue += minuteCtrl.selectedIndex;
  185. promptValue += ",";
  186. promptValue += secondCtrl.selectedIndex;
  187. promptValue += ")";
  188. }
  189. return promptValue;
  190. }
  191. function DateTimeDisplayStringHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl)
  192. {
  193. var neutralstring = DateTimePromptValueHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl);
  194. return NeutralDT2D(neutralstring);
  195. }
  196. function addPromptDiscreteValueHelper(inForm, type, paramName, suffix)
  197. {
  198. theList = inForm[paramName + "ListBox"];
  199. // if there is a NULL checkbox and it is set
  200. if ( inForm[paramName + "NULL"] != null && inForm[paramName + "NULL"].checked )
  201. {
  202. // delete everything in the listbox, add _crNULL_ as an item
  203. ClearListBoxAndSetNULL(theList);
  204. return;
  205. }
  206. // if the listbox already has a NULL value in it, don't do anything, unless user removes NULl value from the listbox
  207. if (theList.options.length > 0 && theList.options[0].value == CR_NULL)
  208. {
  209. alert(L_NoValueAlready);
  210. return;
  211. }
  212. // if defaultdropdownlist selected item is _crNULL_, put it into multiple listbox
  213. var dropDownListName = "";
  214. if (suffix == "DiscreteValue")
  215. dropDownListName = paramName + "SelectValue";
  216. else
  217. dropDownListName = paramName + "SelectLowerBound";
  218. var dropDownListCtrl = inForm[dropDownListName];
  219. if (dropDownListCtrl != null)
  220. {
  221. if (dropDownListCtrl.options[dropDownListCtrl.selectedIndex].value == CR_NULL)
  222. {
  223. // delete everything in the listbox, add _crNULL_ as an item
  224. ClearListBoxAndSetNULL(theList);
  225. return;
  226. }
  227. }
  228. var textCtrl = inForm[paramName + suffix];
  229. var hiddenCtrl = inForm[paramName + suffix + "Hidden"];
  230. var hourCtrl = inForm[paramName + suffix + "Hour"];
  231. var minuteCtrl = inForm[paramName + suffix + "Minute"];
  232. var secondCtrl = inForm[paramName + suffix + "Second"];
  233. var ampmCtrl = inForm[paramName + suffix + "AMPM"];
  234. var obj;
  235. var editables = true;
  236. if (textCtrl == undefined && hourCtrl == undefined)
  237. {
  238. //select box not a textbox, hour, minute, and second, ampm dropdown are not there either
  239. editables = false;
  240. obj = dropDownListCtrl;
  241. obj = obj.options[obj.selectedIndex];
  242. }
  243. else
  244. {
  245. if (type == "t")
  246. obj = hourCtrl;
  247. else
  248. obj = textCtrl;
  249. }
  250. if (editables && (type == "dt" || type == "d" || type == "t"))
  251. {
  252. promptValue = DateTimePromptValueHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl);
  253. if (promptValue.length == 0) return false;
  254. displayString = DateTimeDisplayStringHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl);
  255. }
  256. else
  257. {
  258. promptValue = encodePrompt(obj.value);
  259. displayString = ( obj.text ) ? obj.text : obj.value;
  260. }
  261. if ( ! checkSingleValue (promptValue, type ) )
  262. {
  263. return false;
  264. }
  265. promptEntry = new Option(displayString,promptValue,false,false);
  266. theList.options[theList.length] = promptEntry;
  267. }
  268. function addPromptDiscreteValue ( inForm, type , paramName)
  269. {
  270. addPromptDiscreteValueHelper(inForm, type, paramName, "DiscreteValue");
  271. }
  272. ////////////////////////////////////
  273. // adds Range prompt to listbox where multiple values are supported
  274. function addPromptDiscreteRangeValue ( inForm, type , paramName )
  275. {
  276. lowerOption = inForm[paramName + "SelectLowerOptions"];
  277. // exactly
  278. if (lowerOption.selectedIndex == 1)
  279. {
  280. // add discrete
  281. addPromptDiscreteValueHelper(inForm, type, paramName, "LowerBound");
  282. }
  283. else
  284. {
  285. // add range
  286. addPromptRangeValue(inForm, type, paramName);
  287. }
  288. }
  289. ////////////////////////////////////
  290. // adds Range prompt to listbox where multiple values are supported
  291. function addPromptRangeValue ( inForm, type , paramName )
  292. {
  293. theList = inForm[paramName + "ListBox"];
  294. // if there is a NULL checkbox and it is set
  295. if ( inForm[paramName + "NULL"] != null && inForm[paramName + "NULL"].checked )
  296. {
  297. // delete everything in the listbox, add _crNULL_ as an item
  298. ClearListBoxAndSetNULL(theList);
  299. return;
  300. }
  301. // if the listbox already has a NULL value in it, don't do anything, unless user removed NULl value from the listbox
  302. if (theList.options.length > 0 && theList.options[0].value == CR_NULL)
  303. {
  304. alert(L_NoValueAlready);
  305. return;
  306. }
  307. // if both defaultdropdownlists selected item is _crNULL_, put it into multiple listbox
  308. // if one of them is _crNULL_, it is not a valid option, do nothing
  309. var lowerDropDownListName = paramName + "SelectLowerBound";
  310. var upperDropDownListName = paramName + "SelectUpperBound";
  311. var lowerDropDownListCtrl = inForm[lowerDropDownListName];
  312. var upperDropDownListCtrl = inForm[upperDropDownListName];
  313. if (lowerDropDownListCtrl != null && upperDropDownListCtrl != null)
  314. {
  315. if (lowerDropDownListCtrl.options[lowerDropDownListCtrl.selectedIndex].value == CR_NULL
  316. && upperDropDownListCtrl.options[upperDropDownListCtrl.selectedIndex].value == CR_NULL)
  317. {
  318. // delete everything in the listbox, add _crNULL_ as an item
  319. ClearListBoxAndSetNULL(theList);
  320. return;
  321. }
  322. else if (lowerDropDownListCtrl.options[lowerDropDownListCtrl.selectedIndex].value == CR_NULL
  323. || upperDropDownListCtrl.options[upperDropDownListCtrl.selectedIndex].value == CR_NULL)
  324. {
  325. alert(L_BadValue);
  326. return;
  327. }
  328. }
  329. lowerOption = inForm[paramName + "SelectLowerOptions"];
  330. upperOption = inForm[paramName + "SelectUpperOptions"];
  331. lowerBound = inForm[paramName + "LowerBound"];
  332. upperBound = inForm[paramName + "UpperBound"];
  333. lowerBoundHidden = inForm[paramName + "LowerBoundHidden"];
  334. upperBoundHidden = inForm[paramName + "UpperBoundHidden"];
  335. var lhourCtrl = inForm[paramName+"LowerBound" + "Hour"];
  336. var lminuteCtrl = inForm[paramName + "LowerBound" + "Minute"];
  337. var lsecondCtrl = inForm[paramName + "LowerBound" + "Second"];
  338. var lampmCtrl = inForm[paramName + "LowerBound" + "AMPM"];
  339. var uhourCtrl = inForm[paramName+"UpperBound" + "Hour"];
  340. var uminuteCtrl = inForm[paramName + "UpperBound" + "Minute"];
  341. var usecondCtrl = inForm[paramName + "UpperBound" + "Second"];
  342. var uampmCtrl = inForm[paramName + "UpperBound" + "AMPM"];
  343. var editable = true;
  344. //handle select box, not text box case
  345. if ( lowerBound == undefined && lhourCtrl == undefined)//either upper or lower, doesn't matter
  346. {
  347. editable = false;
  348. lowerBound = inForm[paramName + "SelectLowerBound"];
  349. upperBound = inForm[paramName + "SelectUpperBound"];
  350. lowerBound = lowerBound.options[lowerBound.selectedIndex];
  351. upperBound = upperBound.options[upperBound.selectedIndex];
  352. }
  353. lowerUnBounded = (inForm[paramName+"SelectLowerOptions"].selectedIndex == (inForm[paramName + "SelectLowerOptions"].options.length - 1));
  354. upperUnBounded = (inForm[paramName+"SelectUpperOptions"].selectedIndex == (inForm[paramName + "SelectUpperOptions"].options.length - 1));
  355. lvalue = uvalue = "";
  356. if ( ! lowerUnBounded )
  357. {
  358. if ((type == "dt" || type == "d" || type == "t") && (editable))
  359. {
  360. lvalue = DateTimePromptValueHelper(type, lowerBoundHidden, lhourCtrl, lminuteCtrl, lsecondCtrl, lampmCtrl);
  361. if (lvalue.length == 0) return false;
  362. }
  363. else
  364. lvalue = lowerBound.value;
  365. if ( ! checkSingleValue ( lvalue, type ) ) {
  366. if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
  367. lowerBound.focus ();
  368. return false;
  369. }
  370. }
  371. if ( ! upperUnBounded )
  372. {
  373. if ((type == "dt" || type == "d" || type == "t") && (editable))
  374. {
  375. uvalue = DateTimePromptValueHelper(type, upperBoundHidden, uhourCtrl, uminuteCtrl, usecondCtrl, uampmCtrl);
  376. if (uvalue.length == 0) return false;
  377. }
  378. else
  379. uvalue = upperBound.value;
  380. if ( ! checkSingleValue ( uvalue, type ) ) {
  381. if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
  382. upperBound.focus ();
  383. return false;
  384. }
  385. }
  386. var ldisplay = "";
  387. var udisplay = "";
  388. if ((type == "dt" || type == "d" || type == "t") && (editable))
  389. {
  390. if (!lowerUnBounded)
  391. ldisplay = DateTimeDisplayStringHelper(type, lowerBoundHidden, lhourCtrl, lminuteCtrl, lsecondCtrl, lampmCtrl);
  392. if (!upperUnBounded)
  393. udisplay = DateTimeDisplayStringHelper(type, upperBoundHidden, uhourCtrl, uminuteCtrl, usecondCtrl, uampmCtrl);
  394. }
  395. else
  396. {
  397. ldisplay = lvalue;
  398. udisplay = uvalue;
  399. }
  400. lowerChecked = (inForm[paramName+"SelectLowerOptions"].selectedIndex == 0);
  401. upperChecked = (inForm[paramName+"SelectUpperOptions"].selectedIndex == 0);
  402. value = lowerUnBounded ? "{" : lowerChecked ? "[" : "(";
  403. if ( ! lowerUnBounded ) //unbounded is empty string not quoted empty string (e.g not "_crEMPTY_")
  404. value += encodePrompt(lvalue);
  405. value += "_crRANGE_"
  406. if ( ! upperUnBounded )
  407. value += encodePrompt(uvalue);
  408. value += upperUnBounded ? "}" : upperChecked ? "]" : ")";
  409. if ( debug ) alert (value);
  410. if ( !lowerUnBounded && !upperUnBounded && !checkRangeValue(lvalue, uvalue, type))
  411. {
  412. return false;
  413. }
  414. var display = "";
  415. if (lowerChecked && upperUnBounded)
  416. {
  417. display = ConstructRangeDisplayString(L_FROM, ldisplay, "");
  418. }
  419. else if (lowerUnBounded && upperChecked)
  420. {
  421. display = ConstructRangeDisplayString(L_TO, udisplay, "");
  422. }
  423. else if (!lowerChecked && upperUnBounded)
  424. {
  425. display = ConstructRangeDisplayString(L_AFTER, ldisplay, "");
  426. }
  427. else if (lowerUnBounded && !upperChecked)
  428. {
  429. display = ConstructRangeDisplayString(L_BEFORE, udisplay, "");
  430. }
  431. else if (lowerChecked && upperChecked)
  432. {
  433. display = ConstructRangeDisplayString(L_FROM_TO, ldisplay, udisplay);
  434. }
  435. else if (lowerChecked && !upperUnBounded && !upperChecked)
  436. {
  437. display = ConstructRangeDisplayString(L_FROM_BEFORE, ldisplay, udisplay);
  438. }
  439. else if (!lowerChecked && !lowerUnBounded && upperChecked)
  440. {
  441. display = ConstructRangeDisplayString(L_AFTER_TO, ldisplay, udisplay);
  442. }
  443. else if (!lowerChecked && !lowerUnBounded && !upperChecked && !upperUnBounded)
  444. {
  445. display = ConstructRangeDisplayString(L_AFTER_BEFORE, ldisplay, udisplay);
  446. }
  447. if ((!lowerUnBounded) || (!upperUnBounded))
  448. {
  449. promptEntry = new Option(display,value,false,false);
  450. theList.options[theList.length] = promptEntry;
  451. }
  452. else
  453. {
  454. alert(L_BadBound);
  455. }
  456. }
  457. ////////////////////////////////////
  458. // disable check boxes based on user selection on the range parameters
  459. function disableBoundCheck(lowOrUpBound, inform, paramName) {
  460. if (lowOrUpBound == 0) {
  461. if (inform[paramName + "NoLowerBoundCheck"].checked) {
  462. inform[paramName + "NoUpperBoundCheck"].disabled = true;
  463. inform[paramName + "LowerCheck"].disabled = true;
  464. inform[paramName + "LowerBound"].disabled = true;
  465. }
  466. else {
  467. inform[paramName + "NoUpperBoundCheck"].disabled = false;
  468. inform[paramName + "LowerCheck"].disabled = false;
  469. inform[paramName + "LowerBound"].disabled = false;
  470. }
  471. } else if (lowOrUpBound == 1) {
  472. if (inform[paramName + "NoUpperBoundCheck"].checked) {
  473. inform[paramName + "NoLowerBoundCheck"].disabled = true;
  474. inform[paramName + "UpperCheck"].disabled = true;
  475. inform[paramName + "UpperBound"].disabled = true;
  476. } else {
  477. inform[paramName + "NoLowerBoundCheck"].disabled = false;
  478. inform[paramName + "UpperCheck"].disabled = false;
  479. inform[paramName + "UpperBound"].disabled = false;
  480. }
  481. }
  482. }
  483. ////////////////////////////////////
  484. // puts "select" value into text box for an editable prompt which also has defaults
  485. function setSelectedValue (inForm, selectCtrlName, textCtrlName, type, namePlusFix)
  486. {
  487. var textCtrl = inForm[textCtrlName];
  488. var selectCtrl = inForm[selectCtrlName];
  489. var hiddenCtrl = inForm[namePlusFix+"Hidden"];
  490. var hourCtrl = inForm[namePlusFix+"Hour"];
  491. var minuteCtrl = inForm[namePlusFix+"Minute"];
  492. var secondCtrl = inForm[namePlusFix+"Second"];
  493. var ampmCtrl = inForm[namePlusFix+"AMPM"];
  494. // if no editable input fields are there, return, do nothing;
  495. if (textCtrl == null && hourCtrl == null)
  496. return;
  497. // if selectedItem is UseValue,do nothing, and return
  498. if (selectCtrl.options[selectCtrl.selectedIndex].value == CR_USE_VALUE)
  499. {
  500. return;
  501. }
  502. if (selectCtrl.options[selectCtrl.selectedIndex].value == CR_NULL)
  503. {
  504. if (textCtrl != null) textCtrl.disabled = true;
  505. if (hourCtrl != null) hourCtrl.disabled = true;
  506. if (minuteCtrl != null) minuteCtrl.disabled = true;
  507. if (secondCtrl != null) secondCtrl.disabled = true;
  508. if (ampmCtrl != null) ampmCtrl.disabled = true;
  509. return;
  510. }
  511. else
  512. {
  513. if (textCtrl != null) textCtrl.disabled = false;
  514. if (hourCtrl != null) hourCtrl.disabled = false;
  515. if (minuteCtrl != null) minuteCtrl.disabled = false;
  516. if (secondCtrl != null) secondCtrl.disabled = false;
  517. if (ampmCtrl != null) ampmCtrl.disabled = false;
  518. }
  519. var year, month, day;
  520. var hour, minute, second;
  521. if (type == "dt" || type == "d" || type == "t")
  522. {
  523. var sDateTime = selectCtrl.options[selectCtrl.selectedIndex].value;
  524. if (sDateTime.length == 0)
  525. return;
  526. var leftIndex = sDateTime.indexOf("(");
  527. sDateTime = sDateTime.substr(leftIndex+1, sDateTime.length - leftIndex);
  528. var rightIndex = sDateTime.indexOf(")");
  529. sDateTime = sDateTime.substr(0, rightIndex);
  530. var a = sDateTime.split(",");
  531. if (type == "dt")
  532. {
  533. year = a[0];
  534. month = a[1];
  535. day = a[2];
  536. hour = parseInt(a[3]);
  537. minute = parseInt(a[4]);
  538. second = parseInt(a[5]);
  539. }
  540. else if (type == "d")
  541. {
  542. year = a[0];
  543. month = a[1];
  544. day = a[2];
  545. }
  546. else if (type == "t")
  547. {
  548. hour = parseInt(a[0]);
  549. minute = parseInt(a[1]);
  550. second = parseInt(a[2]);
  551. }
  552. }
  553. selectedOption = selectCtrl.options[selectCtrl.selectedIndex];
  554. if (type == "dt")
  555. {
  556. var dt = new Date(year, month - 1, day, hour, minute, second);
  557. textCtrl.value = GLDT(dt, true, false);
  558. hiddenCtrl.value = "Date(";
  559. hiddenCtrl.value += year;
  560. hiddenCtrl.value += ",";
  561. hiddenCtrl.value += month;
  562. hiddenCtrl.value += ",";
  563. hiddenCtrl.value += day;
  564. hiddenCtrl.value += ")";
  565. if (ampmCtrl != undefined)
  566. {
  567. if (hour == 0 || hour == 12)
  568. hourCtrl.selectedIndex = 11;
  569. else if (hour > 12)
  570. hourCtrl.selectedIndex = hour - 12 - 1;
  571. else
  572. hourCtrl.selectedIndex = hour - 1;
  573. }
  574. else
  575. hourCtrl.selectedIndex = hour;
  576. minuteCtrl.selectedIndex = minute;
  577. secondCtrl.selectedIndex = second;
  578. if (ampmCtrl != null)
  579. {
  580. if ( hour >= 12)
  581. ampmCtrl.selectedIndex = 1;
  582. else
  583. ampmCtrl.selectedIndex = 0;
  584. }
  585. }
  586. else if (type == "d")
  587. {
  588. var dt = new Date(year, month - 1, day, 0, 0, 0);
  589. textCtrl.value = GLDT(dt, true, false);
  590. hiddenCtrl.value = "Date(";
  591. hiddenCtrl.value += year;
  592. hiddenCtrl.value += ",";
  593. hiddenCtrl.value += month;
  594. hiddenCtrl.value += ",";
  595. hiddenCtrl.value += day;
  596. hiddenCtrl.value += ")";
  597. }
  598. else if (type == "t")
  599. {
  600. if (ampmCtrl != null)
  601. {
  602. if (hour == 0 || hour == 12)
  603. hourCtrl.selectedIndex = 11;
  604. else if (hour > 12)
  605. hourCtrl.selectedIndex = hour - 12 - 1;
  606. else
  607. hourCtrl.selectedIndex = hour - 1;
  608. }
  609. else
  610. hourCtrl.selectedIndex = hour;
  611. minuteCtrl.selectedIndex = minute;
  612. secondCtrl.selectedIndex = second;
  613. if (ampmCtrl != null)
  614. {
  615. if ( hour >= 12)
  616. ampmCtrl.selectedIndex = 1;
  617. else
  618. ampmCtrl.selectedIndex = 0;
  619. }
  620. }
  621. else
  622. {
  623. textCtrl.value = selectedOption.value;
  624. }
  625. if (selectCtrl.options[0].value == CR_USE_VALUE)
  626. {
  627. // always show USE_VALUE as selectedItem for the dropdownlist
  628. selectCtrl.selectedIndex = 0;
  629. }
  630. }
  631. ///////////////////////////////////
  632. // remove value from listbox where multiple value prompts are supported
  633. function removeFromListBox ( inForm, paramName )
  634. {
  635. lbox = inForm[paramName + "ListBox"];
  636. for ( var idx = 0; idx < lbox.options.length; )
  637. {
  638. if ( lbox.options[idx].selected )
  639. lbox.options[idx] = null;
  640. else
  641. idx++;
  642. }
  643. }
  644. /////////////////////////////////////
  645. // sets prompt value into the hidden form field in proper format so that it can be submitted
  646. function setPromptSingleValue (inform, type, paramName)
  647. {
  648. //alert("SetPromptSingleValue");
  649. hiddenField = inform[promptPrefix + paramName];
  650. value = "";
  651. if ( inform[paramName + "NULL"] != null && inform[paramName + "NULL"].checked )
  652. {
  653. value = CR_NULL; //NULL is a literal for, uhmm.. a NULL
  654. hiddenField.value = value;
  655. return true;
  656. }
  657. // if defaultdropdownlist selected item is _crNULL_, put it into multiple listbox
  658. var dropDownListName = paramName + "SelectValue";
  659. var dropDownListCtrl = inform[dropDownListName];
  660. if (dropDownListCtrl != null)
  661. {
  662. if (dropDownListCtrl.options[dropDownListCtrl.selectedIndex].value == CR_NULL)
  663. {
  664. hiddenField.value = CR_NULL;
  665. return true;
  666. }
  667. }
  668. discreteVal = inform[paramName + "DiscreteValue"];
  669. if (discreteVal != undefined || inform[paramName + "DiscreteValueHour"] != undefined)
  670. { // editable
  671. if ( type == "dt" || type == "d" || type == "t")
  672. {
  673. var hiddenCtrl = inform[paramName+"DiscreteValueHidden"];
  674. var hourCtrl = inform[paramName+"DiscreteValueHour"];
  675. var minuteCtrl = inform[paramName + "DiscreteValueMinute"];
  676. var secondCtrl = inform[paramName + "DiscreteValueSecond"];
  677. var ampmCtrl = inform[paramName + "DiscreteValueAMPM"];
  678. value = DateTimePromptValueHelper(type, hiddenCtrl, hourCtrl, minuteCtrl, secondCtrl, ampmCtrl);
  679. if (value.length == 0) return false;
  680. }
  681. else
  682. value = discreteVal.value;
  683. }
  684. else
  685. {
  686. // not editable
  687. discreteVal = inform[paramName+"SelectValue"];
  688. value = discreteVal.options[discreteVal.selectedIndex].value;
  689. //alert(value);
  690. }
  691. if ( ! checkSingleValue ( value, type ) ) {
  692. if (discreteVal.focus && discreteVal.type.toLowerCase ())
  693. discreteVal.focus ();
  694. return false;
  695. }
  696. else
  697. value = encodePrompt(value);
  698. hiddenField.value = value;
  699. return true;
  700. }
  701. /////////////////////////////////////
  702. // sets prompt value for a range into the hidden form field in proper format so that it can be submitted
  703. function setPromptRangeValue (inform, type, paramName)
  704. {
  705. hiddenField = inform[promptPrefix + paramName];
  706. if ( inform[paramName + "NULL"] != null && inform[paramName + "NULL"].checked )
  707. {
  708. value = CR_NULL; //NULL is a literal for, uhmm.. a NULL
  709. hiddenField.value = value;
  710. return true;
  711. }
  712. // if both defaultdropdownlists selected item is _crNULL_, put it into hiddenfield
  713. // if one of them is _crNULL_, it is not a valid option, do nothing
  714. var lowerDropDownListName = paramName + "SelectLowerBound";
  715. var upperDropDownListName = paramName + "SelectUpperBound";
  716. var lowerDropDownListCtrl = inform[lowerDropDownListName];
  717. var upperDropDownListCtrl = inform[upperDropDownListName];
  718. if (lowerDropDownListCtrl != null && upperDropDownListCtrl != null)
  719. {
  720. if (lowerDropDownListCtrl.options[lowerDropDownListCtrl.selectedIndex].value == CR_NULL
  721. && upperDropDownListCtrl.options[upperDropDownListCtrl.selectedIndex].value == CR_NULL)
  722. {
  723. hiddenField.value = "_crNULL_";
  724. return true;
  725. }
  726. else if (lowerDropDownListCtrl.options[lowerDropDownListCtrl.selectedIndex].value == CR_NULL
  727. || upperDropDownListCtrl.options[upperDropDownListCtrl.selectedIndex].value == CR_NULL)
  728. {
  729. alert(L_BadValue);
  730. return false;
  731. }
  732. }
  733. lowerOptions = inform[paramName + "SelectLowerOptions"];
  734. upperOptions = inform[paramName + "SelectUpperOptions"];
  735. lowerBound = inform[paramName + "LowerBound"];
  736. upperBound = inform[paramName + "UpperBound"];
  737. lowerBoundHidden = inform[paramName + "LowerBoundHidden"];
  738. upperBoundHidden = inform[paramName + "UpperBoundHidden"];
  739. lowerBoundDropdown = inform[paramName + "SelectLowerBound"];
  740. upperBoundDropdown = inform[paramName + "SelectUpperBound"];
  741. var editables = true;
  742. //handle select box, not text box case
  743. if (lowerBound == undefined && inform[paramName + "LowerBound" + "Hour"] == undefined)
  744. {
  745. editables = false;
  746. lowerBound = lowerBoundDropdown;
  747. upperBound = upperBoundDropdown;
  748. lowerBound = lowerBound.options[lowerBound.selectedIndex];
  749. upperBound = upperBound.options[upperBound.selectedIndex];
  750. }
  751. lowerUnBounded = (lowerOptions.selectedIndex == (lowerOptions.length - 1));
  752. upperUnBounded = (upperOptions.selectedIndex == (upperOptions.length - 1));
  753. lowerChecked = (lowerOptions.selectedIndex == 0);
  754. upperChecked = (upperOptions.selectedIndex == 0);
  755. uvalue = lvalue = "";
  756. if ( ! lowerUnBounded )
  757. {
  758. if ( (type == "dt" || type == "d" || type == "t") && (editables))
  759. {
  760. var lhourCtrl = inform[paramName+"LowerBound" + "Hour"];
  761. var lminuteCtrl = inform[paramName + "LowerBound" + "Minute"];
  762. var lsecondCtrl = inform[paramName + "LowerBound" + "Second"];
  763. var lampmCtrl = inform[paramName + "LowerBound" + "AMPM"];
  764. lvalue = DateTimePromptValueHelper(type, lowerBoundHidden, lhourCtrl, lminuteCtrl, lsecondCtrl, lampmCtrl);
  765. if (lvalue.length == 0) return false;
  766. }
  767. else
  768. lvalue = lowerBound.value;
  769. if ( ! checkSingleValue ( lvalue, type ) ) {
  770. if (lowerBound != undefined && lowerBound.focus)
  771. lowerBound.focus();
  772. return false;
  773. }
  774. }
  775. if ( ! upperUnBounded )
  776. {
  777. if (( type == "dt" || type == "d" || type == "t") && (editables))
  778. {
  779. var uhourCtrl = inform[paramName+"UpperBound" + "Hour"];
  780. var uminuteCtrl = inform[paramName + "UpperBound" + "Minute"];
  781. var usecondCtrl = inform[paramName + "UpperBound" + "Second"];
  782. var uampmCtrl = inform[paramName + "UpperBound" + "AMPM"];
  783. uvalue = DateTimePromptValueHelper(type, upperBoundHidden, uhourCtrl, uminuteCtrl, usecondCtrl, uampmCtrl);
  784. if (uvalue.length == 0) return false;
  785. }
  786. else
  787. uvalue = upperBound.value;
  788. if ( ! checkSingleValue ( uvalue, type ) ) {
  789. if (upperBound != undefined && upperBound.focus)
  790. upperBound.focus();
  791. return false;
  792. }
  793. }
  794. value = lowerUnBounded ? "{" : lowerChecked ? "[" : "(";
  795. if ( ! lowerUnBounded )
  796. value += encodePrompt(lvalue);
  797. value += "_crRANGE_"
  798. if ( ! upperUnBounded )
  799. value += encodePrompt(uvalue);
  800. value += upperUnBounded ? "}" : upperChecked ? "]" : ")";
  801. if ( debug )
  802. alert (value);
  803. if (lowerUnBounded && upperUnBounded)
  804. {
  805. alert(L_BadBound);
  806. return false;
  807. }
  808. if (!lowerUnBounded && !upperUnBounded && !checkRangeValue(lvalue, uvalue, type))
  809. {
  810. return false;
  811. }
  812. hiddenField.value = value;
  813. return true;
  814. }
  815. /////////////////////////////////////
  816. // sets prompt value into the hidden form field in proper format so that it can be submitted
  817. function setPromptMultipleValue (inform, type, paramName)
  818. {
  819. hiddenField = inform[promptPrefix + paramName];
  820. values = inform[paramName + "ListBox"].options;
  821. if ( values.length == 0 )
  822. {
  823. value = "_crEMPTY_"; //if value is empty, set to empty string
  824. }
  825. else
  826. {
  827. value = "";
  828. for ( idx = 0; idx < values.length; ++idx )
  829. {
  830. // first value could be empty string, then chcking value.length != 0 could miss one empty string
  831. if ( idx != 0 )
  832. value += "_crMULT_"
  833. value += values[idx].value;
  834. }
  835. }
  836. if ( debug )
  837. alert (value);
  838. hiddenField.value = value;
  839. //NOTE: we'll always return true as the validation is done before values are added to select box
  840. return true;
  841. }
  842. ///////////////////////////////////////
  843. // check and alert user about any errors based on type of prompt
  844. var regNumber = /^(\+|-)?((\d+(\.|,| |\u00A0)?\d*)+|(\d*(\.|,| |\u00A0)?\d+)+)$/
  845. var regCurrency = regNumber;
  846. 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)) *\)$/
  847. 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 *\)$/
  848. var regTime = /^(T|t)(I|i)(M|m)(E|e) *\( *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
  849. function checkSingleValue ( value, type )
  850. {
  851. if ( type == 'n' && ! regNumber.test ( value ) )
  852. {
  853. alert ( L_BadNumber );
  854. return false;
  855. }
  856. else if ( type == 'c' && ! regCurrency.test ( value ) )
  857. {
  858. alert ( L_BadCurrency );
  859. return false;
  860. }
  861. /*else if ( type == 'd' && ! regDate.test ( value ) )
  862. {
  863. alert ( L_BadDate );
  864. return false;
  865. }
  866. else if ( type == "dt" && ! regDateTime.test ( value ) )
  867. {
  868. alert ( L_BadDateTime );
  869. return false;
  870. }
  871. else if ( type == 't' && ! regTime.test ( value ) )
  872. {
  873. alert ( L_BadTime );
  874. return false;
  875. }*/
  876. //by default let it go...
  877. return true;
  878. }
  879. function checkRangeValue (fvalue, tvalue, type)
  880. {
  881. // determine if the start is smaller than the end
  882. if ((type == "n") || (type == "c"))
  883. {
  884. // Is a number, or currency
  885. if (eval (DelocalizeNum (fvalue)) > eval (DelocalizeNum (tvalue)))
  886. {
  887. alert(L_RangeError);
  888. return false;
  889. }
  890. }
  891. else if (type == "d"){
  892. //Is a Date
  893. if (eval("new " + fvalue) > eval("new " + tvalue)){
  894. alert(L_RangeError);
  895. return false;
  896. }
  897. }else if (type == "t"){
  898. //Is a Time
  899. var comp1 = eval("new Date(0,0,0," + fvalue.substring(fvalue.indexOf('(') + 1, fvalue.indexOf(')') + 1));
  900. var comp2 = eval("new Date(0,0,0," + tvalue.substring(tvalue.indexOf('(') + 1, tvalue.indexOf(')') + 1));
  901. if (comp1 > comp2){
  902. alert(L_RangeError);
  903. return false;
  904. }
  905. }else if (type == "dt"){
  906. //Is a DateTime
  907. var comp1 = eval("new Date" + fvalue.substring(8, fvalue.length));
  908. var comp2 = eval("new Date" + tvalue.substring(8, tvalue.length));
  909. if (comp1 > comp2){
  910. alert(L_RangeError);
  911. return false;
  912. }
  913. }
  914. else if (type == "text")
  915. {
  916. // is a string
  917. if (fvalue.toLowerCase() > tvalue.toLowerCase())
  918. {
  919. alert(L_RangeError);
  920. return false;
  921. }
  922. }
  923. // otherwise, let it go
  924. return true;
  925. }
  926. function DelocalizeNum(value)
  927. {
  928. // trim spaces first
  929. var numStr = value.replace(/\s/g, "");
  930. // get rid of grouping first
  931. var tempStr = "";
  932. var index = numStr.indexOf(groupSep);
  933. while (index != -1)
  934. {
  935. tempStr += numStr.substr(0, index);
  936. numStr = numStr.substr(index + groupSep.length, numStr.length - index - groupSep.length);
  937. index = numStr.indexOf(groupSep);
  938. }
  939. tempStr += numStr;
  940. index = tempStr.indexOf(decimalSep);
  941. var neutralStr = "";
  942. if (index != -1)
  943. {
  944. neutralStr += tempStr.substr(0, index);
  945. neutralStr += ".";
  946. neutralStr += tempStr.substr(index + decimalSep.length, tempStr.length - index - decimalSep.length);
  947. }
  948. else
  949. {
  950. neutralStr = tempStr;
  951. }
  952. return neutralStr;
  953. }
  954. // Disable enter key checking for multibyte languages since the enter key is used for committing characters
  955. var isEnabledLanguage = (! ((userLanguage == "ja") || (userLanguage == "ko") || (userLanguage == "zh")) )
  956. var isNav = (navigator.appName == "Netscape");
  957. if (isEnabledLanguage)
  958. {
  959. if(isNav) {
  960. document.captureEvents(Event.KEYUP);
  961. }
  962. document.onkeyup = checkValue;
  963. }
  964. function checkValue(evt) {
  965. var buttonVal = "";
  966. if (isNav) {
  967. if (evt.which == 13 && (evt.target.type == "text" || evt.target.type == "password")) {
  968. buttonVal = evt.target.value;
  969. }
  970. } else {
  971. if (window.event.keyCode == 13 && (window.event.srcElement.type == "text" || window.event.srcElement.type == "password")) {
  972. buttonVal = window.event.srcElement.value;
  973. }
  974. }
  975. if (buttonVal != "") {
  976. submitParameterValues ();
  977. }
  978. }