PageSourceSearch

https://www.erwinsdate.de/js/requiredFields.r40242.js

js erwinsdate.de collected 2026-10-04 03:35:03 UTC 6,347 bytes, 144 lines download raw bytes

1// $Id: requiredFields.js 40191 2026-07-23 08:19:49Z brendon $
2// Just the fundamental required fields function
3
4// Variables to be populated in the HTML
5var requiredFields = new Array; //the fields' names
6var fieldNames = new Array;
7var valStrings = new Array;
8
9// On our big forms looping through all the fields is slow, so let's do it only once.
10var formElementIndex = new Array;
11var formElementIndexInitialised = false;
12
13function initFormElementIndex (formObject) {
14	if (typeof formObject == "undefined") { formObject = document.forms[0]; }
15	var lastElement = '';
16	//alert ('Initialising');
17	for (var i = 0; i < formObject.elements.length; i++) {
18		if (formObject.elements[i].nodeName != "LABEL" && formObject.elements[i].nodeName != "OUTPUT") {
19			// Filter label elements, which are part of elements array in BlackBerry OS 5.x, and undesired
20			if (formObject.elements[i].name != lastElement) {
21				lastElement = formObject.elements[i].name;
22				if (lastElement) { formElementIndex[lastElement] = i; }
23				//alert ('formElementIndex['+lastElement+'] = '+formElementIndex[lastElement]);
24			}
25			//status = (i+1) + '/' + formObject.elements.length;
26		}
27	}
28	formElementIndexInitialised = true;
29	return true;
30}
31
32// Check for population of required fields
33function checkRequiredFields (formObject) {
34	var fieldCheck = true;
35	var fieldFirst = "";
36	var fieldValue, thisField, selIndex, gotFirstElement;
37	var indentation = (navigator.userAgent.indexOf("Chrome") !== -1 && navigator.userAgent.indexOf("Windows") !== -1) ? new Array(9).join(' ') : '\t';
38	var fieldsNeeded = "\n" + valStrings["incompleteFields"] + "\n\n" + indentation;
39	var inputRadio = document.getElementsByClassName('genderRadio');
40
41	//alert ("Checking Required Fields");
42	//alert ('typeof(formObject) is ' + typeof(formObject));
43	//alert ('typeof(formObject.elements) is ' + typeof(formObject.elements));
44	if (!formElementIndexInitialised) { initFormElementIndex(formObject); }
45	// Loop through fields looking for empty or whitespace values, or their analogues in selects & checkboxes
46	for (var fieldNum = 0; fieldNum < requiredFields.length; fieldNum++) {
47		thisField = (requiredFields[fieldNum].match(/^[_~%].*/) ? requiredFields[fieldNum].substr(1) : requiredFields[fieldNum]);
48		//alert ('thisField = ' + thisField);
49		if (typeof formElementIndex[thisField] == "undefined") {
50			alert ("Error: " + thisField + " doesn't exist!");
51		} else {
52			//alert (thisField + ' is not undefined.');
53		}
54		if (requiredFields[fieldNum].substr(0,1) == "_" && inputRadio.length == 0) {
55			//Then we have a select box which requires a non-null value
56			//alert (thisField + ' is a select box.');
57			selIndex = formObject.elements[formElementIndex[thisField]].selectedIndex;
58			//alert (thisField + "'s selectedIndex is "+ selIndex);
59			if (selIndex == -1) {
60				fieldValue = "";
61			} else {
62				fieldValue = formObject.elements[formElementIndex[thisField]].options[selIndex].value;
63			}
64			// since we reset these dropdown elements to their placeholder values, need to validate selection
65			var exceptionRegex = /^(gender|mGender)$/;
66			if (thisField.match(exceptionRegex)) {
67				fieldValue = (fieldValue == "0") ? "" : fieldValue;
68			}
69		} else if (requiredFields[fieldNum].substr(0,1) == "~") {
70			//Then we have a SINGLE checkbox which must be checked
71			//Could be handled by % but the loop is slow
72			fieldValue = (formObject.elements[thisField].checked ? "T" : "");
73		} else if (requiredFields[fieldNum].substr(0,1) == "%") {
74			//Then we have a MULTIPLE checkbox, one of which must be checked
75			gotFirstElement = fieldValue = false;
76			for (var i = formElementIndex[thisField]; i < formObject.elements.length; i++) {
77				if (formObject.elements[i].nodeName != "LABEL") {
78					// Filter label elements, which are part of elements array in BlackBerry OS 5.x, and undesired
79					if (formObject.elements[i].name == thisField) {
80						fieldValue = (fieldValue || formObject.elements[i].checked);
81						if (!gotFirstElement) { gotFirstElement = true; }
82					} else if (gotFirstElement) {
83						break;  // terminate the loop when we go on to another form element.
84					}
85				}
86			}
87			fieldValue = (fieldValue ? "T" : "");
88		} else {
89			//Then we have an ordinary input
90			fieldValue = formObject.elements[formElementIndex[thisField]].value;
91			// since we reset these dropdown elements to their placeholder values, need to validate selection
92			if (inputRadio.length) {
93				var exceptionRegex = /^(gender|mGender)$/;
94				if (thisField.match(exceptionRegex)) {
95					var isChecked = document.querySelector('input[name="gender"]:checked');
96					if (!isChecked) {
97						fieldValue = "";
98					}
99				}
100			}
101		}
102		//alert (requiredFields[fieldNum] + " = [" + fieldValue + "]");
103		if ((fieldValue == "") || (fieldValue.match(/^\s*$/))) {
104			fieldsNeeded += fieldNames[fieldNum] + "\n" + indentation;
105			fieldCheck = false;
106			if (!fieldFirst) { fieldFirst = formElementIndex[thisField]; }
107		}
108	}
109	
110	if (fieldCheck) {
111		return true;
112	} else {
113		alert (fieldsNeeded);
114		//alert ('About to focus formObject.elements[' + fieldFirst + ']');
115		formObject.elements[fieldFirst].focus();
116		return false;
117	}
118}
119
120// function for checking input field value
121// if string value fails validation, display alert, and return focus to input field
122function processInputFieldValue (formElement, alertString, numofCharacters) {
123	// if the length of the input fields value is less than the number of characters required, then clear the input field
124	if (typeof numofCharacters == 'undefined') {
125		numofCharacters = 0;
126	}
127	// prevent infinite alert popups, by introducing a short delay before returning focus to the input field
128	// we capture the input value, for those rare cases when a user either moves to another window or selects another tab
129	var tempFieldValue = formElement.value;
130	alert(alertString);
131	// field needs to be cleared, to prevent infinite alert popups, if focus is moved to another window or another tab is selected
132	// value will be restored inside the setTimeOut
133	formElement.value = "";
134	setTimeout(function() {
135		// return focus to the validated field
136		formElement.focus();
137		// use another setTimeOut to only restore the field value once focus is returned
138		setTimeout(function() {
139			if (tempFieldValue.length >= numofCharacters) {
140				formElement.value = tempFieldValue;
141			}
142		}, 1);
143	}, 1);
144}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.