// JavaScript utility functions
var LOG_TRACE = 0;
var LOG_DEBUG = 1;
var LOG_INFO = 2;
var LOG_WARN = 3;
var LOG_ERROR = 4;
var LOG_FATAL = 5;
var LOG_LEVEL = LOG_ERROR;
var ie = false;
var firefox = false;
var httpRequest = null;
var cookieMap;
// This re must be the same as AODConstants.FLEXIBLE_DATE_PATTERN.
var DATE_PATTERN = "^(\\d{1,2})[\\/\\-\\.](\\d{1,2})[\\/\\-\\.](\\d{4}|\\d{2}|\\d{1})$|^(\\d{2})(\\d{2})(\\d{4}|\\d{2})$";
var DATE_REGEXP = new RegExp(DATE_PATTERN);
var SEGMENTED_DATE_PATTERN = DATE_PATTERN + "|^(\\d{1,2})[\\/\\-\\.](\\d{4}|\\d{2})$|^(\\d{4}|\\d{2})$";
var SEGMENTED_DATE_REGEXP = new RegExp(SEGMENTED_DATE_PATTERN);
// This re must be the same as AODConstants.FLEXIBLE_TIME_PATTERN.
var TIME_REGEXP = /^(\d{1,2})[:\.](\d{1,2})(|[:\.](\d{1,2})(|\.(\d{1,3}))) *(am|pm)?$/i;
var TIME_REGEXP_12HR = /^(\d{1,2})[:\.](\d{1,2})(|[:\.](\d{1,2})(|\.(\d{1,3}))) *(am|pm)$/i;
var NUMERIC_REGEXP = /^\d+$/;
var FLOATING_POINT_REGEXP = /^(\d+\.?\d*|\.\d+)$/;
var SIGNED_NUMERIC_REGEXP = /^\-?\d+$/;
var SIGNED_FLOATING_POINT_REGEXP = /^\-?\d+\.?\d*$/;
var NON_BLANK_REGEXP = /[^ ]+/;
var ALL_BLANK_REGEXP = /^ *$/;
var PARSEABLE_NUMERIC_REGEXP = new RegExp("^0*([1-9]+[0-9]*)$");
// from https://bytes.com/groups/javascript/148646-onchange-onblur-events
var GLOBAL_TAKE_FOCUS = null;
function setFocus(ref) {
GLOBAL_TAKE_FOCUS=ref;
setTimeout("GLOBAL_TAKE_FOCUS.focus();",100);
}
// had trouble with this, perhaps because w3c and ms event models
// are not cross-browser compatible.
// but the compatibility issue seems to be addressed.
function addEventListenerSafely(element, evtType, evtHandler, capture) {
if (element.addEventListener) {
// mozilla
element.addEventListener(evtType, evtHandler, capture);
}
else if (element.attachEvent) {
// IE
alert('attaching event: ' + evtType + ' of element: ' + element + ' to handler: ' + evtHandler);
element.attachEvent('on' + evtType, evtHandler);
}
else {
alert('could not addEventListener ' + evtHandler + ' for event ' + evtType + ' on element ' + element);
}
}
function initUtils() {
ie = isIE();
firefox = isFirefox();
}
// clear a selection list
function clearSelection(selectionList, lastIndex) {
for (var i = selectionList.length-1; i >= lastIndex; i--)
{
selectionList.remove(i);
}
}
function dumpElements(form) {
for (var i = 0; i < form.elements.length; i++) {
document.write(form.elements[i].type + " " + form.elements[i].name + "
");
}
}
function createXMLHttpRequest()
{
var req = null;
if (typeof XMLHttpRequest != "undefined") {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
// Try to create XMLHttpRequest in later versions
// of Internet Explorer
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
// Failed to create required ActiveXObject
try {
// Try version supported by older versions
// of Internet Explorer
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
// Unable to create an XMLHttpRequest with ActiveX
setErrorMessage("Unable to create XMLHttpRequest.");
}
}
}
return req;
}
// Multiple Concurrent AJAX requests.
// With JavaScript you can have more than one AJAX request processing
// at a single time. In order to insure the proper post processing of
// code it is recommended that you use JavaScript Closures. The
// closure binds the request to the callback. The example below shows
// an XMLHttpRequest object abstracted by a JavaScript object called
// AJAXInteraction. As arguments you pass in the URL to call and the
// function to call when the processing is done.
// Use this for multiple concurrent
// AJAX calls (max 2 w/IE).
// from https://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=225#start
// among other places.
// example:
// function makeRequest() {
// var ai = new AJAXInteraction("processme", function() { alert("Doing Post Process");});
// ai.doGet();
// }
function AJAXInteraction(url, callback, errorCallback) {
this.TEXT_RESPONSE = 0;
this.XML_RESPONSE = 1;
var responseType = this.TEXT_RESPONSE;
var req = init();
req.onreadystatechange = processRequest;
function init() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function processRequest () {
var response = null;
if (req.readyState == 4) {
if (req.status == 200) {
if (callback != null && typeof(callback) == 'function') {
if (responseType == this.XML_RESPONSE) {
response = req.responseXML;
}
else {
response = req.responseText;
}
callback(response);
}
} else {
if (errorCallback != null && typeof(callback) == 'function') {
if (responseType == this.XML_RESPONSE) {
response = req.responseXML;
}
else {
response = req.responseText;
}
errorCallback(req.status, response);
}
}
}
}
this.doGet = function() {
req.open("GET", url, true);
req.send(null);
}
this.doPost = function(body) {
req.open("POST", url, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(body);
}
this.setResponseType = function(type) {
responseType = type;
}
}
function getMultiSelectAsParameterString(elementId, parameterName, firstChar) {
var selectElement = document.getElementById(elementId);
var stringRep = '';
if (selectElement != null) {
var options = selectElement.options;
if (options != null) {
for (var i = 0; i < selectElement.length; i++) {
if (options[i].selected) {
stringRep += (stringRep.length == 0 ? '' : '&') + parameterName + "=" + options[i].value;
}
}
}
}
return stringRep == '' ? stringRep : firstChar + stringRep;
}
function getSelectAsParameterString(elementIdBase, firstChar){
var selectElement = document.getElementById(elementIdBase);
var stringRep = '';
if (selectElement != null) {
var elementIndex = selectElement.selectedIndex;
var element = selectElement.options[elementIndex].value;
if (element != null) {
stringRep += (stringRep.length == 0 ? '' : '&') + elementIdBase + "=" + element;
}
}
return stringRep == '' ? stringRep : firstChar + stringRep;
}
function getParameterString(form) {
warn("getParameterString(form) is deprecated - use getFormElementsAsParameterString(form)");
var parameterString = '';
var size = form.length;
var elements = form.elements;
var name = '';
for (var i = 0 ; i < size ; i++)
{
name = elements[i].name;
if (name == '')
{
name = form.name + i;
}
value = elements[i].value;
if (i > 0)
{
parameterString = parameterString + '&';
}
parameterString = parameterString
+ name + '='
+ encodeURIComponent(value);
}
return parameterString;
}
function getRadioGroupAsParameterString(elementIdBase, elementCount, firstChar) {
var element = null;
var stringRep = '';
for (var i = 0; i < elementCount; i++) {
element = document.getElementById(elementIdBase + i);
trace('element:' + elementIdBase + i + ' checked? ' + element.checked);
if (element.checked) {
stringRep += (stringRep.length == 0 ? '' : '&') + elementIdBase + "=" + element.value;
break;
}
}
trace('rg stringRep=' + stringRep);
return stringRep == '' ? stringRep : firstChar + stringRep;
}
function hideElement(name) {
if (name && name.length > 0) {
trace("in hideElement name=" + name);
hideRetrievedElement(document.getElementById(name));
}
}
function hideRetrievedElement(element) {
trace("in hideRetrievedElement element=" + element);
if (element && element.style) {
//element.style.visibility = 'collapse';
element.style.visibility = 'hidden';
element.style.display = 'none';
}
}
function hideAndShrinkElement(name) {
if (name && name.length > 0) {
trace("in hideAndShrinkElement name=" + name);
hideAndShrinkRetrievedElement(document.getElementById(name));
}
}
function hideAndShrinkRetrievedElement(element) {
trace("in hideAndShrinkRetrievedElement element=" + element);
if (element && element.style) {
//element.style.visibility = 'collapse';
element.style.visibility = 'hidden';
element.style.display = 'none';
element.style.height = '0px';
}
}
function showElement(name) {
if (name && name.length > 0) {
trace("in showElement, name=" + name);
showRetrievedElement(document.getElementById(name));
}
}
function showRetrievedElement(element) {
trace("in hideRetrievedElement element=" + element);
if (element && element.style) {
element.style.visibility = 'visible';
//element.style.display = 'inline';
element.style.display = 'block';
}
}
function showElementInLine(name) {
if (name && name.length > 0) {
trace("in showElement, name=" + name);
showRetrievedElementInLine(document.getElementById(name));
}
}
function showElementCSS(id) {
var el = document.getElementById(id);
if (exists(el)) {
el.className = 'visible';
}
}
function hideElementCSS(id) {
var el = document.getElementById(id);
if (exists(el)) {
el.className = 'invisible';
}
}
function showRetrievedElementInLine(element) {
trace("in hideRetrievedElement element=" + element);
if (element && element.style) {
element.style.visibility = 'visible';
element.style.display = 'inline';
}
}
function removeChildren(element) {
if (element && element.childNodes) {
trace(">> removing children of " + element);
for (var i = element.childNodes.length-1;
i >= 0; i--) {
removeChildren(element.childNodes[i]);
trace("<< removing child node " + element.childNodes[i]);
element.removeChild(element.childNodes[i]);
}
}
}
function removeChildrenById(id) {
if (exists(id)) {
removeChildren(document.getElementById(id));
}
}
//+ Carlos R. L. Rodrigues
//@ https://jsfromhell.com/array/search [rev. #2]
// Searches a value inside an ordered array using binary search or
// supplies the index where the searched value should be inserted to
// keep the array ordered.
function search(o, v, i){
var h = o.length, l = -1, m;
while(h - l > 1)
if(o[m = h + l >> 1] < v) l = m;
else h = m;
return o[h] != v ? i ? h : -1 : h;
}
function setFlaggedLabelsOnElement(elementName, flags, labels) {
var html = '';
var flagCount = 0;
for (var i = 0; i < flags.length; i++) {
if (flags[i]) {
if(flagCount > 1 && flagCount < flags.length){
html += ', ';
}
if(flagCount == 0){
html = '' + labels[i] + '';
}else{
html += "" + labels[i] + "";
}
if(flagCount == 0 && flags.length > 1){
html += ': ';
}
flagCount++;
}
}
if(html != ''){
html += '
';
}
setRecordsTypesHTML(elementName, html);
}
function setNestedFlaggedLabelsOnElement(elementName, flags, labels) {
var isCheked = false;
var html = '';
var flagCount = 0;
for(var i = 0; i < 4; i++){
if(flags[i]){
isCheked = true;
}
}
if(isCheked){
html = '' + labels[0] + ': ';
for (var i = 1; i < flags.length; i++) {
if (flags[i]) {
if(flagCount > 0 && flagCount < flags.length){
html += ', ';
}
html += "" + labels[i] + "";
flagCount++;
}
}
if(html != ''){
html += '
';
}
}
setRecordsTypesHTML(elementName, html);
}
function setRecordsTypesHTML(elementName, html) {
var element = document.getElementById(elementName);
if (element) {
element.innerHTML += html;
}
}
function setHTML(elementName, html) {
var element = document.getElementById(elementName);
if (element) {
element.innerHTML = html;
}
}
function setText(elementName, text) {
var element = document.getElementById(elementName);
if (element) {
removeChildren(element);
element.appendChild(document.createTextNode(text));
}
}
function setElementTextFromArray(element, a) {
if (element) {
removeChildren(element);
var text = '';
for (var idx in a) {
text += a[idx] + '\n';
}
element.appendChild(document.createTextNode(text));
}
}
function appendElementTextFromArray(element, a) {
if (element) {
var text = '';
for (var idx in a) {
text += a[idx] + '\n';
}
element.appendChild(document.createTextNode(text));
}
}
function setElementHtmlFromArray(element, a) {
if (element) {
var html = '';
for (var idx in a) {
html += '
' + a[idx] + '\n';
}
element.innerHTML = html;
}
}
function appendElementHtmlFromArray(element, a) {
if (element) {
var html = '';
for (var idx in a) {
html += '
' + a[idx] + '\n';
}
element.innerHTML += html;
}
}
// return count of keys in a json object.
function keyCount(obj) { return Object.keys(obj).length; }
// these trim functions
// are from https://www.somacon.com/p355.php
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
return this.replace(/\s+$/,"");
}
String.prototype.capitalize = function() {
return this[0].toUpperCase() + this.substring(1, this.length).toLowerCase();
}
String.prototype.startsWith = function(target) {
var result = false;
if (target != null
&& (target.length == 0
|| this.indexOf(target) == 0)) {
result = true;
}
return result;
}
String.prototype.endsWith = function(target) {
var result = false;
if (target != null) {
if (target.length == 0) {
result = true;
}
else {
var len = this.length;
if (len > 0) {
var pos = this.lastIndexOf(target);
if (pos > 0
&& len - pos == target.length) {
result = true;
}
}
}
}
return result;
}
String.prototype.reverse = function() {
var result = '';
for(var i = this.length - 1;
i >= 0;
i--) {
result += this.substring(i, i+1);
}
return result;
}
function getParentNode(element, parentNodeName) {
var parentNode = null;
if (parentNodeName && parentNodeName.length > 0) {
for (parentNode = element.parentNode;
parentNode && parentNode.nodeName != parentNodeName;
parentNode = parentNode.parentNode)
{}
}
return parentNode;
}
function getDateFromString(dateString) {
var dateArr = dateString.split(/[.,\/-]/);
var curYear = new Date().getFullYear();
var month, day, yearString, year;
if (dateArr.length < 3) {
month = dateString.substring(0, 2);
day = dateString.substring(2, 4);
yearString = dateString.substring(4, dateString.length);
} else {
month = dateArr[0];
day = dateArr[1];
yearString = dateArr[2];
}
var year = parseInt(yearString);
if (year < 100) {
if (year <= 1 + (curYear % 100)) {
year = year + 2000;
} else {
year = year + 1900
}
}
return new Date(year, month - 1, day);
}
function validateDateOrder(start, end) {
var valid = true;
var startDateStr = document.getElementById(start).value;
var endDateStr = document.getElementById(end).value;
var startDate = getDateFromString(startDateStr);
var endDate = getDateFromString(endDateStr);
if (startDate > endDate) {
message = 'Start date [' + formatDate(startDate)
+ '] must be on or before the end date [' + formatDate(endDate) + '].';
alert(message);
valid = false;
}
return valid;
}
function validateRe(elementName, re, elementLabel, stateIfMatched) {
return validateElementByRe(document.getElementById(elementName),
re,
false,
elementLabel,
stateIfMatched);
}
function validateElementByRe(element, re, blanksOk, elementLabel, stateIfMatched) {
var value = null;
var valid = true;
var match = null;
var message = null;
if (element) {
value = element.value;
if (value != null) {
value = value.trim();
if (value.length == 0) {
if (!blanksOk) {
valid = false;
message = elementLabel + ' is required.';
}
}
else {
match = re.exec(value);
if (!match || match.length == 0) {
valid = false;
message = 'The value of ' + elementLabel
+ ' is not ' + stateIfMatched
+ '.';
}
}
}
else {
valid = false;
message = 'Value of element ' + elementLabel + ' is null.';
}
if (!valid) {
if (message != null) {
alert(message);
}
//element.focus();
setFocus(element);
}
}
else {
alert('Element ' + elementName
+ ' is not present in the document.');
}
return valid;
}
function validateDateElement(element, elementLabel) {
return validateElementByRe(element, DATE_REGEXP, false, elementLabel, 'a date');
}
function validateDateOrBlankElement(element, elementLabel) {
return validateElementByRe(element, DATE_REGEXP, true, elementLabel, 'a date');
}
function validate12HourTimeElement(element, elementLabel) {
if (element && element.value) {
element.value = element.value.toUpperCase();
}
return validateElementByRe(element, TIME_REGEXP_12HR, false, elementLabel, 'a time followed by AM or PM');
}
function validate12HourTimeOrBlankElement(element, elementLabel) {
if (element && element.value) {
element.value = element.value.toUpperCase();
}
return validateElementByRe(element, TIME_REGEXP_12HR, true, elementLabel, 'a time followed by AM or PM');
}
function validateTimeElement(element, elementLabel) {
return validateElementByRe(element, TIME_REGEXP, false, elementLabel, 'a time');
}
function validateTimeOrBlankElement(element, elementLabel) {
return validateElementByRe(element, TIME_REGEXP, true, elementLabel, 'a time');
}
function validateFloatingPointElement(element, elementLabel) {
return validateElementByRe(element, FLOATING_POINT_REGEXP, false, elementLabel, 'a number');
}
function validateFloatingPointOrBlankElement(element, elementLabel) {
return validateElementByRe(element, FLOATING_POINT_REGEXP, true, elementLabel, 'a number or blank');
}
function validateNumericElement(element, elementLabel) {
return validateElementByRe(element, NUMERIC_REGEXP, false, elementLabel, 'a whole number');
}
function validateNumericOrBlankElement(element, elementLabel) {
return validateElementByRe(element, NUMERIC_REGEXP, true, elementLabel, 'a whole number, or blank');
}
function validateNumericElementByRange(element, elementLabel, minValue, maxValue) {
var valid = false;
if (validateElementByRe(element, NUMERIC_REGEXP, false, elementLabel, 'a whole number')) {
if (element.value >= minValue
&& element.value <= maxValue) {
valid = true;
}
else {
alert('The value of ' + elementLabel
+ ' is not in the range '
+ minValue + '-' + maxValue
+ '.');
element.focus();
}
}
return valid;
}
function validateNumericOrBlankElementByRange(element, elementLabel, minValue, maxValue) {
var valid = false;
if (validateElementByRe(element, NUMERIC_REGEXP, true, elementLabel, 'a whole number')) {
if (!element.value || element.value.trim().length == 0) {
valid = true;
}
else {
if (element.value >= minValue
&& element.value <= maxValue) {
valid = true;
}
else {
alert('The value of ' + elementLabel
+ ' is not in the range '
+ minValue + '-' + maxValue
+ '.');
setFocus(element);
}
}
}
return valid;
}
function validateFloatingPointElementByRange(element, elementLabel, minValue, maxValue) {
var valid = false;
if (validateElementByRe(element, FLOATING_POINT_REGEXP, false, elementLabel, 'a number')) {
if (element.value >= minValue
&& element.value <= maxValue) {
valid = true;
}
else {
alert('The value of ' + elementLabel
+ ' is not in the range '
+ minValue + '-' + maxValue
+ '.');
setFocus(element);
}
}
return valid;
}
function validateFloatingPointOrBlankElementByRange(element, elementLabel, minValue, maxValue) {
var valid = false;
if (validateElementByRe(element, FLOATING_POINT_REGEXP, true, elementLabel, 'a number')) {
if (!element.value || element.value.trim().length == 0) {
valid = true;
}
else {
if (element.value >= minValue
&& element.value <= maxValue) {
valid = true;
}
else {
alert('The value of ' + elementLabel
+ ' is not in the range '
+ minValue + '-' + maxValue
+ '.');
setFocus(element);
}
}
}
return valid;
}
function isNonBlank(value) {
return value && ! ALL_BLANK_REGEXP.test(value.trim());
}
function isNonBlankElement(element) {
var result = false;
if (element) {
trace('isNonBlankElement: id=' + element.id + ' type=' + element.type);
if (element.type == 'text' || element.type == 'textarea' || element.type == 'hidden') {
result = isNonBlank(element.value);
}
else {
alert('Element ' + element.id + ' cannot be tested for blankness; not type text, textarea or hidden.');
}
}
else {
alert('isNonBlankElement: Element not found!');
}
return result;
}
function validateNonBlank(elementId, label) {
return validateNonBlankElement(document.getElementById(elementId), label);
}
function validateNonBlankElement(element, label) {
var valid = false;
if (element) {
if (isNonBlankElement(element)) {
valid = true;
}
else {
var divNode = getParentNode(element, "DIV");
if (divNode) {
showRetrievedElement(divNode);
}
setFocus(element);
element.scrollIntoView();
alert(label + ' is required.');
}
}
else {
alert('Element for ' + label + ' not found!');
}
return valid;
}
function fatal(message) {
log(message, LOG_FATAL);
}
function error(message) {
log(message, LOG_ERROR);
}
function warn(message) {
log(message, LOG_WARN);
}
function info(message) {
log(message, LOG_INFO);
}
function debug(message) {
log(message, LOG_DEBUG);
}
function trace(message) {
log(message, LOG_TRACE);
}
function log (message, level) {
var dateString = null;
var date = null;
if (message != null
&& level != null) {
date = new Date();
if (typeof(date.format) == 'function') {
dateString = date.format('%Y-%m-%d %H:%M:%S');
}
else {
dateString = '' + date.getTime();
}
message = dateString + ': ' + message;
if (typeof(window["console"]) != "undefined"
&& console && console.log) {
if (level >= LOG_LEVEL) {
console.log(message);
}
}
else {
if (level > LOG_INFO) {
alert(message);
}
}
}
}
function isFirefox() {
var re = /^.+Firefox.+$/;
return re.test(navigator.userAgent);
}
function isIE() {
var re = /^.+(MSIE|Trident).+$/;
return re.test(navigator.userAgent);
}
function createOption(text, value, additionalText) {
var option = document.createElement('option');
if (ie) {
// IE7 displays contents of label
// attribute in SELECT.
// IE6 uses text attribute.
option.text = text;
option.label = text;
}
else {
option.text = text;
option.label = additionalText;
}
option.value = value;
return option;
}
function getEvent(e) {
return e || window.event;
}
function getEventTarget(e) {
var target = e.target || e.srcElement;
if (target.nodeType == 3) {
// deal with Safari bug
target = target.parentNode;
}
return target;
}
function fireEvent(target, evtName, evtClass) {
// courtesy codesnippets.joyent.com/posts/show/1654
try {
if (target.fireEvent) {
// IE
target.fireEvent('on' + evtName);
}
else if (document.createEvent) {
// Mozilla
var evt = document.createEvent(evtClass);
if (evt.initEvent) {
evt.initEvent(evtName, true, true);
}
if (target.dispatchEvent) {
target.dispatchEvent(evt);
}
}
}
catch (e) {
error("Error firing event: " + e);
}
}
Array.max = function( array ){
return Math.max.apply( Math, array );
};
Array.min = function( array ){
return Math.min.apply( Math, array );
};
function getOptionTextByValue(element, value) {
var optionText = null;
if (element
&& element.nodeName.toUpperCase() == 'SELECT') {
var options = element.options;
for (var i = 0;
i < options.length && !optionText;
i++) {
if (options[i].value == value) {
optionText = options[i].text
|| options[i].label;
}
}
}
return optionText;
}
function isOptionSelectedByValue(element, value) {
var optionSelected = false;
if (element
&& element.nodeName.toUpperCase() == 'SELECT') {
var options = element.options;
if (options) {
for (var i = 0;
i < options.length && !optionSelected;
i++) {
if (options[i].selected
&& options[i].value == value) {
optionSelected = true;
}
}
}
}
return optionSelected;
}
function setOptionSelectedByValue(element, value) {
if (element
&& element.type.toUpperCase() == 'SELECT-ONE') {
var options = element.options;
if (options) {
for (var i = 0;
i < options.length;
i++) {
if (!options[i].selected
&& options[i].value == value) {
element.selectedIndex = i;
break;
}
}
}
}
}
function setOptionSelectedByValueRegexp(element, re) {
var selectedMatch = false;
if (element
&& element.type.toUpperCase() == 'SELECT-ONE') {
var options = element.options;
if (options) {
for (var i = 0;
i < options.length;
i++) {
if (!options[i].selected
&& options[i].value) {
var match = re.exec(options[i].value);
if (match && match.length > 0) {
element.selectedIndex = i;
selectedMatch = true;
break;
}
}
}
}
}
return selectedMatch;
}
function isOptionSelectedByText(element, text) {
var optionSelected = false;
if (element
&& element.nodeName.toUpperCase() == 'SELECT') {
var options = element.options;
var optionText = null;
if (options) {
for (var i = 0;
i < options.length && !optionSelected;
i++) {
if (options[i].selected) {
optionText = options[i].text
|| options[i].label;
if (optionText == text) {
optionSelected = true;
}
}
}
}
}
return optionSelected;
}
function isOptionSelectedByRegexp(element, re) {
var optionSelected = false;
var match = null;
if (element
&& element.nodeName.toUpperCase() == 'SELECT') {
var options = element.options;
var optionText = null;
if (options) {
for (var i = 0;
i < options.length && !optionSelected;
i++) {
if (options[i].selected) {
optionText = options[i].text
|| options[i].label;
match = re.exec(optionText);
if (match != null && match.length > 0) {
optionSelected = true;
}
}
}
}
}
return optionSelected;
}
function getSelectedOptionByElement(el, startIndex) {
var option = null;
var index = getSelectedIndexByElement(el);
if (index >= startIndex) {
try {
option = el.options[index];
}
catch (e) {
option = null;
}
}
return option;
}
function getSelectionTextByElement(el, startIndex) {
var optionText = null;
var option = getSelectedOptionByElement(el, startIndex);
if (option != null) {
optionText = option.text || option.label;
}
return optionText;
}
function getSelectedOptions(id) {
return getSelectedOptionsByElement(document.getElementById(id));
}
function getSelectedOptionsByElement(element) {
var selectedOptions = [];
if (element && element.options) {
for (var i = 0; i < element.options.length; i++) {
if (element.options[i].selected) {
selectedOptions[selectedOptions.length] = element.options[i];
}
}
}
return selectedOptions;
}
function setSelectedIndex(id, index) {
setSelectedIndexByElement(document.getElementById(id),
index);
}
function getSelectedIndex(id) {
return getSelectedIndexByElement(document.getElementById(id));
}
function setSelectedIndexByElement(el, index) {
if (index != null && index >= 0) {
if (el != null
&& el.type.toUpperCase() == 'SELECT-ONE'
&& el.options
&& index < el.options.length) {
el.selectedIndex = index;
}
}
}
function getSelectedIndexByElement(el) {
var index = -1;
if (el != null
&& el.type.toUpperCase() == 'SELECT-ONE'
&& el.options) {
index = el.selectedIndex;
}
return index;
}
function valueIsChecked(idArray, label) {
var isChecked = false;
var element = null;
for (var i = 0; i < idArray.length; i++) {
element = document.getElementById(idArray[i]);
if (element) {
if (element.type == 'checkbox') {
if (element.checked) {
isChecked = true;
}
}
else {
alert('Element ' + idArray[i] + ' is not a checkbox.');
}
}
else {
alert('Element ' + idArray[i] + ' not found in document.');
}
}
if (!isChecked) {
alert('Please make a selection for ' + label + '.');
}
return isChecked;
}
function valueInRowIsChecked(idArray, label, recordType) {
var isChecked = false;
var element = null;
if(document.getElementById(recordType).checked){
for (var i = 0; i < idArray.length; i++) {
element = document.getElementById(idArray[i]);
if (element) {
if (element.type == 'checkbox') {
if (element.checked) {
isChecked = true;
}
}
else {
alert('Element ' + idArray[i] + ' is not a checkbox.');
}
}
else {
alert('Element ' + idArray[i] + ' not found in document.');
}
}
if (!isChecked) {
alert('Please make a selection for ' + label + '.');
}
}else{
isChecked = true;
}
return isChecked;
}
function radioGroupHasSelection(baseName, elementCount, label) {
var hasSelection = radioGroupHasSelectionQuiet(baseName, elementCount, label);
if (!hasSelection) {
alert('Please make a selection for ' + label + '.');
}
return hasSelection;
}
function radioGroupHasSelectionQuiet(baseName, elementCount, label) {
var hasSelection = false;
var elementId = null;
var element = null;
for (var i = 0; i < elementCount; i++) {
elementId = baseName + i;
element = document.getElementById(elementId);
if (element) {
if (element.type == 'radio') {
if (element.checked) {
hasSelection = true;
}
}
else {
alert('Element ' + elementId + ' is not a radio button.');
}
}
else {
alert('Element ' + elementId + ' not found in document.');
}
}
return hasSelection;
}
function unCheckElements(elementIds) {
for (var i = 0; i < elementIds.length; i++) {
unCheckElement(elementIds[i]);
}
}
function checkElements(elementIds) {
for (var i = 0; i < elementIds.length; i++) {
checkElement(elementIds[i]);
}
}
function unCheckElement(elementId) {
setBooleanElement(elementId, false);
}
function checkElement(elementId) {
setBooleanElement(elementId, true);
}
function setBooleanElement(elementId, value) {
var element = document.getElementById(elementId);
if (element
&& (element.type == 'checkbox'
|| element.type == 'radio')) {
element.checked = value;
}
}
//
// fit a TEXTAREA to show all rows with a configurable
// number of rows hidden.
//
function fitTextArea(elementId, rowsHidden, minRows) {
var element = document.getElementById(elementId);
if (element && element.type == "textarea") {
if (element.value) {
//var lineCount = element.value.split("\n").length;
var lineCount = element.value.length / element.cols + 1;
trace("elementId=" + elementId + " lineCount=" + lineCount);
var newRows = lineCount - rowsHidden;
if (newRows > minRows) {
element.rows = newRows;
}
}
}
}
function handleTextAreaKeyUp(element, minRows) {
trace("handleTextAreaKeyUp: element.id=" + element.id);
if (element && minRows)
{
var lines = element.value.split('\n');
var lineCount = 0;
for (var i = 0; i < lines.length; i++) {
if (lines[i].length == 0) {
lineCount++;
}
else {
lineCount += divide(lines[i].length, element.cols);
if (lines[i].length % element.cols > 0) {
lineCount++;
}
}
trace("lines[" + i + "].length=" + lines[i].length + " element.cols=" + element.cols
+ " lineCount=" + lineCount);
}
lineCount++;
trace("lineCount=" + lineCount + " minRows=" + minRows + " current rows=" + element.rows);
if (lineCount != element.rows
&& lineCount >= minRows) {
element.rows = lineCount;
trace("set rows to " + element.rows);
}
}
}
//
// clear a text element
//
function clearTextElement(elementId) {
var element = document.getElementById(elementId);
if (element && (element.type == 'text'
|| element.type == 'textarea')) {
element.value = '';
}
}
//
// find index of first checked element in list
// of elements given list of ids
//
function findFirstChecked(elementIdList) {
var gotChecked = false;
for (var i = 0; i < elementIdList.length && !gotChecked; i++) {
gotChecked = document.getElementById(elementIdList[i]).checked;
}
return gotChecked ? i : -1;
}
function getChildByNodeName(divElement, nodeName) {
var nodes = getChildrenByNodeNames(divElement, [nodeName]);
return nodes && nodes.length > 0 ? nodes[0] : null;
}
function getChildrenByNodeName(divElement, nodeName) {
var nodes = getChildrenByNodeNames(divElement, [nodeName]);
return nodes && nodes.length > 0 ? nodes : null;
}
function getChildByNodeNames(divElement, nodeNames) {
var nodes = getChildrenByNodeNames(divElement, nodeNames);
return nodes && nodes.length > 0 ? nodes[0] : null;
}
function getChildrenByNodeNames(divElement, nodeNames) {
trace('getChildByNodeNames divElement='
+ divElement + ' target nodeNames=' + nodeNames);
var childNodes = [];
if (nodeNames && nodeNames.length > 0
&& divElement && divElement.childNodes
&& divElement.childNodes.length > 0) {
for (var i = 0;
i < divElement.childNodes.length;
i++) {
trace('i=' + i
+ ' divElement.childNodes[' + i + ']='
+ divElement.childNodes[i]
+ ' divElement.childNodes[' + i + '].nodeName='
+ divElement.childNodes[i].nodeName);
for (var j = 0;
j < nodeNames.length;
j++) {
trace('nodeNames[' + j + ']=' + nodeNames[j]);
if (divElement.childNodes[i].nodeName.toUpperCase() == nodeNames[j].toUpperCase()) {
childNodes[childNodes.length] = divElement.childNodes[i];
}
}
}
}
for (var i = 0; i < childNodes.length; i++) {
trace('childNodes[' + i + '].nodeName=' + childNodes[i].nodeName);
}
return childNodes;
}
function divide(numerator, denominator) {
// In JavaScript, dividing integer values yields a floating point
// result (unlike in Java, C++, C). To find the integer quotient,
// reduce the numerator by the remainder first, then divide.
// Idea is from code at
// https://www.augustana.ca/~mohrj/courses/2000.fall/csc110/JavaScript/examples/integer_division.html
// which, incidentally, did not check the denominator for 0.
var quotient = null;
if (numerator && denominator
&& NUMERIC_REGEXP.test(numerator)
&& NUMERIC_REGEXP.test(denominator)
&& denominator != 0) {
var remainder = numerator % denominator;
quotient = ( numerator - remainder ) / denominator;
}
return quotient;
}
function formatDate(date) {
var month = 1 + date.getMonth();
var day = date.getDate();
var year = date.getFullYear();
var formattedDate = (month < 10 ? '0' : '') + month
+ '/' + (day < 10 ? '0' : '') + day
+ '/' + year;
return formattedDate;
}
function formatTime(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var formattedTime = (hours < 10 ? '0' : '') + hours
+ ':' + (minutes < 10 ? '0' : '') + minutes;
// + ':' + (seconds < 10 ? '0' : '') + seconds;
return formattedTime;
}
function isHidden(divElementId) {
var element = document.getElementById(divElementId);
return element
&& element.nodeName
&& element.nodeName.toUpperCase() == 'DIV'
&& element.style
&& element.style.visibility == 'hidden';
}
function isVisible(divElementId) {
var isVisible = false;
var element = document.getElementById(divElementId);
return element
&& element.nodeName
&& element.nodeName.toUpperCase() == 'DIV'
&& element.style
&& element.style.visibility == 'visible';
}
function isElementHidden(element) {
return element
&& element.style
&& element.style.visibility == 'hidden';
}
function isElementVisible(element) {
return element
&& element.style
&& element.style.visibility == 'visible';
}
function dataExists(elementIds) {
var result = false;
var element = null;
for (var i = 0; i < elementIds.length && !result; i++) {
element = document.getElementById(elementIds[i]);
if (element) {
if (/^txt.+/.test(elementIds[i])) {
result = isNonBlankElement(element);
}
else if (/^rad.+/.test(elementIds[i])
|| /^cb.+/.test(elementIds[i])) {
result = element.checked;
}
}
}
return result;
}
// from https://www.netlobo.com/javascript_select_onchange.html
// executes an onchange function after 750ms (or specified delay)
// prevents multiple executions of onchange code when user happens to
// have focus set to a select box and scrolls with mouse scroll-wheel.
// After an option is selected the safeOnChange function will wait
// for 750ms and if another option has not been chosen it will execute
// the code passed into it.
function safeOnChange( code, delay ) {
delay = delay || 750;
window.clearTimeout( soc_id );
soc_id = window.setTimeout( code, delay );
}
// global timer ID for the safeOnChange function.
var soc_id = null;
function inspectRadioElement(element) {
alert(element.id + '=' + element.checked);
}
function toggleElementDisabled(id, state) {
var element = document.getElementById(id);
if (element) {
element.disabled = state;
}
}
function getElementsByIdMatch(form, re) {
var elements = form.elements;
var matchingElements = [];
for (var i = 0; i < elements.length; i++) {
if (exists(elements[i])) {
if (elements[i].id != null) {
var match = re.test(elements[i].id);
if (match == true) {
matchingElements[matchingElements.length]
= elements[i];
}
}
}
}
return matchingElements;
}
function setRadioGroupDefault(group, defaultValue) {
if (group) {
var hasChoice = false;
var defaultElement = null;
for (var i = 0; i < group.length; i++) {
if (group[i].checked) {
hasChoice = true;
}
if (group[i].value == defaultValue) {
defaultElement = group[i];
}
}
if (!hasChoice && defaultElement) {
defaultElement.checked = true;
}
}
}
// assumes group member ids are base + digit, numbered sequentially
// starting at startingIndex, with memberCount members, where digit
// corresponds to value which should trigger that group member being
// checked.
function setRadioGroupByIdBase(groupIdBase, value, startingIndex, memberCount) {
var element = null;
var elementId = null;
var count = 0;
var index = startingIndex;
for (; count < memberCount;
count++, index++) {
elementId = groupIdBase + index;
element = document.getElementById(elementId);
if (element != null) {
element.checked = (index == value);
}
}
}
function setSelectByIdBase(groupIdBase, value, startingIndex, memberCount){
var element = null;
var elementId = null;
var count = 0;
var index = startingIndex;
for (; count < memberCount;
count++, index++) {
elementId = groupIdBase;
element = document.getElementById(elementId).options[index];
if (element != null) {
element.selected = (index == value);
}
}
}
function setTextElementSafely(elementId, value) {
var element = document.getElementById(elementId);
if (element != null) {
if (value && value != null) {
element.value = value;
}
else {
element.value = '';
}
}
}
// returns the trailing number of a string.
// useful with numbered element Ids.
function getTrailingNumber(elementId) {
var index = -1;
var match = /^[a-zA-Z]+([0-9]+)/.exec(elementId);
if (match && match.length > 1) {
index = match[1];
}
return index;
}
function cursorPosition(element) {
var cursorPosition = null;
element.focus();
var debugging = false;
// get selection in firefox, opera, …
if (typeof(element.selectionStart) == 'number') {
cursorPosition = element.selectionStart;
}
else if (document.selection) {
cursorPosition = cursorPosition2(element);
// calls to setEndPoint() were producing
// invalid argument errors for text boxes
// so we're ditching this code.
// var selection_range = document.selection.createRange().duplicate();
// if (debugging) { alert('got selection range'); }
// // Check that the selection is actually in our element
// if (selection_range.parentElement() == element)
// {
// // Create three ranges, one containing all the text before the selection,
// // one containing all the text in the selection (this already exists), and one containing all
// // the text after the selection.
// var before_range = document.body.createTextRange();
// if (debugging) { alert('got before range'); }
// // Selects all the text
// before_range.moveToElementText(element);
// // Moves the end where we need it
// if (before_range.setEndPoint)
// {
// before_range.setEndPoint("EndToStart", selection_range);
// }
// var after_range = document.body.createTextRange();
// // Selects all the text
// after_range.moveToElementText(element);
// // Moves the start where we need it
// if (after_range.setEndPoint)
// {
// after_range.setEndPoint("StartToEnd", selection_range);
// }
// var before_finished = false;
// var selection_finished = false;
// var after_finished = false;
// var before_text = null;
// var untrimmed_before_text = null;
// var selection_text = null;
// var untrimmed_selection_text = null;
// var after_text = null;
// var untrimmed_after_text = null;
// // Load the text values we need to compare
// before_text = untrimmed_before_text = before_range.text;
// selection_text = untrimmed_selection_text = selection_range.text;
// after_text = untrimmed_after_text = after_range.text;
// // Check each range for trimmed newlines by shrinking the range by 1 character and seeing
// // if the text property has changed. If it has not changed then we know that IE has trimmed
// // a \r\n from the end.
// do {
// if (!before_finished)
// {
// if (before_range.compareEndPoints("StartToEnd", before_range) == 0)
// {
// before_finished = true;
// } else {
// before_range.moveEnd("character", -1)
// if (before_range.text == before_text)
// {
// untrimmed_before_text += "\r\n";
// }
// else
// {
// before_finished = true;
// }
// }
// }
// if (!selection_finished)
// {
// if (selection_range.compareEndPoints("StartToEnd", selection_range) == 0)
// {
// selection_finished = true;
// }
// else
// {
// selection_range.moveEnd("character", -1)
// if (selection_range.text == selection_text) {
// untrimmed_selection_text += "\r\n";
// } else {
// selection_finished = true;
// }
// }
// }
// if (!after_finished)
// {
// if (after_range.compareEndPoints("StartToEnd", after_range) == 0)
// {
// after_finished = true;
// }
// else
// {
// after_range.moveEnd("character", -1)
// if (after_range.text == after_text)
// {
// untrimmed_after_text += "\r\n";
// }
// else
// {
// after_finished = true;
// }
// }
// }
// } while ((!before_finished || !selection_finished || !after_finished));
// // Untrimmed success test to make sure our results match what is actually in the element
// // This can be removed once you’re confident it’s working correctly
// var untrimmed_text = untrimmed_before_text + untrimmed_selection_text + untrimmed_after_text;
// var untrimmed_successful = false;
// if (element.value == untrimmed_text)
// {
// untrimmed_successful = true;
// }
// // ** END Untrimmed success test
// cursorPosition = untrimmed_before_text.length;
// }
}
return cursorPosition;
}
// code from https://topic.csdn.net/t/20020130/09/507998.html
// and https://forums.asp.net/t/1304151.aspx
function cursorPosition2(txt1) {
//var txt1=document.getElementById("TextBox1");
var currentRange=document.selection.createRange();
var workRange=currentRange.duplicate();
txt1.select();
var allRange=document.selection.createRange();
var len=0;
while(workRange.compareEndPoints("StartToStart",allRange)>0)
{
workRange.moveStart("character",-1);
len++;
}
currentRange.select();
// window.alert(len);
return len;
}
function getFormElementsAsParameterString(form) {
var parameterString = '';
if (form && form.elements) {
var elementCount = form.elements.length;
var element = null;
var elementType = null;
var elementParameterString = null;
var elementValue = null;
for (var i = 0; i < elementCount; i++) {
element = form.elements[i];
elementType = element.type.toUpperCase();
elementParameterString = null;
elementValue = null;
if (/(TEXT(AREA|)|HIDDEN|BUTTON)/.test(elementType)) {
elementValue = element.value;
}
else if (elementType == 'SELECT-ONE') {
elementValue = element.options[element.selectedIndex].value;
}
else if (elementType == 'SELECT-MULTIPLE') {
var options = element.options;
var optionCount = options.length;
for (var i = 0; i < optionCount; i++) {
if (options[i].selected) {
if (elementParameterString) {
elementParameterString += '&';
}
else {
elementParameterString = '';
}
elementParameterString += element.name
+ '=' + encodeURIComponent(options[i].value);
}
}
}
else if (elementType == 'RADIO') {
if (element.checked) {
elementValue = element.value;
}
}
else if (elementType == 'CHECKBOX') {
if (element.checked) {
elementValue = element.value || 'on';
}
}
else {
error('Unexpected element type: ' + elementType);
}
if (elementValue != null && elementValue != 'null') {
// shouldn't get here in case of multi-select
elementParameterString = element.name
+ '=' + encodeURIComponent(elementValue);
}
if (elementParameterString && elementParameterString != 'null') {
if (parameterString && parameterString.length > 0) {
parameterString += '&';
}
parameterString += elementParameterString;
}
}
}
return parameterString;
}
// from https://webforumz.com/blogs/spinal007/random-string-in-javascript-210/
function rnd(){ return String((new Date()).getTime()).replace(/\D/gi,'') }
// from https://stackoverflow.com/questions/960293/window-open-returns-undefined-or-null-on-2nd-call
function openWindow(url, name, props) {
if (document.all){ //do this only in IE
var windowRef = window.open("", name, props);
if (windowRef != null) {
windowRef.close();
}
}
var windowRef = window.open(url, name, props);
if (windowRef == null) {
alert('Could not open window to url ' + url);
} else {
if (!windowRef.opener) {
windowRef.opener = self;
}
windowRef.focus();
}
return windowRef;
}
function openWindow(target, windowName, width, height) {
window.open(target, windowName,'scrollbars=yes,width=' + width
+ ',height=' + height + ',resizable=yes,menubar=no,toolbar=no');
return false;
}
function toHex(value) {
var hexValue = '';
var remainder = 0;
var digit = '';
var hexDigits = 'ABCDEF';
if (value != null) {
while (value > 0) {
remainder = value & 15;
if (remainder < 10) {
digit = '' + remainder;
}
else if (remainder < 16) {
digit = hexDigits[remainder - 10];
}
hexValue = digit + hexValue;
value = value >> 4;
}
}
return hexValue;
}
function generateRandomHexString(length) {
var rndString = '';
var rndValue = 0;
var hexValue = '';
if (length != null) {
while (rndString.length < length) {
rndValue = Math.floor(10000000000 * Math.random());
hexValue = toHex(rndValue);
rndString += hexValue;
}
}
return rndString;
}
function round(number, digitsAfterDecimal) {
var rounded = NaN;
if (number != null
&& digitsAfterDecimal != null) {
try {
if (number == 0) {
rounded = 0;
}
else if (digitsAfterDecimal == 0) {
rounded = Math.round(number);
}
else {
var scale = Math.pow(10, digitsAfterDecimal);
rounded = Math.round(number * scale)/scale;
}
}
catch (e) {
}
}
return rounded;
}
Number.prototype.round = function(digitsAfterDecimal) {
var n = this;
if (this != null && !isNaN(this)) {
n = round(this, digitsAfterDecimal);
}
return n;
}
// createRandom... functions are
// based on https://www.mauvecloud.net/textgen.html
function createRandomAlphaNumericString(minsize, maxsize) {
var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var alnum = alpha + '0123456789';
return createRandomText(alpha, alnum, minsize, maxsize);
}
function createRandomText(startvalid, validchars, minsize, maxsize) {
var textout = '';
var count = 0;
var actualsize = 0;
if (minsize <= 0)
{
window.alert("Minimum Text Size must be at least 1!");
return;
}
if (maxsize < minsize)
{
window.alert("Maximum Text Size cannot be smaller than Minimum!");
return;
}
actualsize = Math.floor(Math.random() * (maxsize - minsize + 1)) + minsize;
textout = startvalid.charAt(Math.floor(Math.random() * startvalid.length));
for (count = 1; count < actualsize; count++) {
textout += validchars.charAt(Math.floor(Math.random()
* validchars.length));
}
return textout;
}
function sleep(millis) {
var start=new Date();
for (var end=start; end-start 0) {
var cookieList = cookieString.split(';');
for (index = 0; index < cookieList.length; index++) {
var cookiePair = cookieList[index].split('=');
if (cookiePair != null && cookiePair.length == 2) {
setCookie(cookiePair[0], cookiePair[1]);
}
}
}
}
function getCookie(name) {
var value = null;
if (cookieMap == null) {
resetCookieMap();
}
if (name != null) {
value = cookieMap[name.trim()];
}
return value;
}
function setCookie(name, value) {
if (cookieMap == null) {
resetCookieMap();
}
if (cookieMap != null
&& name != null
&& name.length > 0) {
cookieMap[name.trim()] = value;
}
}
// add rows to tables when the rows contain form widgets
function addInputRow(divElementId, offset)
{
addInputRow(divElementId, offset, false);
}
function addInputRow(divElementId, offset, discharge)
{
return addMatchingInputRow(divElementId, offset, null, discharge);
}
// adds input row to table inside
// div w/passed-in element id
// divElementId: id of div containing table.
// offset: number of rows before last row
// at which to insert the new row.
// elementPattern: if non-null, is pattern which one id
// must match in order for row to be duplicated.
function addMatchingInputRow(divElementId, offset, elementPattern, discharge)
{
trace('addMatchingInputRow offset=' + offset);
var focusTarget = null;
var divElement = document.getElementById(divElementId);
if (divElement && divElement.childNodes && divElement.childNodes.length > 0)
{
var formDataTable = getChildByNodeName(divElement, 'TABLE');
if (formDataTable)
{
var lastFieldRowIndex = -1;
var lastFieldRow = null;
var lastFieldRowCells = null;
trace('formDataTable=' + formDataTable);
var inputElements = [];
var tbody = getChildByNodeName(formDataTable, "TBODY");
trace('tbody=' + tbody);
var rowCount = -1;
var inputElementsForCell = [];
var inputElementIdSuffix = 0;
var lastRow = 0;
if (tbody && tbody.childNodes && tbody.childNodes.length > 0)
{
var trows = getChildrenByNodeName(tbody, "TR");
trace('trows=' + trows);
rowCount = trows.length;
if (rowCount > 0)
{
var currentRow = null;
var cells = null;
var lastFieldRowIndex = -1;
var fieldRowCount = 0;
lastFieldRowIndex = -1;
for (var rowIndex = 0;
rowIndex < rowCount;
rowIndex++)
{
currentRow = trows[rowIndex];
cells = getChildrenByNodeName(currentRow, "TD");
if (cells)
{
trace("rowIndex=" + rowIndex + " cells.length=" + cells.length);
}
else
{
trace("rowIndex=" + rowIndex + " cells is null!");
}
inputElementsForCell = [];
for (var i = 0;
i < cells.length;
i++)
{
inputElementsForCell
= getChildrenByNodeNames(cells[i], ['INPUT', 'SELECT', '#text']);
for (var j = inputElementsForCell.length - 1;
j >= 0; j--)
{
if (inputElementsForCell[j].nodeName == '#text'
&& inputElementsForCell[j].data == '\n')
{
inputElementsForCell.splice(j, 1);
}
}
if (inputElementsForCell.length > 0)
{
fieldRowCount++;
var match = /([0-9]+)$/.exec(inputElementsForCell[0].id);
if (match && match.length > 0)
{
var rowIsOk = false;
if (elementPattern == null)
{
rowIsOk = true;
}
else
{
for (var j = 0;
j < inputElementsForCell.length && !rowIsOk;
j++)
{
rowIsOk = elementPattern.test(inputElementsForCell[j].id);
}
}
if (rowIsOk)
{
lastFieldRowIndex = rowIndex;
inputElementIdSuffix = parseInt(match[1]);
}
}
}
}
}
trace("lastFieldRowIndex=" + lastFieldRowIndex
+ " inputElementIdSuffix=" + inputElementIdSuffix);
if (lastFieldRowIndex == 99) {
var btnAddInterruption = document.getElementById("btnAddInterruption");
btnAddInterruption.className = "AssessBtn";
btnAddInterruption.disabled = true;
return true;
}
if (lastFieldRowIndex >= 0)
{
lastFieldRow = trows[lastFieldRowIndex];
lastFieldRowCells = getChildrenByNodeName(lastFieldRow, "TD");
if (lastFieldRowCells)
{
trace("lastFieldRowCells.length=" + lastFieldRowCells.length);
inputElementsForCell = [];
for (var i = 0; i < lastFieldRowCells.length; i++)
{
inputElementsForCell
= getChildrenByNodeNames(lastFieldRowCells[i], ['INPUT', 'SELECT', '#text']);
for (var j = inputElementsForCell.length - 1;
j >= 0; j--)
{
if (inputElementsForCell[j].nodeName == '#text'
&& inputElementsForCell[j].data == '\n')
{
inputElementsForCell.splice(j, 1);
}
}
trace("inputElementsForCell " + i + ":"
+ inputElementsForCell);
inputElements[inputElements.length]
= inputElementsForCell;
}
}
else
{
trace("lastFieldRowCells is null!");
}
}
}
lastRow = lastFieldRowIndex;
trace('inputElements=' + inputElements);
trace('rowCount=' + rowCount);
}
var newRowIndex = rowCount - offset;
var newInputElementIdSuffix;
if (discharge) {
newInputElementIdSuffix = lastRow;
} else {
newInputElementIdSuffix = inputElementIdSuffix + 1;
}
if (inputElements.length > 0)
{
var row = formDataTable.insertRow(newRowIndex);
inputElementsForCell = [];
for (var i = 0; i < inputElements.length; i++)
{
inputElementsForCell = inputElements[i];
trace('cell ' + i + ':' + inputElementsForCell.length + ' elements.');
var cell = row.insertCell(i);
var modelCell = lastFieldRowCells[i];
cell.vAlign = modelCell.vAlign;
//cell.class = modelCell.class;
cell.bgColor = modelCell.bgColor;
var radioElements = 0;
var wantStateCopy = false;
for (var j = 0; j < inputElementsForCell.length; j++)
{
wantStateCopy = false;
if (inputElementsForCell[j].nodeName == '#text')
{
var nodeValue = inputElementsForCell[j].nodeValue;
if (/^[\n\r]+$/.test(nodeValue))
{
continue;
}
cell.appendChild(document.createTextNode(inputElementsForCell[j].nodeValue));
}
else
{
var inputElement = document.createElement(inputElementsForCell[j].nodeName);
inputElement.id = inputElementsForCell[j].id.replace(/[0-9]+$/, newInputElementIdSuffix);
inputElement.name = inputElementsForCell[j].name.replace(/[0-9]+$/, newInputElementIdSuffix);
if (inputElementsForCell[j].className === "hasDatepicker"){
$(inputElement).datepicker({ changeYear: true , changeMonth: true, yearRange: '-100:+5', showOn:'focus'});
$(inputElement).attr('placeholder', 'mm/dd/yyyy');
} else {
inputElement.className = inputElementsForCell[j].className;
}
inputElement.readonly = inputElementsForCell[j].readonly;
//inputElement.style = inputElementsForCell[j].style;
// check if we should copy the value
var wantStateCopyId = inputElementsForCell[j].id + 'WantStateCopy';
var wantStateCopyElement = document.getElementById(wantStateCopyId);
wantStateCopy = wantStateCopyElement;
if (inputElementsForCell[j].tabIndex > 0) {
inputElement.tabIndex = inputElementsForCell[j].tabIndex + inputElements.length;
}
if (inputElementsForCell[j].onchange)
{
inputElement.onchange = inputElementsForCell[j].onchange;
}
if (inputElementsForCell[j].onclick)
{
inputElement.onclick = inputElementsForCell[j].onclick;
}
if (inputElementsForCell[j].onkeyup)
{
inputElement.onkeyup = inputElementsForCell[j].onkeyup;
}
trace('inputElement.id=' + inputElement.id
+ ' inputElement.name=' + inputElement.name
+ ' inputElement.type=' + inputElement.type
+ ' inputElement.className=' + inputElement.className);
if (inputElement.nodeName == 'INPUT')
{
inputElement.type = inputElementsForCell[j].type;
if (inputElement.type == 'text')
{
if (inputElementsForCell[j].size
&& inputElementsForCell[j].size > 0)
{
inputElement.size = inputElementsForCell[j].size;
}
if (inputElementsForCell[j].maxLength
&& inputElementsForCell[j].maxLength > 0)
{
inputElement.maxLength = inputElementsForCell[j].maxLength;
}
trace(' inputElement.size=' + inputElement.size);
trace(' inputElement.maxLength=' + inputElement.maxLength);
if (wantStateCopy)
{
inputElement.value = inputElementsForCell[j].value;
}
}
else if (inputElement.type == 'radio')
{
inputElement.value = inputElementsForCell[j].value;
inputElement.checked = false;
if (wantStateCopy)
{
inputElement.checked = inputElementsForCell[j].checked;
}
radioElements++;
}
else if (inputElement.type == 'checkbox')
{
if (wantStateCopy)
{
inputElement.checked = inputElementsForCell[j].checked;
}
}
}
else if (inputElement.nodeName == 'SELECT')
{
var oldOptions = inputElementsForCell[j].options;
var newOptions = inputElement.options;
for (var k = 0; k < oldOptions.length; k++)
{
var option = createOption(
//ie ? oldOptions[k].label : oldOptions[k].text,
oldOptions[k].text,
oldOptions[k].value,
oldOptions[k].label);
if (wantStateCopy)
{
option.selected = oldOptions[k].selected;
}
newOptions[newOptions.length] = option;
trace('option text=' + option.text
+ ' value=' + option.value
+ ' label=' + option.label);
}
}
cell.appendChild(inputElement);
if (focusTarget == null &&
!(inputElement.nodeName == 'INPUT'
&& inputElement.type.toUpperCase() == 'HIDDEN'))
{
focusTarget = inputElement;
}
}
} // loop over inputElementsForCell
} // loop over inputElements
} // if (inputElements.length > 0)
} // if (formDataTable)
} // if (divElement ...)
if (focusTarget != null)
{
setFocus(focusTarget);
}
}
function updateTextStatusFromControllerById(controllerId, textElementId)
{
updateTextInputStatusFromController(document.getElementById(controllerId),
document.getElementById(textElementId));
}
function updateTextStatusFromController(controller, textElement)
{
if (exists(textElement)
&& textElement.type == 'text'
&& exists(controller)) {
if (controller.type == 'radio'
|| controller.type == 'checkbox') {
textElement.disabled
= controller.checked == false;
}
else if (controller.type.toUpperCase() == 'SELECT-ONE') {
textElement.disabled
= !isOptionSelectedByText(controller, 'Other');
}
}
}
function updateTextStatusAndHiddenFromController(controller, textElement, hidElement)
{
if (exists(hidElement)
&& hidElement.type == 'hidden') {
updateTextStatusFromController(controller, textElement);
if (textElement.disabled) {
hidElement.value = textElement.value;
}
}
}
function updateTextStatusFromControllerByPattern(controller, textElement, pattern)
{
if (exists(textElement)
&& textElement.type == 'text'
&& exists(controller)) {
if (controller.type.toUpperCase() == 'SELECT-ONE') {
textElement.disabled
= !isOptionSelectedByRegexp(controller, pattern);
}
}
}
function updateTextsFromControllerByPattern(controller, textElement, hidElement, pattern)
{
if (exists(hidElement)
&& hidElement.type == 'hidden') {
updateTextStatusFromControllerByPattern(controller, textElement, pattern);
if (textElement.disabled) {
hidElement.value = textElement.value;
}
}
}
function updateTextFromSelect(selectElement, textElement) {
if (exists(textElement)
&& textElement.type == 'text'
&& exists(selectElement)
&& selectElement.type.toUpperCase() == 'SELECT-ONE') {
var options = getSelectedOptionsByElement(selectElement);
if (options != null
&& options.length > 0) {
var textValue = options[0].text || options[0].label;
if (textValue.toLowerCase().indexOf("select one") < 0) {
textElement.value = textValue;
}
}
}
}
function updateTextFromText(srcTextElement, dstTextElement) {
if (exists(dstTextElement)
&& dstTextElement.type == 'text'
&& exists(srcTextElement)
&& srcTextElement.type == 'text') {
dstTextElement.value = srcTextElement.value;
}
}
function updateChoiceFromTextById(textElementId, choiceElementId) {
updateChoiceFromText(document.getElementById(textElementId),
document.getElementById(choiceElementId));
}
function updateChoiceFromText(textElement, choiceElement) {
if (exists(textElement)
&& textElement.type == 'text'
&& exists(choiceElement)
&& (choiceElement.type == 'radio'
|| choiceElement.type == 'checkbox')) {
choiceElement.checked
= textElement.value.length > 0;
}
}
function updateAssociatedTexts(controller,
textElements,
controllerLabel,
previousControllerState) {
try {
if (exists(controller)
&& exists(textElements)) {
if (!exists(controllerLabel)) {
controllerLabel = "Controller";
}
if (controller.type.toUpperCase() == "SELECT-ONE") {
if (exists(previousControllerState)) {
var options = controller.options;
var selectedIndex = controller.selectedIndex;
if (options != null
&& selectedIndex != null
&& selectedIndex >= 0
&& selectedIndex < options.length) {
// find the index with a corresponding text-element which is not
// empty. there should be at most one, so take the first.
// if there is no text-element index: just
// make the corresponding text element
// writeable.
// if there is a text-element index:
// if the index is the same as the selected index, do nothing. (this shouldn't happen
// if this function is called as an onChange handler.
// if the text-el. index is different thn the
// selected index, show the confirmation
// dialog.
// if confirmation is received, clear current text-el and set
// it to readonly.
// make the text-el corresponding to selected index writeable.
// save controller state in hidden variable for next time.
// if confirmation is not received restore controller state.
var wantRestore = false;
var currentTextElement = null;
var nonBlankTextIndex = -1;
var nonBlankTextElement = null;
for (var index = 0;
index < textElements.length
&& nonBlankTextIndex < 0;
index++) {
currentTextElement = textElements[index];
if (currentTextElement != null) {
if (currentTextElement.value
&& currentTextElement.value.trim().length > 0) {
nonBlankTextIndex = index;
nonBlankTextElement = currentTextElement;
}
}
}
var selectedTextElement = textElements[selectedIndex];
if (nonBlankTextIndex < 0) {
for (var index = 0;
index < textElements.length;
index++) {
currentTextElement = textElements[index];
if (currentTextElement != null) {
currentTextElement.readonly = index != selectedIndex;
currentTextElement.disabled = index != selectedIndex;
}
}
}
else {
if (nonBlankTextIndex == selectedIndex) {
// We end up here when the form is first loaded.
for (var index = 0;
index < textElements.length;
index++) {
currentTextElement = textElements[index];
if (currentTextElement != null) {
currentTextElement.readonly = index != selectedIndex;
currentTextElement.disabled = index != selectedIndex;
}
}
}
else {
if (confirm("Changing your selection for '"
+ controllerLabel
+ "' will clear the text '"
+ nonBlankTextElement.value
+ "'. Continue?")) {
nonBlankTextElement.value = '';
fireEvent(nonBlankTextElement, 'change', 'HTMLEvents');
nonBlankTextElement.readonly = true;
nonBlankTextElement.disabled = true;
if (exists(selectedTextElement)) {
selectedTextElement.readonly = false;
selectedTextElement.disabled = false;
}
}
else {
wantRestore = true;
if (exists(selectedTextElement)) {
selectedTextElement.readonly = true;
selectedTextElement.disabled = true;
}
}
}
}
if (wantRestore) {
// restore old value of select.
controller.selectedIndex
= previousControllerState.value;
}
else {
previousControllerState.value
= controller.selectedIndex;
}
} // select options exist & selected index is valid
} // previous controller state exists
} // controller is a single-select drop-down
else if (controller.type.toUpperCase() == 'CHECKBOX') {
var textElement = textElements[0];
if (textElement != null
&& textElement.value
&& textElement.value.trim().length > 0) {
if (controller.checked) {
textElement.readonly = false;
textElement.disabled = false;
}
else {
if (confirm("Changing your selection for '"
+ controllerLabel
+ "' will clear the text '"
+ textElement.value
+ "'. Continue?")) {
textElement.value = '';
fireEvent(textElement, 'change', 'HTMLEvents');
textElement.readonly = true;
textElement.disabled = true;
controller.checked = false;
}
else {
// restore old value of checkbox.
controller.checked = true;
}
}
}
else {
if (controller.checked) {
textElement.readonly = false;
textElement.disabled = false;
}
else {
textElement.readonly = true;
textElement.disabled = true;
}
}
}
} // controller form element and text element array exist
}
catch (e) {
alert("Exception in updateAssociatedTexts:" + e);
}
//return ie;
}
function clearTableCell(divElementId, rowIndex, columnIndex) {
clearTableCellChild(divElementId, rowIndex, columnIndex, null);
}
function clearTableCellChild(divElementId, rowIndex, columnIndex, childIndex) {
var divElement = document.getElementById(divElementId);
if (divElement && divElement.childNodes
&& divElement.childNodes.length > 0) {
var formDataTable = getChildByNodeName(divElement, 'TABLE');
if (formDataTable) {
var tbody = getChildByNodeName(formDataTable, "TBODY");
var rowCount = -1;
if (tbody && tbody.childNodes
&& tbody.childNodes.length > 0) {
var trows = getChildrenByNodeName(tbody, "TR");
rowCount = trows.length;
if (rowCount > 0) {
var targetRowIndex = rowIndex < 0
? rowCount + rowIndex : rowIndex;
if (targetRowIndex >= 0 && targetRowIndex < rowCount) {
var targetRow = trows[targetRowIndex];
var cells = getChildrenByNodeName(targetRow, "TD");
var cellCount = cells.length;
if (cellCount > 0) {
var targetColumnIndex = columnIndex < 0
? cellCount + columnIndex : columnIndex;
if (targetColumnIndex >= 0 && targetColumnIndex < cellCount) {
var cell = cells[targetColumnIndex];
if (cell) {
if (childIndex == null) {
removeChildren(cell);
}
else {
var nodes = cell.childNodes;
if (nodes) {
var nodeCount = nodes.length;
if (nodeCount > 0) {
var targetChildIndex = childIndex < 0
? nodeCount + childIndex : childIndex;
if (targetChildIndex >= 0 && targetChildIndex < nodeCount) {
cell.removeChild(nodes[targetChildIndex]);
} // target node exists
} // > 0 nodes
} // nodes array exists
} // child index was passed to func.
} // target cell exists
} // target column exists
} // row has > 0 cells
} // row's cell array exists
} // > 0 rows in table
} // table body exists & its array of rows exists
} // table exists
} // div containing table exists
} // clearTableCellChild
function findLeastHighCutPointIndex(value, cutPoints, inclusive) {
// if inclusive is false, finds the index of the least cut point
// in the array cutPoints which exceeds the value.
// if inclusive is true then find the index of the least cut point
// which equals or exceeds the value.
//
var cutPointIndex = null;
try {
if (value != null
&& cutPoints != null
&& cutPoints.length > 0) {
cutPointIndex = -1;
for (var i = 0;
i < cutPoints.length
&& cutPointIndex == -1;
i++) {
if ((inclusive && value <= cutPoints[i])
|| (!inclusive && value < cutPoints[i])) {
cutPointIndex = i;
}
}
if (cutPointIndex == -1) {
// value exceeds the highest cut point
cutPointIndex = cutPoints.length;
}
}
}
catch (e) {
error('findLeastHighCutPointIndex:' + e);
}
return cutPointIndex;
}
function findHighCutPointIndex(value, cutPoints, inclusive_flags) {
// if inclusive_flags[i] is false, finds the index of the least cut point
// in the array cutPoints which exceeds the value.
// if inclusive_flags[i] is true then find the index of the least cut point
// which equals or exceeds the value.
// cutPoints should be passed in sorted order
var cutPointIndex = null;
try {
if (value != null
&& cutPoints != null
&& cutPoints.length > 0
&& inclusive_flags != null
&& inclusive_flags.length == cutPoints.length) {
cutPointIndex = -1;
for (var i = 0;
i < cutPoints.length
&& cutPointIndex == -1;
i++) {
if ((inclusive_flags[i] && value <= cutPoints[i])
|| (!inclusive_flags[i] && value < cutPoints[i])) {
cutPointIndex = i;
}
}
if (cutPointIndex == -1) {
// value exceeds the highest cut point
cutPointIndex = cutPoints.length;
}
}
}
catch (e) {
error('findLeastHighCutPointIndex:' + e);
}
return cutPointIndex;
}
// Thanks to
// https://lea.verou.me/2009/02/check-if-a-css-property-is-supported/
function isCSSPropertySupported(property) {
return property in document.body.style;
}
// selectorSupported lovingly lifted from the mad italian genius, diego perini
// https://javascript.nwbox.com/CSSSupport/
function isCSSSelectorSupported(selector){
var support, link, sheet, doc = document,
root = doc.documentElement,
head = root.getElementsByTagName('head')[0],
impl = doc.implementation || {
hasFeature: function() {
return false;
}
},
link = doc.createElement("style");
link.type = 'text/css';
(head || root).insertBefore(link, (head || root).firstChild);
sheet = link.sheet || link.styleSheet;
if (!(sheet && selector)) return false;
support = impl.hasFeature('CSS2', '') ?
function(selector) {
try {
sheet.insertRule(selector + '{ }', 0);
sheet.deleteRule(sheet.cssRules.length - 1);
} catch (e) {
return false;
}
return true;
} : function(selector) {
sheet.cssText = selector + ' { }';
return sheet.cssText.length !== 0 && !(/unknown/i).test(sheet.cssText) && sheet.cssText.indexOf(selector) === 0;
};
return support(selector);
};
function setMapValue(map, keys, value) {
try {
if (map != null
&& exists(map.length)
&& keys != null
&& exists(keys.length)) {
for (var i = 0; i < keys.length; i++) {
map[keys[i]] = value;
}
}
}
catch (e) {
error("setMapValue: " + e);
}
}
function setMapValues(map, keys, values) {
try {
if (map != null
&& exists(map.length)
&& keys != null
&& exists(keys.length)
&& values != null
&& exists(values.length)
&& keys.length == values.length) {
for (var i = 0; i < keys.length; i++) {
map[keys[i]] = values[i];
}
}
}
catch (e) {
error("setMapValues: " + e);
}
}
function localParseInt(s) {
var intValue = null;
try {
if (s != null && s.trim() != '') {
var match = PARSEABLE_NUMERIC_REGEXP.exec(s);
if (match && match.length == 2) {
intValue = parseInt(match[1]);
}
}
} catch (e) {
alert("Problem: Could not parse string " + s + " as an integer.");
}
return intValue;
}
function parseDate(s) {
var aDate = null;
try {
if (s != null && s.trim() != '') {
s = s.trim();
var match = DATE_REGEXP.exec(s);
if (match && match.length >= 4) {
if (match[3] != null && match[3].trim().length > 0) {
month = localParseInt(match[1]);
day = localParseInt(match[2]);
year = localParseInt(match[3]);
}
else if (match.length >= 7 && match[6].trim().length > 0) {
month = localParseInt(match[4]);
day = localParseInt(match[5]);
year = localParseInt(match[6]);
}
if (year < 100) {
const currentYear = new Date().getFullYear();
const currentCentury = divide(currentYear, 100);
if (year <= (currentYear % 100 + 1)) {
year += currentCentury * 100;
} else {
year += (currentCentury - 1) * 100;
}
}
aDate = new Date(year, month - 1, day);
}
}
} catch (e) {
alert("Problem: Could not parse string " + s + " as a date.");
}
return aDate;
}
function updateIcuCcuStay() {
var hiddensaveWhenUpdateButton = disEnForm.getElementByName("saveWhenUpdateButton");
if (hiddensaveWhenUpdateButton) {
hiddensaveWhenUpdateButton.value = 1;
}
var radioButton = disEnForm.getElementByName("radICUCCUStayExistence");
if (radioButton) {
radioButton[0].removeAttribute('disabled');
radioButton[1].removeAttribute('disabled');
radioButton[2].removeAttribute('disabled');
radioButton[3].removeAttribute('disabled');
if (radioButton.value == 1 || radioButton[1].checked) {
var button = disEnForm.getElementByName("btnAddIcuCcuStay");
if (button) {
button.removeAttribute('disabled');
button.removeAttribute('readonly');
button.className = "AssessBtn";
//button.className = "TopNavBtn";
}
var totalDays = disEnForm.getElementByName("txtICUCCUStayTotalDays");
if(totalDays) {
totalDays.removeAttribute('disabled');
totalDays.removeAttribute('readonly');
}
return updateIcuCcuStayDates(0);
}
} else {
return false;
}
}
function updateIcuCcuStayDates(index) {
var newIndex = index;
var admitDate = disEnForm.getElementByName("txtIcuCcuAdmitDate" + newIndex);
var transferDate = disEnForm.getElementByName("txtIcuCcuTransferDate" + newIndex);
if (admitDate && transferDate) {
admitDate.removeAttribute('disabled');
transferDate.removeAttribute('disabled');
admitDate.removeAttribute('readonly');
transferDate.removeAttribute('readonly');
newIndex = index + 1;
return updateIcuCcuStayDates(newIndex);
} else {
return false;
}
}
function clearIcuCcuStay(type) {
var array = ["txtIcuCcuAdmitDate", "Admit Date", "txtIcuCcuTransferDate", "Transfer Date"];
var message = "Changing your selection for 'ICU/CCU Stay' will clear any information entered in this section. Continue?";
return disableAddMoreSectionLTRAX.disableRadio('radICUCCUStayExistence', message, array, type, 'btnAddIcuCcuStay', 'txtICUCCUStayTotalDays');
}
function disButtonByNameLTRAX(buttonName, disable){
if (buttonName === "btnAddIcuCcuStay")
{
var myButton = disEnForm.getElementByName(buttonName);
if (myButton){
myButton.disabled = (disable !== undefined ? disable : !myButton.disabled);
myButton.className = (myButton.disabled ? "TopNavBtnDis" :"AssessBtn");
}
}
else if (buttonName)
{
var myButton = disEnForm.getElementByName(buttonName);
if (myButton){
myButton.disabled = (disable !== undefined ? disable : !myButton.disabled);
myButton.className = (myButton.disabled ? "TopNavBtnDis" :"TopNavBtn");
}
}
}
var disableAddMoreSectionLTRAX = new function(){
var type = undefined;
return {
disableRadio : function (nameElement, message, arrayName, type, buttonName, totalDaysFieldName) {
return checkDependentElementWithMessageLTRAX(nameElement, message, true, true, this.collect(arrayName, type, totalDaysFieldName), function(disable)
{
disButtonByNameLTRAX(buttonName, disable);
});
},
disableArray : function(nameElement, arrayName, type) {
return checkDependentElementWithMessageLTRAX(nameElement, null, false, true, this.collect(arrayName, type, totalDaysFieldName));
},
disableTotalDays : function(nameElement, type) {
if (nameElement)
{
var dayField = disEnForm.getElementByName(nameElement);
if (dayField){
dayField.disabled = true;
}
}
},
collect : function (array, typeNew, totalDaysFieldName) {
var arrayDisable = [];
if (array && array.constructor == Array && typeNew) {
type = typeNew;
var beginIndex = 0;
while (disEnForm.getElementByName(this.generateElementName(array[0], type, beginIndex)))
{
for (var i = 0 ; i < array.length; i++)
arrayDisable.push(this.generateElementName(array[i], type, beginIndex));
beginIndex++;
}
arrayDisable.push(totalDaysFieldName);
arrayDisable.push("Total Days");
return arrayDisable;
}else return [];
},
generateElementName : function (elementName, type, index) {
return (elementName + index);
}
};
}();
function checkDependentElementWithMessageLTRAX(elementName, message, clearOnCheck, disable, dependants, callback) {
message = message == null ? "Deselecting this will clear the following: %fields%. Continue?" : message;
var element = eval("document.frmIRFPAI." + elementName);
if (!element || !dependants || !dependants.length || dependants.length < 2 || dependants.length % 2 != 0) return false;
var sFields = "";
var firstValue = "";
var elementRadioValue = getElementValue(element);
if ((element.checked || ( elementRadioValue != "1")) == clearOnCheck) {
for (var i=0; i 0)){
if (sFields.length > 0)
sFields += ", ";
sFields += dependants[i+1];
}
}
if ( (sFields.length > 0 && confirm(message.replace(/%fields%/, sFields).replace(/%firstValue%/, firstValue))) || (sFields.length == 0) ) {
for (var i=0; i 0){
if (element.length > 0 && /INPUT/.test(element[0].nodeName) && element[0].type == "radio") {
setElementValue(element[0], "1");
if (callback)
callback(false);
}
return false;
}
if (disable) {
for (var i=0; i