PageSourceSearch

https://www.hunter.org.au/nova_library/javascript/form_validation.js

js hunter.org.au collected 2026-09-29 13:20:55 UTC 10,884 bytes, 423 lines download raw bytes

1var validation_details = new Array();
2
3var addValidationByName = function(field_name, form_id, validation_list, only_validate_when_active)
4{
5	var val_obj = new validationInfo(null, field_name, form_id, validation_list, only_validate_when_active);
6	if(val_obj.field_name != null && val_obj.field_name.length > 0)
7	{
8		validation_details.push(val_obj);
9	}
10}
11
12function addValidation(field_id, validation_list, only_validate_when_active)
13{
14	var val_obj = new validationInfo(field_id, null, null, validation_list, only_validate_when_active);
15	if(val_obj.field_id != null && val_obj.field_id.length > 0)
16	{
17		validation_details.push(val_obj);
18	}
19}
20
21function initFormValidation()
22{
23//	alert(validation_details.length);
24	for(var i = 0; i < validation_details.length; i++)
25	{
26//		alert(validation_details[i].form_id + '-' + validation_details[i].field_name);
27		new fieldValidation(validation_details[i].field_id, validation_details[i].field_name, validation_details[i].form_id, validation_details[i].validation_list, validation_details[i].only_validate_when_active);
28	}
29	validation_details = new Array();
30}
31// This is a variation of the addEvent script written by Dean Edwards (dean.edwards.name).
32if (!events)
33{
34	var events =
35	{
36		nEventID: 1,
37
38		add: function(ndElement, sType, fnHandler)
39		{
40			if (!fnHandler.$$nEventID) fnHandler.$$nEventID = this.nEventID++;
41			if (ndElement.objEvents === undefined) ndElement.objEvents = {};
42
43			var aHandlers = ndElement.objEvents[sType];
44			if (!aHandlers)
45			{
46				aHandlers = ndElement.objEvents[sType] = {};
47				if (ndElement['on' + sType]) aHandlers[0] = ndElement['on' + sType];
48			}
49
50			aHandlers[fnHandler.$$nEventID] = fnHandler;
51			ndElement['on' + sType] = this.handle;
52
53			return true;
54		},
55
56		handle: function(e)
57		{
58			e = e || events.fix(event);
59
60				var bReturn = true, aHandlers = this.objEvents[e.type];
61				for (var nIndex in aHandlers)
62				{
63					this.$$handle = aHandlers[nIndex];
64					if (this.$$handle(e) === false) bReturn = false;
65				}
66
67				return bReturn;
68		},
69
70		fix: function(e)
71		{
72			e.preventDefault = this.fix.preventDefault;
73			e.stopPropagation = this.fix.stopPropagation;
74
75			return e;
76		}
77	};
78
79	events.fix.preventDefault = function()
80	{
81		this.returnValue = false;
82
83		return true;
84	}
85
86	events.fix.stopPropagation = function()
87	{
88		this.cancelBubble = true;
89
90		return true;
91	}
92}
93events.add(window, 'load', initFormValidation);
94/*addLoadEvent(initFormValidation);*/
95function validationInfo(field_id, field_name, form_id, validation_list, only_validate_when_active)
96{
97	this.field_id = field_id;
98	this.field_name = field_name;
99	this.form_id = form_id;
100	this.validation_list = validation_list;
101	if(only_validate_when_active == null)
102	{
103		this.only_validate_when_active = false;
104	}
105	else
106	{
107		this.only_validate_when_active = only_validate_when_active;
108	}
109}
110function validateForm(form)
111{
112	var success = true;
113	var focusElement = "";
114	var element = null;
115	
116	for(var i = form.elements.length - 1; i > -1; i--)
117	{
118		if(form.elements[i].validate)
119		{
120			if(!form.elements[i].validate.validate())
121			{
122				element = form.elements[i];
123				success = false;
124			}
125		}
126	}
127	if(element != null && element.type != "hidden")
128	{
129		element.focus();
130	}
131	return success;
132}
133/*** Build up the field validation object ***/
134function fieldValidation(field_id, field_name, form_id, validation_list, only_validate_when_active)
135{
136	// <!--- Set the basic details of the form field --->
137	this.field_id = field_id;
138	this.field_name = field_name;
139	this.form_id = form_id;
140	this.validation = validation_list.split(",");
141	this.only_validate_when_active = only_validate_when_active;
142	this.validate = validate;
143	this.getValue = getValue;
144	this.isDisabled = isDisabled;
145	
146	// <!--- Set the fields related objects --->
147	if(this.field_id != null)
148	{
149		var field_obj = document.getElementById(this.field_id);
150
151	}
152	else if(field_name != null && form_id != null)
153	{
154		var form_elements = document.getElementById(form_id).elements;
155		if(form_elements.length != null)
156		{
157			for(var i = 0; i < form_elements.length; i++)
158			{
159				if(form_elements[i].name == field_name)
160				{
161					field_obj = form_elements[i];
162					break;
163				}
164			}
165		}
166	}
167
168	if(field_obj != null)
169	{
170		if(field_obj.tagName == "INPUT" && (field_obj.type == "radio" || field_obj.type == "checkbox"))
171		{
172			this.related_fields_name = field_obj.name;
173		}
174		else
175		{
176			this.related_fields_name = "";
177		}
178		this.parent_node = field_obj.parentNode;
179		var sibling_spans = this.parent_node.getElementsByTagName("span");
180		this.invalid_span = null;
181		// <!--- Try and find the span for the fields error messages --->
182		for(var i = 0; i < sibling_spans.length; i++)
183		{
184			if(sibling_spans[i].className == " invalid_field")
185			{
186				this.invalid_span = sibling_spans[i];
187			}
188		}
189		// <!--- Create the span for inserting error messages into if it doesnt exist--->
190		if(this.invalid_span == null)
191		{
192			this.invalid_span = document.createElement("span");
193			// <!--- this.invalid_span.name = "invalid"; --->
194			this.invalid_span.className = " invalid_field";
195			this.parent_node.appendChild(this.invalid_span);
196		}
197		field_obj.validate = this;
198	}
199}
200function isDisabled()
201{
202	if(this.field_id != null)
203	{
204		return document.getElementById(this.field_id).disabled;
205	}
206	else if(this.field_name != null)
207	{
208		fields = document.getElementsByName(this.field_name);
209		for(var i = 0; i < fields.length; i++)
210		{
211			if(fields[i].form != null && fields[i].form.id == this.form_id)
212			{
213				return fields[i].disabled;
214			}
215		}
216	}
217	return true;
218}
219// <!--- Get the current value entered\selected from the form field --->
220function getValue()
221{
222	value = "";
223	if(this.field_id != null)
224	{
225		var field_obj = document.getElementById(this.field_id);
226	}
227	else if(this.field_name != null && this.form_id !== null)
228	{
229		var elements = document.getElementById(this.form_id).elements;
230		for(var i = 0; i < elements.length; i++)
231		{
232			if(elements[i].name == this.field_name)
233			{
234				var field_obj = elements[i];
235				break;
236			}
237		}
238	}else{
239		return "";
240	}
241	switch(field_obj.tagName)
242	{
243		case "INPUT":
244			if(field_obj.type == "radio" || field_obj.type == "checkbox")
245			{
246				if(field_obj.checked)
247				{
248					value = field_obj.value;
249				}
250				else if(this.related_fields_name.length > 0)
251				{
252					var related_fields = document.getElementsByName(this.related_fields_name);
253					for(var i = 0; i < related_fields.length; i++)
254					{
255						if(related_fields[i].checked)
256						{
257							value = related_fields[i].value;
258							break;
259						}
260					}
261				}
262			}
263			else
264			{
265				value = field_obj.value;
266			}
267			break;
268		case "SELECT":
269			if(field_obj.selectedIndex != -1)
270			{
271				value = field_obj.options[field_obj.selectedIndex].value;
272			}
273			break;
274		case "TEXTAREA":
275			value = field_obj.value;
276			break;
277		default:
278	}
279	return value;
280}
281
282function validate()
283{
284	var messages = new Array();
285
286	if((this.only_validate_when_active && !this.isDisabled()) || !this.only_validate_when_active)
287	{
288		var value = this.getValue();
289		for(var i = 0; i < this.validation.length; i++)
290		{
291			switch(this.validation[i])
292			{
293				case "required":
294					if(value.length < 1)
295					{
296						messages.push("Not Supplied");
297					}
298					break;
299				case "max_length":
300					if(!isNaN(this.validation[i + 1]))
301					{
302						i += 1;
303						if(value.length > parseInt(this.validation[i]))
304						{
305							messages.push("Cannot be longer than " + this.validation[i] + " characters");
306						}
307					}
308					break;
309				case "min_length":
310					if(!isNaN(this.validation[i + 1]))
311					{
312						i += 1;
313						if(value.length < parseInt(this.validation[i]))
314						{
315							messages.push("Cannot be shorter than " + this.validation[i] + " characters");
316						}
317					}
318					break;
319				case "length":
320					if(!isNaN(this.validation[i + 1]))
321					{
322						i += 1;
323						if(value.length != parseInt(this.validation[i]))
324						{
325							messages.push("Must be " + this.validation[i] + " characters");
326						}
327					}
328					break;
329				case "is_date":
330					var date_pattern = new RegExp("^[0-9]{2}/[0-9]{2}/[0-9]{4}$");
331					if(!value.match(date_pattern) && value.length > 0)
332					{
333						messages.push("Not valid date");
334					}
335					break;
336				case "not_equal":
337					i += 1;
338					if(value == this.validation[i])
339					{
340						messages.push("Cannot equal '" + this.validation[i] + "'");
341					}
342					break;
343				case "greater_or_equal":
344					if(!isNaN(this.validation[i + 1]))
345					{
346						i += 1;
347						if(value < parseFloat(this.validation[i]))
348						{
349							messages.push("Cannot be less than '" + this.validation[i] + "'");
350						}
351					}
352					break;
353				case "less_or_equal":
354					if(!isNaN(this.validation[i + 1]))
355					{
356						i += 1;
357						if(value > parseFloat(this.validation[i]))
358						{
359							messages.push("Cannot be greater than '" + this.validation[i] + "'");
360						}
361					}
362					break;
363				case "is_email":
364					var email_pattern = new RegExp("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$");
365					if(!value.match(email_pattern) && value.length > 0)
366					{
367						messages.push("Not a valid email");
368					}
369					break;
370				case "is_year":
371					var year_pattern = new RegExp("^[0-9]{4}$");
372					if(!value.match(year_pattern) && value.length > 0)
373					{
374						messages.push("Not a valid year");
375					}
376					break;
377				case "is_whole_number":
378					if((isNaN(value) || parseFloat(value) - parseInt(value, 10) != 0) && value.length > 0)
379					{
380						messages.push("Not a whole number");
381					}
382					break;
383				case "is_number":
384					if(isNaN(value) && value.length > 0)
385					{
386						messages.push("Not a valid number");
387					}
388					break;
389				case "is_phone":
390					var phone_pattern = new RegExp(/^(\+[0-9]+)?(\([0-9]+\))?[0-9]{7,11}$/);
391					if(!value.match(phone_pattern) && value.length > 0)
392					{
393						messages.push("Not a valid phone number");
394					}
395					break;
396				case "pwd_validate":
397					if(value!=password2.value)
398					{
399						messages.push("Password does not match");
400					}	
401				default:
402			}
403		}
404	}
405	this.parent_node.className = this.parent_node.className.replace("invalid_field", "");
406	this.invalid_span.innerHTML = "";
407	if(messages.length > 0)
408	{
409		this.parent_node.className = this.parent_node.className + " invalid_field";
410		var innerHTML = "";
411		for(var i = 0; i < messages.length; i++)
412		{
413			innerHTML = innerHTML + messages[i];
414			if(i < messages.length - 1)
415			{
416				innerHTML = innerHTML + "<br />";
417			}
418		}
419		this.invalid_span.innerHTML = innerHTML;
420		return false;
421	}
422	return true;
423}

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.