You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1111 lines
31 KiB
1111 lines
31 KiB
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
|
|
|
//////////////////////////////
|
|
// FOR DEBUGGING ONLY
|
|
var debug = false;
|
|
function dumpFormFields(formName)
|
|
{
|
|
theForm = document.forms[formName];
|
|
for ( idx = 0; idx < theForm.elements.length; ++idx )
|
|
alert ( theForm.elements[idx].name + " - " + theForm.elements[idx].value );
|
|
}
|
|
|
|
//////////////////////////////
|
|
// GLOBAL VAR
|
|
var isJava = false; // do encodeURIComponent for Java only
|
|
|
|
var isNetscape = navigator.appName.indexOf("Netscape") != -1;
|
|
|
|
var LEFT_ARROW_KEY = 37;
|
|
var RIGHT_ARROW_KEY = 39;
|
|
var ENTER_KEY = 13;
|
|
|
|
var DateTimeFormatSetting = {
|
|
"datePattern":"Y-M-D",
|
|
"isTwoDigitMonth":true,
|
|
"isTwoDigitDay":true,
|
|
"dateRegex":null,
|
|
"dateTimeRegex":null
|
|
};
|
|
|
|
///////////////////////////////
|
|
// functions for DateTimeFormatSetting
|
|
|
|
function promptengine_getDatePattern()
|
|
{
|
|
return DateTimeFormatSetting.datePattern;
|
|
}
|
|
|
|
function promptengine_setDatePattern(pattern)
|
|
{
|
|
DateTimeFormatSetting.datePattern = pattern;
|
|
}
|
|
|
|
function promptengine_getIsTwoDigitMonth()
|
|
{
|
|
return DateTimeFormatSetting.isTwoDigitMonth;
|
|
}
|
|
|
|
function promptengine_setIsTwoDigitMonth(isTwoDigitMonth)
|
|
{
|
|
DateTimeFormatSetting.isTwoDigitMonth = isTwoDigitMonth;
|
|
}
|
|
|
|
function promptengine_getIsTwoDigitDay()
|
|
{
|
|
return DateTimeFormatSetting.isTwoDigitDay;
|
|
}
|
|
|
|
function promptengine_setIsTwoDigitDay(isTwoDigitDay)
|
|
{
|
|
DateTimeFormatSetting.isTwoDigitDay = isTwoDigitDay;
|
|
}
|
|
|
|
function promptengine_getDateRegex()
|
|
{
|
|
return DateTimeFormatSetting.dateRegex;
|
|
}
|
|
|
|
function promptengine_setDateRegex(dateRegex)
|
|
{
|
|
DateTimeFormatSetting.dateRegex = dateRegex;
|
|
}
|
|
|
|
function promptengine_getDateTimeRegex()
|
|
{
|
|
return DateTimeFormatSetting.dateTineRegex;
|
|
}
|
|
|
|
function promptengine_setDateTimeRegex(dateTineRegex)
|
|
{
|
|
DateTimeFormatSetting.dateTineRegex = dateTineRegex;
|
|
}
|
|
|
|
///////////////////////////////
|
|
// properly encode prompt values
|
|
function promptengine_encodePrompt (prompt)
|
|
{
|
|
if (isJava)
|
|
{
|
|
return encodeURIComponent(prompt);
|
|
}
|
|
else
|
|
{
|
|
return promptengine_urlEncode(prompt);
|
|
}
|
|
}
|
|
|
|
////////////////////////////////
|
|
// add number, currency, string from dropdown/textbox to list box
|
|
// where multiple prompt values are supported
|
|
function promptengine_addDiscreteValue (
|
|
form,
|
|
type ,
|
|
promptID)
|
|
{
|
|
var widget, obj;
|
|
widget = obj = form[promptID + "DiscreteValue"];
|
|
if ( obj.type && obj.type.toLowerCase() != "text" &&
|
|
obj.type.toLowerCase() != "hidden" && obj.type.toLowerCase() != "password")
|
|
{
|
|
//select box not a textbox
|
|
obj = obj.options[obj.selectedIndex];
|
|
}
|
|
if ( ! promptengine_checkValue ( obj.value, type ) )
|
|
{
|
|
if (widget.focus && widget.type.toLowerCase() != "hidden")
|
|
widget.focus();
|
|
return false;
|
|
}
|
|
promptValue = obj.value;
|
|
displayString = ( obj.text ) ? obj.text : obj.value;
|
|
promptEntry = new Option(displayString,promptValue,false,false);
|
|
theList = form[promptID + "ListBox"];
|
|
theList.options[theList.length] = promptEntry;
|
|
if (widget.focus && widget.type.toLowerCase() != "hidden" && !widget.disabled)
|
|
widget.focus ();
|
|
if ( widget.select )
|
|
widget.select ();
|
|
if ( widget.type.toLowerCase != "text" &&
|
|
widget.type.toLowerCase != "hidden" &&
|
|
widget.type.toLowerCase != "password")
|
|
if ( widget.selectedIndex < widget.length - 1 )
|
|
widget.selectedIndex = widget.selectedIndex + 1; //... or move to next selection in listbox
|
|
}
|
|
|
|
function promptengine_deselectAllItems(listbox)
|
|
{
|
|
for (var i = 0; i < listbox.length; i++)
|
|
listbox.options[i].selected = false;
|
|
}
|
|
|
|
function promptengine_addAvailableItem(
|
|
availableList,
|
|
index,
|
|
selectedList)
|
|
{
|
|
for (var i = 0; i < selectedList.length; i++)
|
|
{
|
|
if (selectedList.options[i].value == availableList.options[index].value &&
|
|
selectedList.options[i].text == availableList.options[index].text)
|
|
{
|
|
selectedList.options[i].selected = true;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
var promptEntry = new Option(availableList.options[index].text, availableList.options[index].value, false, true);
|
|
selectedList.options[selectedList.length] = promptEntry;
|
|
return true;
|
|
}
|
|
|
|
////////////////////////////////
|
|
// add number, currency, string from available list box to selected list box
|
|
// where multiple prompt values are supported
|
|
function promptengine_addValueFromPickList(
|
|
form,
|
|
type,
|
|
promptID)
|
|
{
|
|
var AvailableList, SelectedList;
|
|
AvailableList = form[promptID + "AvailableList"];
|
|
SelectedList = form[promptID + "ListBox"];
|
|
|
|
promptengine_deselectAllItems(SelectedList);
|
|
|
|
var changed = false;
|
|
|
|
var lastSelected = -1;
|
|
for (var i = 0; i < AvailableList.length; i++)
|
|
{
|
|
if (AvailableList.options[i].selected)
|
|
{
|
|
var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
|
|
if (added == true)
|
|
changed = true;
|
|
lastSelected = i;
|
|
}
|
|
}
|
|
|
|
// set focus to the next item on the available list
|
|
if (lastSelected++ >= 0 && lastSelected < AvailableList.length)
|
|
{
|
|
promptengine_deselectAllItems(AvailableList);
|
|
AvailableList.options[lastSelected].selected = true;
|
|
}
|
|
|
|
return changed;
|
|
}
|
|
|
|
////////////////////////////////
|
|
// add all number, currency, string from available list box to selected list box
|
|
// where multiple prompt values are supported
|
|
function promptengine_addAllValues(
|
|
form,
|
|
type,
|
|
promptID)
|
|
{
|
|
var AvailableList, SelectedList;
|
|
AvailableList = form[promptID + "AvailableList"];
|
|
SelectedList = form[promptID + "ListBox"];
|
|
|
|
promptengine_deselectAllItems(SelectedList);
|
|
|
|
var changed = false;
|
|
for (var i = 0; i < AvailableList.length; i++)
|
|
{
|
|
var added = promptengine_addAvailableItem(AvailableList, i, SelectedList);
|
|
if (added == true)
|
|
changed = true;
|
|
}
|
|
|
|
return changed;
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// adds Range prompt to listbox where multiple values are supported
|
|
function promptengine_addRangeValue (
|
|
form,
|
|
type ,
|
|
promptID )
|
|
{
|
|
var lowerBoundPickList = form[promptID + "SelectLowerRangeValue"];
|
|
var upperBoundPickList = form[promptID + "SelectUpperRangeValue"];
|
|
|
|
lowerBound = form[promptID + "LowerBound"];
|
|
upperBound = form[promptID + "UpperBound"];
|
|
//handle select box, not text box case
|
|
if ( lowerBound.type.toLowerCase () != "text" &&
|
|
lowerBound.type.toLowerCase () != "hidden" &&
|
|
lowerBound.type.toLowerCase () != "password" ) //either upper or lower, doesn't matter
|
|
{
|
|
lowerBound = lowerBound.options[lowerBound.selectedIndex];
|
|
upperBound = upperBound.options[upperBound.selectedIndex];
|
|
}
|
|
|
|
lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
|
|
upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
|
|
lvalue = uvalue = "";
|
|
|
|
if ( ! lowerUnBounded )
|
|
{
|
|
if ( ! promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
|
|
if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
|
|
lowerBound.focus ();
|
|
return false;
|
|
}
|
|
lvalue = lowerBound.value;
|
|
}
|
|
if ( ! upperUnBounded )
|
|
{
|
|
if ( ! promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
|
|
if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
|
|
upperBound.focus ();
|
|
return false;
|
|
}
|
|
uvalue = upperBound.value;
|
|
}
|
|
|
|
var ldisplay = "";
|
|
var udisplay = "";
|
|
|
|
var found = false;
|
|
if (lowerBoundPickList != null && lvalue != null && lvalue.length > 0)
|
|
{
|
|
var cItems = lowerBoundPickList.length;
|
|
for (var item = 0; item < cItems; item++)
|
|
{
|
|
var value = lowerBoundPickList.options[item].value;
|
|
if (value != null && value.length > 0 && value == lvalue)
|
|
{
|
|
ldisplay = lowerBoundPickList.options[item].text;
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!found)
|
|
ldisplay = (lowerBound.text && !lowerUnBounded) ? lowerBound.text : lvalue;
|
|
|
|
found = false;
|
|
if (upperBoundPickList != null && uvalue != null && uvalue.length > 0)
|
|
{
|
|
var cItems = upperBoundPickList.length;
|
|
for (var item = 0; item < cItems; item++)
|
|
{
|
|
var value = upperBoundPickList.options[item].value;
|
|
if (value != null && value == uvalue)
|
|
{
|
|
udisplay = upperBoundPickList.options[item].text;
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!found)
|
|
udisplay = (upperBound.text && !upperUnBounded) ? upperBound.text : uvalue;
|
|
|
|
lowerChecked = form[promptID + "LowerCheck"].checked;
|
|
upperChecked = form[promptID + "UpperCheck"].checked;
|
|
|
|
// value for showing in the list box only, no need encode here
|
|
value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
|
|
if ( ! lowerUnBounded ) //unbounded is empty string not quoted empty string (e.g not "_crEMPTY_")
|
|
value += (lvalue);
|
|
value += "_crRANGE_"
|
|
if ( ! upperUnBounded )
|
|
value += (uvalue);
|
|
value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
|
|
if ( debug ) alert (value);
|
|
|
|
display = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
|
|
display += ldisplay;
|
|
display += " .. "
|
|
display += udisplay;
|
|
display += (upperChecked && ! upperUnBounded ) ? "]" : ")";
|
|
|
|
promptEntry = new Option(display,value,false,false);
|
|
theList = form[promptID + "ListBox"];
|
|
|
|
// search the list/select box for the new option, if the returned index is -1, i.e., no such option, add it
|
|
// otherwise, highlight that option
|
|
var idx = promptengine_findOptionInList(theList, value);
|
|
if (idx > -1)
|
|
theList.selectedIndex = idx;
|
|
else
|
|
theList.options[theList.length] = promptEntry;
|
|
|
|
return true;
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// search the given select object for the given option value, and returns its index.
|
|
function promptengine_findOptionInList(selectObj, optionValue)
|
|
{
|
|
if (selectObj == null || optionValue == null || optionValue == "")
|
|
return -1;
|
|
|
|
for (var i = 0; i < selectObj.options.length; i++)
|
|
{
|
|
if (selectObj.options[i].value == optionValue)
|
|
return i;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// disable check boxes / dropdowns / textboxes based on user selection on the range parameters
|
|
function promptengine_onNoBoundCheckClicked(
|
|
form,
|
|
promptID,
|
|
lowOrUpBound)
|
|
{
|
|
if (lowOrUpBound == 0) {
|
|
if (form[promptID + "NoLBoundCheck"].checked) {
|
|
form[promptID + "NoUBoundCheck"].disabled = true;
|
|
form[promptID + "LowerCheck"].disabled = true;
|
|
form[promptID + "LowerBound"].disabled = true;
|
|
if (form[promptID + "SelectLowerRangeValue"] != null)
|
|
form[promptID + "SelectLowerRangeValue"].disabled = true;
|
|
}
|
|
else {
|
|
form[promptID + "NoUBoundCheck"].disabled = false;
|
|
form[promptID + "LowerCheck"].disabled = false;
|
|
form[promptID + "LowerBound"].disabled = false;
|
|
if (form[promptID + "SelectLowerRangeValue"] != null)
|
|
form[promptID + "SelectLowerRangeValue"].disabled = false;
|
|
}
|
|
} else if (lowOrUpBound == 1) {
|
|
if (form[promptID + "NoUBoundCheck"].checked) {
|
|
form[promptID + "NoLBoundCheck"].disabled = true;
|
|
form[promptID + "UpperCheck"].disabled = true;
|
|
form[promptID + "UpperBound"].disabled = true;
|
|
if (form[promptID + "SelectUpperRangeValue"] != null)
|
|
form[promptID + "SelectUpperRangeValue"].disabled = true;
|
|
} else {
|
|
form[promptID + "NoLBoundCheck"].disabled = false;
|
|
form[promptID + "UpperCheck"].disabled = false;
|
|
form[promptID + "UpperBound"].disabled = false;
|
|
if (form[promptID + "SelectUpperRangeValue"] != null)
|
|
form[promptID + "SelectUpperRangeValue"].disabled = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// disable text boxes / list boxes based on whether setNull is checked
|
|
function promptengine_onSetNullCheckClicked(
|
|
form,
|
|
promptID)
|
|
{
|
|
if (form[promptID + "NULL"].checked)
|
|
{
|
|
if (form[promptID + "DiscreteValue"] != null)
|
|
form[promptID + "DiscreteValue"].disabled = true;
|
|
if (form[promptID + "SelectValue"] != null)
|
|
form[promptID + "SelectValue"].disabled = true;
|
|
}
|
|
else
|
|
{
|
|
if (form[promptID + "DiscreteValue"] != null)
|
|
form[promptID + "DiscreteValue"].disabled = false;
|
|
if (form[promptID + "SelectValue"] != null)
|
|
form[promptID + "SelectValue"].disabled = false;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////
|
|
// puts "select" value into text box for an editable prompt which also has defaults
|
|
function promptengine_selectValue(
|
|
form,
|
|
selectCtrl,
|
|
textCtrl)
|
|
{
|
|
// If no selection, return unchanged.
|
|
if(form[selectCtrl].selectedIndex < 0)
|
|
return false;
|
|
|
|
selectedOption = form[selectCtrl].options[form[selectCtrl].selectedIndex];
|
|
if (selectedOption.value == null && form[textCtrl].value == null)
|
|
return false;
|
|
|
|
var changed = true;
|
|
if (selectedOption.value == form[textCtrl].value)
|
|
changed = false;
|
|
|
|
form[textCtrl].value = selectedOption.value;
|
|
return changed;
|
|
}
|
|
|
|
function promptengine_hasValueInTextBox(
|
|
form,
|
|
textboxID)
|
|
{
|
|
if (form[textboxID].value == null)
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
/////////////////////////////////////////
|
|
// set cascading prompt id into value field.
|
|
function promptengine_setCascadingPID(
|
|
form,
|
|
valueID,
|
|
promptID)
|
|
{
|
|
valueField = form[valueID];
|
|
|
|
curVal = valueField.value;
|
|
|
|
if (curVal.length > 0)
|
|
curVal += "&";
|
|
curVal += "cascadingPID" + "=" + promptID;
|
|
|
|
if ( debug )
|
|
alert (curVal);
|
|
|
|
valueField.value = curVal;
|
|
return true;
|
|
}
|
|
|
|
/////////////////////////////////////////////////
|
|
// remove selected values from multi-value prompt
|
|
function promptengine_removeValue(
|
|
form,
|
|
promptID)
|
|
{
|
|
var lbox = form[promptID + "ListBox"];
|
|
var changed = false;
|
|
|
|
var lastSelected = -1;
|
|
for ( var idx = 0; idx < lbox.options.length; )
|
|
{
|
|
if ( lbox.options[idx].selected )
|
|
{
|
|
lbox.options[idx] = null;
|
|
changed = true;
|
|
lastSelected = idx;
|
|
}
|
|
else
|
|
idx++;
|
|
}
|
|
|
|
if (lastSelected >= 0 && lastSelected < lbox.length)
|
|
{
|
|
// highlight the next item
|
|
promptengine_deselectAllItems(lbox);
|
|
lbox.options[lastSelected].selected = true;
|
|
}
|
|
else if (lastSelected == lbox.length && lastSelected > 0)
|
|
{
|
|
// highlight the last item
|
|
promptengine_deselectAllItems(lbox);
|
|
lbox.options[lastSelected - 1].selected = true;
|
|
}
|
|
|
|
return changed;
|
|
}
|
|
|
|
function promptengine_onRemoveValue(
|
|
form,
|
|
promptID)
|
|
{
|
|
promptengine_removeValue(form, promptID);
|
|
}
|
|
|
|
/////////////////////////////////////////////////
|
|
// remove all values from multi-value prompt
|
|
function promptengine_removeAllValues(
|
|
form,
|
|
promptID)
|
|
{
|
|
var lbox = form[promptID + "ListBox"];
|
|
|
|
var changed = false;
|
|
|
|
if (lbox.options.length > 0)
|
|
changed = true;
|
|
|
|
for ( var idx = 0; idx < lbox.options.length; )
|
|
{
|
|
lbox.options[idx] = null;
|
|
}
|
|
|
|
return changed;
|
|
}
|
|
|
|
function promptengine_onRemoveAllValues(
|
|
form,
|
|
promptID)
|
|
{
|
|
promptengine_removeAllValues(form, promptID);
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// update hidden value field with encoded value
|
|
function promptengine_updateValueField (
|
|
form,
|
|
valueID,
|
|
promptID,
|
|
value)
|
|
{
|
|
valueField = form[valueID];
|
|
|
|
curVal = valueField.value;
|
|
|
|
if (curVal.length > 0)
|
|
curVal += "&";
|
|
curVal += promptID + "=" + value;
|
|
|
|
if ( debug )
|
|
alert (curVal);
|
|
|
|
valueField.value = curVal;
|
|
|
|
return true;
|
|
}
|
|
|
|
///////////////////////////////////////
|
|
// reset hidden value field
|
|
function promptengine_resetValueField (
|
|
form,
|
|
valueID)
|
|
{
|
|
valueField = form[valueID];
|
|
valueField.value = "";
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// sets prompt value into the hidden form field in proper format so that it can be submitted
|
|
function promptengine_updateDiscreteValue (
|
|
form,
|
|
valueID,
|
|
promptID,
|
|
type,
|
|
checkValue)
|
|
{
|
|
var value = "";
|
|
|
|
if (form[promptID + "NULL"] != null &&
|
|
form[promptID + "NULL"].checked )
|
|
{
|
|
value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
|
|
}
|
|
else
|
|
{
|
|
valueField = form[promptID + "DiscreteValue"];
|
|
|
|
if (valueField.type.toLowerCase () != "text" &&
|
|
valueField.type.toLowerCase () != "hidden" &&
|
|
valueField.type.toLowerCase () != "password")
|
|
{
|
|
value = valueField.options[valueField.selectedIndex].value;
|
|
}
|
|
else
|
|
{
|
|
value = valueField.value;
|
|
}
|
|
|
|
if ( checkValue && !promptengine_checkValue ( value, type ) )
|
|
{
|
|
if (valueField.focus)
|
|
{
|
|
if(valueField.type.toLowerCase () != "hidden")
|
|
valueField.focus ();
|
|
else
|
|
{
|
|
var valueSelectField = form[promptID + "SelectValue"];
|
|
if(valueSelectField && valueSelectField.focus)
|
|
valueSelectField.focus ();
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
value = promptengine_encodePrompt(value);
|
|
}
|
|
}
|
|
|
|
return promptengine_updateValueField(form, valueID, promptID, value);
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// sets prompt value for a range into the hidden form field in proper format so that it can be submitted
|
|
function promptengine_updateRangeValue (
|
|
form,
|
|
valueID,
|
|
promptID,
|
|
type,
|
|
checkValue)
|
|
{
|
|
if (form[promptID + "NULL"] != null &&
|
|
form[promptID + "NULL"].checked )
|
|
{
|
|
value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
|
|
}
|
|
else
|
|
{
|
|
lowerBound = form[promptID + "LowerBound"];
|
|
upperBound = form[promptID + "UpperBound"];
|
|
|
|
//handle select box, not text box case
|
|
if (lowerBound.type.toLowerCase () != "text" &&
|
|
lowerBound.type.toLowerCase () != "hidden" &&
|
|
lowerBound.type.toLowerCase () != "password") //either upper or lower, doesn't matter
|
|
{
|
|
lowerBound = lowerBound.options[lowerBound.selectedIndex];
|
|
upperBound = upperBound.options[upperBound.selectedIndex];
|
|
}
|
|
lowerUnBounded = form[promptID + "NoLBoundCheck"].checked;
|
|
upperUnBounded = form[promptID + "NoUBoundCheck"].checked;
|
|
lowerChecked = form[promptID + "LowerCheck"].checked;
|
|
upperChecked = form[promptID + "UpperCheck"].checked;
|
|
uvalue = lvalue = "";
|
|
|
|
if ( ! lowerUnBounded )
|
|
{
|
|
if ( checkValue && !promptengine_checkRangeBoundValue ( lowerBound.value, type ) ) {
|
|
if ( lowerBound.focus && lowerBound.type.toLowerCase () != "hidden")
|
|
lowerBound.focus();
|
|
return false;
|
|
}
|
|
lvalue = lowerBound.value;
|
|
}
|
|
if ( ! upperUnBounded )
|
|
{
|
|
if ( checkValue && !promptengine_checkRangeBoundValue ( upperBound.value, type ) ) {
|
|
if ( upperBound.focus && upperBound.type.toLowerCase () != "hidden")
|
|
upperBound.focus ();
|
|
return false;
|
|
}
|
|
uvalue = upperBound.value;
|
|
}
|
|
value = ( lowerChecked && ! lowerUnBounded ) ? "[" : "(";
|
|
if ( ! lowerUnBounded )
|
|
value += promptengine_encodePrompt(lvalue);
|
|
value += "_crRANGE_"
|
|
if ( ! upperUnBounded )
|
|
value += promptengine_encodePrompt(uvalue);
|
|
value += (upperChecked && ! upperUnBounded ) ? "]" : ")";
|
|
}
|
|
|
|
return promptengine_updateValueField(form, valueID, promptID, value);
|
|
}
|
|
|
|
/////////////////////////////////////
|
|
// sets prompt value into the hidden form field in proper format so that it can be submitted
|
|
function promptengine_updateMultiValue (
|
|
form,
|
|
valueID,
|
|
promptID,
|
|
type,
|
|
checkValue)
|
|
{
|
|
values = form[promptID + "ListBox"].options;
|
|
value = "";
|
|
|
|
if (form[promptID + "NULL"] != null &&
|
|
form[promptID + "NULL"].checked)
|
|
{
|
|
value = "_crNULL_"; //NULL is a literal for, uhmm.. a NULL
|
|
}
|
|
else
|
|
{
|
|
if ( values.length == 0 )
|
|
{
|
|
value = "_crEMPTY_"; //if value is empty, set to empty string
|
|
}
|
|
else
|
|
{
|
|
for ( i = 0; i < values.length; i++ )
|
|
{
|
|
// first value could be empty string, then chcking value.length != 0 could miss one empty string
|
|
if ( i != 0 )
|
|
value += "_crMULT_"
|
|
value += promptengine_encodePrompt(values[i].value);
|
|
}
|
|
}
|
|
}
|
|
|
|
//NOTE: we'll always return true as the validation is done before values are added to select box
|
|
return promptengine_updateValueField(form, valueID, promptID, value);
|
|
}
|
|
|
|
///////////////////////////////////////
|
|
// check and alert user about any errors based on type of prompt
|
|
var regNumber = /^(\+|-)?((\d+(\.|,|'| |\xA0)?\d*)+|(\d*(\.|,| |\xA0)?\d+)+)$/
|
|
var regCurrency = regNumber;
|
|
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)) *\)$/
|
|
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 *\)$/
|
|
var regTime = /^(T|t)(I|i)(M|m)(E|e) *\( *([0-1]?\d|2[0-3]) *, *[0-5]?\d *, *[0-5]?\d *\)$/
|
|
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 *$/
|
|
var regDateHTML = /^ *\d{4} *- *(0?[1-9]|1[0-2]) *- *((0?[1-9]|[1-2]\d)|3(0|1)) *$/
|
|
var regTimeHTML = /^ *([0-1]?\d|2[0-3]) *: *[0-5]?\d *: *[0-5]?\d *$/
|
|
|
|
function promptengine_getDateSpec()
|
|
{
|
|
var datePattern = promptengine_getDatePattern();
|
|
datePattern = datePattern.replace("Y", L_YYYY);
|
|
datePattern = datePattern.replace("M", L_MM);
|
|
datePattern = datePattern.replace("D", L_DD);
|
|
return datePattern;
|
|
}
|
|
|
|
function promptengine_checkValue (
|
|
value,
|
|
type )
|
|
{
|
|
if (value == null)
|
|
return false;
|
|
|
|
if (value == "_crNULL_")
|
|
return true;
|
|
|
|
if ( type == 'n' && ! regNumber.test ( value ) )
|
|
{
|
|
if (value.length > 0)
|
|
alert ( L_BadNumber );
|
|
else
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
|
|
return false;
|
|
}
|
|
else if ( type == 'c' && ! regCurrency.test ( value ) )
|
|
{
|
|
if (value.length > 0)
|
|
alert ( L_BadCurrency );
|
|
else
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
|
|
return false;
|
|
}
|
|
else if ( type == 'd' )
|
|
{
|
|
var regex = promptengine_getDateRegex();
|
|
if((regex == null || !regex.test(value)) && ! regDate.test ( value ) && !regDateHTML.test( value ))
|
|
{
|
|
if (value.length > 0)
|
|
{
|
|
var badDate = L_BadDate.replace("%1", promptengine_getDateSpec());
|
|
alert ( badDate );
|
|
}
|
|
else
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
return false;
|
|
}
|
|
}
|
|
else if ( type == "dt" )
|
|
{
|
|
var regex = promptengine_getDateTimeRegex();
|
|
if((regex == null || !regex.test(value)) && ! regDateTime.test ( value ) && !regDateTimeHTML.test( value ))
|
|
{
|
|
if (value.length > 0)
|
|
{
|
|
var badDateTime = L_BadDateTime.replace("%1", promptengine_getDateSpec());
|
|
alert ( badDateTime );
|
|
}
|
|
else
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
return false;
|
|
}
|
|
}
|
|
else if ( type == 't' && ! regTime.test ( value ) && !regTimeHTML.test( value ) )
|
|
{
|
|
if (value.length > 0)
|
|
alert ( L_BadTime );
|
|
else
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
|
|
return false;
|
|
}
|
|
|
|
//by default let it go...
|
|
return true;
|
|
}
|
|
|
|
function promptengine_checkRangeBoundValue (
|
|
value,
|
|
type )
|
|
{
|
|
if (value == null || value.length == 0)
|
|
{
|
|
alert ( (typeof L_Empty) != 'undefined'? L_Empty : L_NoValue );
|
|
return false;
|
|
}
|
|
|
|
return promptengine_checkValue(value, type);
|
|
}
|
|
|
|
function promptengine_isSubmitEvent(evt)
|
|
{
|
|
if (isNetscape)
|
|
{
|
|
if (evt.which == ENTER_KEY && (evt.target.type == "text" || evt.target.type == "password"))
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (window.event.keyCode == ENTER_KEY && (window.event.srcElement.type == "text" || window.event.srcElement.type == "password"))
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function promptengine_isEnterKey(evt)
|
|
{
|
|
if (isNetscape)
|
|
{
|
|
if (evt.which == ENTER_KEY && evt.target.tagName.toLowerCase() != "a")
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (window.event.keyCode == ENTER_KEY && window.event.srcElement.tagName.toLowerCase() != "a")
|
|
return true;
|
|
}
|
|
}
|
|
|
|
//This function should only be called from the COM components.
|
|
//Use encodeURIComponent for Java
|
|
function promptengine_urlEncode(strToBeEncoded)
|
|
{
|
|
var encodedString = new String("");
|
|
for( var i = 0; i < strToBeEncoded.length; i++ )
|
|
{
|
|
var nextChar = strToBeEncoded.charAt(i);
|
|
switch( nextChar )
|
|
{
|
|
//Unsafe characters
|
|
case '%':
|
|
{
|
|
encodedString += "%25";
|
|
break;
|
|
}
|
|
case '+':
|
|
{
|
|
encodedString += "%2B";
|
|
break;
|
|
}
|
|
case ' ':
|
|
{
|
|
encodedString += "%20";
|
|
break;
|
|
}
|
|
case '<':
|
|
{
|
|
encodedString += "%3C";
|
|
break;
|
|
}
|
|
case '>':
|
|
{
|
|
encodedString += "%3E";
|
|
break;
|
|
}
|
|
case '"':
|
|
{
|
|
encodedString += "%22";
|
|
break;
|
|
}
|
|
case '\'':
|
|
{
|
|
encodedString += "%27";
|
|
break;
|
|
}
|
|
case '#':
|
|
{
|
|
encodedString += "%23";
|
|
break;
|
|
}
|
|
case '{':
|
|
{
|
|
encodedString += "%7B";
|
|
break;
|
|
}
|
|
case '}':
|
|
{
|
|
encodedString += "%7D";
|
|
break;
|
|
}
|
|
case '|':
|
|
{
|
|
encodedString += "%7C";
|
|
break;
|
|
}
|
|
case '\\':
|
|
{
|
|
encodedString += "%5C";
|
|
break;
|
|
}
|
|
case '^':
|
|
{
|
|
encodedString += "%5E";
|
|
break;
|
|
}
|
|
case '~':
|
|
{
|
|
encodedString += "%7E";
|
|
break;
|
|
}
|
|
case '`':
|
|
{
|
|
encodedString += "%60";
|
|
break;
|
|
}
|
|
case '[':
|
|
{
|
|
encodedString += "%5B";
|
|
break;
|
|
}
|
|
case ']':
|
|
{
|
|
encodedString += "%5D";
|
|
break;
|
|
}
|
|
//Reserved characters
|
|
case ';':
|
|
{
|
|
encodedString += "%3B";
|
|
break;
|
|
}
|
|
case '/':
|
|
{
|
|
encodedString += "%2F";
|
|
break;
|
|
}
|
|
case '?':
|
|
{
|
|
encodedString += "%3F";
|
|
break;
|
|
}
|
|
case ':':
|
|
{
|
|
encodedString += "%3A";
|
|
break;
|
|
}
|
|
case '@':
|
|
{
|
|
encodedString += "%40";
|
|
break;
|
|
}
|
|
case '=':
|
|
{
|
|
encodedString += "%3D";
|
|
break;
|
|
}
|
|
case '&':
|
|
{
|
|
encodedString += "%26";
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
encodedString += nextChar;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return encodedString;
|
|
}
|
|
|
|
function promptengine_CancelRightClick(evt)
|
|
{
|
|
if (isNetscape)
|
|
{
|
|
if (evt.target.type != "text" && evt.target.type != "textarea")
|
|
{
|
|
evt.preventDefault();
|
|
evt.cancelBubble = true;
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (window.event.srcElement.type != "text" && window.event.srcElement.type != "textarea")
|
|
{
|
|
window.event.cancelBubble = true;
|
|
window.event.returnValue = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
function promptengine_showHidePromptByKey(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
|
|
{
|
|
var correctKey = false;
|
|
var fieldSet = document.getElementById(fieldSetId);
|
|
|
|
if (fieldSet == null)
|
|
return;
|
|
|
|
if (isNetscape)
|
|
{
|
|
if ( (evt.which == LEFT_ARROW_KEY && fieldSet.style.display == "") ||
|
|
(evt.which == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
|
|
correctKey = true;
|
|
}
|
|
else
|
|
{
|
|
if ( (window.event.keyCode == LEFT_ARROW_KEY && fieldSet.style.display == "") ||
|
|
(window.event.keyCode == RIGHT_ARROW_KEY && fieldSet.style.display == "none") )
|
|
correctKey = true;
|
|
}
|
|
|
|
if (correctKey == true)
|
|
promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
|
|
}
|
|
|
|
function promptengine_showHidePrompt(fieldSetId, imgId, currentImgPath, changeImgPath, evt)
|
|
{
|
|
var imgElem;
|
|
imgElem = document.getElementById(imgId);
|
|
|
|
if (imgElem!= null && fieldSetId != null)
|
|
{
|
|
if (!imgElem.origImage)
|
|
imgElem.origImage = imgElem.src;
|
|
|
|
var fieldSet = document.getElementById(fieldSetId);
|
|
if (fieldSet != null)
|
|
{
|
|
if (fieldSet.style.display == "")
|
|
fieldSet.style.display = "none";
|
|
else
|
|
fieldSet.style.display = "";
|
|
|
|
if (!imgElem.changed || imgElem.changed == false)
|
|
{
|
|
imgElem.src = changeImgPath;
|
|
imgElem.changed = true;
|
|
}
|
|
else
|
|
{
|
|
imgElem.src = currentImgPath;
|
|
imgElem.changed = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function promptengine_scrollTo(elt)
|
|
{
|
|
if (!elt) return;
|
|
|
|
var offsetTop = elt.offsetTop;
|
|
if (!offsetTop) return;
|
|
|
|
var myOffsetParent = elt.offsetParent;
|
|
while( myOffsetParent )
|
|
{
|
|
offsetTop += myOffsetParent.offsetTop;
|
|
myOffsetParent = myOffsetParent.offsetParent;
|
|
}
|
|
|
|
window.scrollTo(0, offsetTop);
|
|
}
|
|
|
|
/* Crystal Decisions Confidential Proprietary Information */
|