PageSourceSearch

https://secure.keylife.org/jscripts/formvalidate.js

js keylife.org collected 2026-10-04 00:25:49 UTC 22,289 bytes, 952 lines download raw bytes

1// ------------------------------------------------------------------------------------------
2// Copyright AspDotNetStorefront.com, 1995-2010.  All Rights Reserved.
3// http://www.aspdotnetstorefront.com
4// For details on this license please visit  the product homepage at the URL above.
5// THE ABOVE NOTICE MUST REMAIN INTACT.
6// ------------------------------------------------------------------------------------------
7function Trim(TRIM_VALUE){
8if(TRIM_VALUE.length < 1){
9return"";
10}
11TRIM_VALUE = RTrim(TRIM_VALUE);
12TRIM_VALUE = LTrim(TRIM_VALUE);
13if(TRIM_VALUE==""){
14return "";
15}
16else{
17return TRIM_VALUE;
18}
19} 
20
21function RTrim(VALUE){
22var w_space = String.fromCharCode(32);
23var v_length = VALUE.length;
24var strTemp = "";
25if(v_length < 0){
26return"";
27}
28var iTemp = v_length -1;
29
30while(iTemp > -1){
31if(VALUE.charAt(iTemp) == w_space){
32}
33else{
34strTemp = VALUE.substring(0,iTemp +1);
35break;
36}
37iTemp = iTemp-1;
38
39} 
40return strTemp;
41
42} 
43
44function LTrim(VALUE){
45var w_space = String.fromCharCode(32);
46if(v_length < 1){
47return"";
48}
49var v_length = VALUE.length;
50var strTemp = "";
51
52var iTemp = 0;
53
54while(iTemp < v_length){
55if(VALUE.charAt(iTemp) == w_space){
56}
57else{
58strTemp = VALUE.substring(iTemp,v_length);
59break;
60}
61iTemp = iTemp + 1;
62} 
63return strTemp;
64} 
65
66
67
68var digits = "0123456789";
69var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
70var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
71var whitespace = " \t\n\r";
72
73var decimalPointDelimiter = "."
74
75var phoneNumberDelimiters = "()- ";
76
77var validUSPhoneChars = digits + phoneNumberDelimiters;
78
79var validWorldPhoneChars = digits + phoneNumberDelimiters + "+";
80
81var SSNDelimiters = "- ";
82
83var validSSNChars = digits + SSNDelimiters;
84
85var digitsInSocialSecurityNumber = 9;
86
87var digitsInUSPhoneNumber = 10;
88
89var ZIPCodeDelimiters = "-";
90
91var ZIPCodeDelimeter = "-"
92
93var validZIPCodeChars = digits + ZIPCodeDelimiters
94
95var digitsInZIPCode1 = 5
96var digitsInZIPCode2 = 9
97
98var creditCardDelimiters = " "
99
100function isOkBag (s, bag)
101
102{   var i;
103    var returnString = "";
104
105    for (i = 0; i < s.length; i++)
106    {   
107        var c = s.charAt(i);
108        if (bag.indexOf(c) == -1) return false;
109    }
110    return true;
111}
112
113function isEmpty(s)
114{   return ((s == null) || (s.length == 0))
115}
116
117function isWhiteSpace (s)
118{   var i;
119
120    if (isEmpty(s)) return true;
121
122    for (i = 0; i < s.length; i++)
123    {   
124        var c = s.charAt(i);
125
126        if (whitespace.indexOf(c) == -1) return false;
127    }
128
129    return true;
130}
131
132function stripCharsInBag (s, bag)
133
134{   var i;
135    var returnString = "";
136
137    for (i = 0; i < s.length; i++)
138    {   
139        var c = s.charAt(i);
140        if (bag.indexOf(c) == -1) returnString += c;
141    }
142
143    return returnString;
144}
145
146function stripCharsNotInBag (s, bag)
147
148{   var i;
149    var returnString = "";
150
151    for (i = 0; i < s.length; i++)
152    {   
153        var c = s.charAt(i);
154        if (bag.indexOf(c) != -1) returnString += c;
155    }
156
157    return returnString;
158}
159
160function stripWhitespace (s)
161
162{   return stripCharsInBag (s, whitespace)
163}
164
165function charInString (c, s)
166{   for (i = 0; i < s.length; i++)
167    {   if (s.charAt(i) == c) return true;
168    }
169    return false
170}
171
172function stripInitialWhitespace (s)
173
174{   var i = 0;
175
176    while ((i < s.length) && charInString (s.charAt(i), whitespace))
177       i++;
178    
179    return s.substring (i, s.length);
180}
181
182function isLetter (c)
183{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
184}
185
186function isDigit (c)
187{   return ((c >= "0") && (c <= "9"))
188}
189
190function isLetterOrDigit (c)
191{   return (isLetter(c) || isDigit(c))
192}
193
194
195
196function isInteger (s)
197
198{   var i;
199
200    if (isEmpty(s)) 
201       if (isInteger.arguments.length == 1) return defaultEmptyOK;
202       else return (isInteger.arguments[1] == true);
203
204
205    for (i = 0; i < s.length; i++)
206    {   
207        var c = s.charAt(i);
208
209        if (!isDigit(c)) return false;
210    }
211
212    return true;
213}
214
215function isSignedInteger (s)
216
217{   if (isEmpty(s)) 
218       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
219       else return (isSignedInteger.arguments[1] == true);
220
221    else {
222        var startPos = 0;
223        var secondArg = defaultEmptyOK;
224
225        if (isSignedInteger.arguments.length > 1)
226            secondArg = isSignedInteger.arguments[1];
227
228        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
229           startPos = 1;    
230        return (isInteger(s.substring(startPos, s.length), secondArg))
231    }
232}
233
234function isPositiveInteger (s)
235{   var secondArg = defaultEmptyOK;
236
237    if (isPositiveInteger.arguments.length > 1)
238        secondArg = isPositiveInteger.arguments[1];
239
240    return (isSignedInteger(s, secondArg)
241         && ( (isEmpty(s) && secondArg)  || (parseInt (s) > 0) ) );
242}
243
244function isNonnegativeInteger (s)
245{   var secondArg = defaultEmptyOK;
246
247    if (isNonnegativeInteger.arguments.length > 1)
248        secondArg = isNonnegativeInteger.arguments[1];
249
250    return (isSignedInteger(s, secondArg)
251         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
252}
253
254
255function isNegativeInteger (s)
256{   var secondArg = defaultEmptyOK;
257
258    if (isNegativeInteger.arguments.length > 1)
259        secondArg = isNegativeInteger.arguments[1];
260
261    return (isSignedInteger(s, secondArg)
262         && ( (isEmpty(s) && secondArg)  || (parseInt (s) < 0) ) );
263}
264
265
266function isNonpositiveInteger (s)
267{   var secondArg = defaultEmptyOK;
268
269    if (isNonpositiveInteger.arguments.length > 1)
270        secondArg = isNonpositiveInteger.arguments[1];
271
272    return (isSignedInteger(s, secondArg)
273         && ( (isEmpty(s) && secondArg)  || (parseInt (s) <= 0) ) );
274}
275
276
277function isFloat (s)
278
279{   var i;
280    var seenDecimalPoint = false;
281
282    if (isEmpty(s)) 
283       if (isFloat.arguments.length == 1) return defaultEmptyOK;
284       else return (isFloat.arguments[1] == true);
285
286    if (s == decimalPointDelimiter) return false;
287
288
289    for (i = 0; i < s.length; i++)
290    {   
291        var c = s.charAt(i);
292
293        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
294        else if (!isDigit(c)) return false;
295    }
296
297    return true;
298}
299
300
301function isSignedFloat (s)
302
303{   if (isEmpty(s)) 
304       if (isSignedFloat.arguments.length == 1) return defaultEmptyOK;
305       else return (isSignedFloat.arguments[1] == true);
306
307    else {
308        var startPos = 0;
309        var secondArg = defaultEmptyOK;
310
311        if (isSignedFloat.arguments.length > 1)
312            secondArg = isSignedFloat.arguments[1];
313
314        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
315           startPos = 1;    
316        return (isFloat(s.substring(startPos, s.length), secondArg))
317    }
318}
319
320
321function isAlphabetic (s)
322
323{   var i;
324
325    if (isEmpty(s)) 
326       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
327       else return (isAlphabetic.arguments[1] == true);
328
329    for (i = 0; i < s.length; i++)
330    {   
331        var c = s.charAt(i);
332
333        if (!isLetter(c))
334        return false;
335    }
336
337    return true;
338}
339
340function isAlphanumeric (s)
341
342{   var i;
343
344    if (isEmpty(s)) 
345       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
346       else return (isAlphanumeric.arguments[1] == true);
347
348    for (i = 0; i < s.length; i++)
349    {   
350        var c = s.charAt(i);
351
352        if (! (isLetter(c) || isDigit(c) ) )
353        return false;
354    }
355
356    return true;
357}
358
359function reformat (s)
360
361{   var arg;
362    var sPos = 0;
363    var resultString = "";
364
365    for (var i = 1; i < reformat.arguments.length; i++) {
366       arg = reformat.arguments[i];
367       if (i % 2 == 1) resultString += arg;
368       else {
369           resultString += s.substring(sPos, sPos + arg);
370           sPos += arg;
371       }
372    }
373    return resultString;
374}
375
376function reformatZIPCode (ZIPString)
377{   if (ZIPString.length == 5) return ZIPString;
378    else return (reformat (ZIPString, "", 5, "-", 4));
379}
380
381function reformatUSPhone (USPhone)
382{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
383}
384
385function reformatSSN (SSN)
386{   return (reformat (SSN, "", 3, "-", 2, "-", 4))
387}
388
389function isLeapYear(argYear) {
390	return ((argYear % 4 == 0) && (argYear % 100 != 0)) || (argYear % 400 == 0) 
391}
392
393function daysInMonth(argMonth, argYear) {
394	switch (Number(argMonth)) {
395		case 1:		// Jan
396		case 3:		// Mar
397		case 5:		// May
398		case 7:		// Jul
399		case 8:		// Aug
400		case 10:		// Oct
401		case 12:		// Dec
402			return 31;
403			break;
404		
405		case 4:		// Apr
406		case 6:		// Jun
407		case 9:		// Sep
408		case 11:		// Nov
409			return 30;
410			break;
411		
412		case 2:		// Feb
413			if (isLeapYear(argYear))
414				return 29
415			else
416				return 28
417			break;
418		
419		default:
420			return 0;
421	}
422}
423
424function getDateSeparator(argDate) {
425	if ((argDate.indexOf('-') > 0) && (argDate.indexOf('/') > 0))
426		return ' '
427
428	if (argDate.indexOf('-') > 0)
429		return '-'
430	else
431		if (argDate.indexOf('/') > 0)
432			return '/'
433		else
434			return ' '
435}
436
437function getYear(argDate) {
438	var dateSep = getDateSeparator(argDate)
439	
440	if (dateSep == ' ')
441		return 0
442
443	if(argDate.split(dateSep).length == 3)
444		return argDate.split(dateSep)[2]
445	else
446		return 0
447}
448
449function getMonth(argDate) {
450	var dateSep = getDateSeparator(argDate)
451	
452	if (dateSep == ' ')
453		return 0
454
455	if(argDate.split(dateSep).length == 3)
456		return argDate.split(dateSep)[0]
457	else
458		return 0
459}
460
461function getDay(argDate) {
462	var dateSep = getDateSeparator(argDate)
463	
464	if (dateSep == ' ')
465		return 0
466
467	if(argDate.split(dateSep).length == 3)
468		return argDate.split(dateSep)[1]
469	else
470		return 0
471}
472
473function isProperDay(argDay, argMonth, argYear) {
474	if ((isWhiteSpace(argDay)) || (argDay == 0))
475		return false
476
477	if ((argDay > 0) && (argDay < daysInMonth(argMonth, argYear) + 1))
478		return true
479	else 
480		return false
481}
482
483function isProperMonth(argMonth) {
484	if ((isWhiteSpace(argMonth)) || (argMonth == 0))
485		return false
486	
487	if ((argMonth > 0) && (argMonth < 13))
488		return true
489	else
490		return false
491}
492
493function isProperYear(argYear) {
494	if ((isWhiteSpace(argYear)) || (argYear.toString().length > 4) || (argYear.toString().length == 3))
495		return false
496	
497	switch (argYear.toString().length) {
498		case 1:
499			if (argYear >=0 && argYear < 10)
500				return true
501			else
502				return false
503			
504		case 2:
505			if (argYear >=0 && argYear < 100)
506				return true
507			else
508				return false
509			
510		case 4:
511			if (((argYear >=1900) || (argYear >=2000)) && ((argYear < 3000) || (argYear < 2000)))
512				return true
513			else
514				return false
515		
516		default:
517			return false
518	}
519}
520
521function isProperDate(argDate) {
522	var tmpDay = getDay(argDate)
523	var tmpMon = getMonth(argDate)
524	var tmpYear = getYear(argDate)
525
526	return isProperDay(tmpDay, tmpMon, tmpYear) && isProperMonth(tmpMon) && isProperYear(tmpYear)
527}
528
529function charOccurences(argString, argChar) {
530	var intCt = 0
531
532	for(var intI=0; intI < argString.length; intI++)
533		if (argString.charAt(intI) == argChar)
534			intCt++
535	
536	return intCt
537}
538
539function isProperEmail(argEmail) {
540	if (charOccurences(argEmail, '@') + charOccurences(argEmail, '.') < 2)
541		return false
542
543	var atPos = argEmail.indexOf('@')
544	var dotPos = argEmail.indexOf('.')
545
546	if((atPos == 0) || (atPos == (argEmail.length - 1)))
547		return false
548
549	if((dotPos == 0) || (dotPos == (argEmail.length - 1)))
550		return false
551	
552	var checkTLD=1;
553 
554	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
555 
556	var emailPat=/^(.+)@(.+)$/;
557 
558	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
559 
560 
561	var validChars="\[^\\s" + specialChars + "\]";
562 
563 
564	var quotedUser="(\"[^\"]*\")";
565 
566 
567	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
568 
569 
570	var atom=validChars + '+';
571 
572	var word="(" + atom + "|" + quotedUser + ")";
573 
574	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
575 
576 
577	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
578 
579 
580 
581	var matchArray=argEmail.match(emailPat);
582 
583	if (matchArray==null)
584		{
585		return false;
586		}
587	var user=matchArray[1];
588	var domain=matchArray[2];
589 
590	for (i=0; i<user.length; i++)
591		{
592		if (user.charCodeAt(i)>127)
593			{
594			return false;
595			}
596		}
597	for (i=0; i<domain.length; i++)
598		{
599		if (domain.charCodeAt(i)>127)
600			{
601			return false;
602			}
603		}
604 
605	if (user.match(userPat)==null)
606		{
607		return false;
608	}
609 
610	var IPArray=domain.match(ipDomainPat);
611	if (IPArray!=null)
612		{
613		for (var i=1;i<=4;i++)
614			{
615			if (IPArray[i]>255)
616				{
617				return false;
618				}
619			}
620		return true;
621		}
622 
623 
624	var atomPat=new RegExp("^" + atom + "$");
625	var domArr=domain.split(".");
626	var len=domArr.length;
627	for (i=0;i<len;i++)
628		{
629		if (domArr[i].search(atomPat)==-1)
630			{
631			return false;
632			}
633		}
634 
635	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1)
636		{
637		return false;
638		}
639 
640	if (len<2)
641		{
642		return false;
643		}
644 
645	return true;
646}
647
648function isProperNumber(argNumber) {
649	var numberValue = Number(argNumber)
650	
651	if (isNaN(numberValue)) 
652		return false
653	else
654		return !isWhiteSpace(argNumber)
655}
656
657function isProperAlphabetic(argString) {
658	var alphabets = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"
659
660	for(var intI=0; intI<argString.length; intI++)
661		if (alphabets.indexOf(argString.charAt(intI)) == -1)
662			return false
663	
664	return true
665}
666
667function objectValue(argFrm, argElem) {
668	var intI
669	var objElem = null
670
671	for (intI=0; intI<argFrm.length; intI++)
672		if (argFrm[intI].name == argElem) 
673			objElem = argFrm[intI]
674
675	switch (objElem.type) {
676		case 'text':
677		case 'hidden':
678		case 'password':
679			return objElem.value
680			break;
681		
682		case 'select-one':
683			if (objElem.length == 0)
684				return ''
685			else 
686				return objElem.options[objElem.selectedIndex].value
687			break;
688		
689		case 'radio':
690			for (intI=0; intI<argFrm.length; intI++)
691				if (argFrm[intI].name == argElem) 
692					if (argFrm[intI].checked)
693						return argFrm[intI].value
694
695			return ''
696			break;
697	}
698}
699
700function objectFocus(argFrm, argElem) {
701	var intI
702	var objElem = null
703	for (intI=0; intI<argFrm.length; intI++)
704		if (argFrm[intI].name == argElem) 
705			objElem = argFrm[intI]
706	objElem.focus();
707}
708
709function isProperZip(argZip) {
710	if ((argZip.length == 5) || (argZip.length == 9))
711		return isProperNumber(argZip)
712	
713	if (argZip.length == 10)
714		return (isProperNumber(argZip.substr(0, 5)) && isProperNumber(argZip.substr(6, 4)) & (argZip.charAt(5) == '-'))
715}
716
717function isProperUSPhone (argPhone)
718{
719	var argPhone2 = stripCharsNotInBag(argPhone,"0123456789")
720    return (isOkBag(argPhone,"01234567890 -().") && isInteger(argPhone2) && argPhone2.length==digitsInUSPhoneNumber)
721}
722
723function isProperUSSSN(argSSN) {
724	var argSSN2 = stripCharsNotInBag(argSSN,"0123456789")
725    return (isOkBag(argSSN,"01234567890-") && isInteger(argSSN2) && argSSN2.length==11)
726}
727
728function actionFields(argActions) {
729	this.email			= (argActions.indexOf('[email]') > -1)
730	this.required		= (argActions.indexOf('[req]') > -1)
731	this.checkDate		= (argActions.indexOf('[date]') > -1)
732	this.checkZip		= (argActions.indexOf('[zip]') > -1)
733	this.checkNumber	= (argActions.indexOf('[number]') > -1)
734	this.checkAlphabetic= (argActions.indexOf('[alpha]') > -1)
735	this.checkUSPhone	= (argActions.indexOf('[usphone]') > -1)
736	this.checkUSSSN		= (argActions.indexOf('[usssn]') > -1)
737
738	if (argActions.indexOf('[len=') > -1) {
739		this.checkLength = true
740
741		var lenToCheck = ''
742		var bolCont = true
743
744		for (var intI=(argActions.indexOf('[len=') +  5);((intI < argActions.length) && bolCont); intI++)
745			if (argActions.charAt(intI) != ']')
746				lenToCheck += argActions.charAt(intI)
747			else
748				bolCont = false
749		this.lengthToCheck = lenToCheck
750	}
751	else
752		this.checkLength = false
753
754	if (argActions.indexOf('[blankalert=') > -1) {
755		this.blankAlert = true
756
757		var alertString = ''
758		var bolCont = true
759
760		for (var intI=(argActions.indexOf('[blankalert=') +  12);((intI < argActions.length) && bolCont); intI++)
761			if (argActions.charAt(intI) != ']')
762				alertString += argActions.charAt(intI)
763			else
764				bolCont = false
765		this.blankAlertMessage = alertString
766	}
767	else
768		this.blankAlert = false
769	
770	if (argActions.indexOf('[invalidalert=') > -1) {
771		this.invalidAlert = true
772
773		var alertString = ''
774		var bolCont = true
775
776		for (var intI=(argActions.indexOf('[invalidalert=') +  14);((intI < argActions.length) && bolCont); intI++)
777			if (argActions.charAt(intI) != ']')
778				alertString += argActions.charAt(intI)
779			else
780				bolCont = false
781		this.invalidAlertMessage = alertString
782	}
783	else
784		this.invalidAlert = false
785
786	if (argActions.indexOf('[equals=') > -1) {
787		this.shouldEqual = true
788
789		var equalsString = ''
790		var bolCont = true
791
792		for (var intI=(argActions.indexOf('[equals=') +  8);((intI < argActions.length) && bolCont); intI++)
793			if (argActions.charAt(intI) != ']')
794				equalsString += argActions.charAt(intI)
795			else
796				bolCont = false
797		this.shouldEqualString = equalsString
798	}
799	else
800		this.shouldEqual = false
801
802}
803
804
805function validateForm(argForm)
806	{
807	var frmElements = argForm.elements
808	var elemName
809	var elemObj
810
811	submitonce(argForm);
812
813	for (var intI=0; intI < frmElements.length; intI++) {// *
814		elemObj = frmElements[intI]
815		elemName = elemObj.name
816
817		if ((elemObj.type == 'hidden') && (elemName.length > 5))
818			if (elemName.substr(elemName.length - 5).toLowerCase() == '_vldt') {// **
819				var objAction = new actionFields(objectValue(frmElements, elemName))
820				var actElem = elemName.substr(0, elemName.length - 5)
821				
822				if (objAction.required) {
823					if (isWhiteSpace(objectValue(frmElements, actElem))) {// ***
824						alert (objAction.blankAlert?objAction.blankAlertMessage:actElem + ' cannot be left blank')
825						objectFocus(frmElements, actElem);
826						submitenabled(argForm);
827						return false
828					} // ***
829				}
830				
831				if ((objectValue(frmElements, actElem) > '') && (!isWhiteSpace(objectValue(frmElements, actElem)))){// ***
832					if (objAction.checkDate)
833						if (!isProperDate(objectValue(frmElements, actElem))) {// ****
834							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have an invali
834d date')
835							objectFocus(frmElements, actElem);
836							submitenabled(argForm);
837							return false
838						} // ****
839
840					if (objAction.checkNumber)
841						if (!isProperNumber(objectValue(frmElements, actElem))) {// ****
842							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have an invalid number')
843							objectFocus(frmElements, actElem);
844							submitenabled(argForm);
845							return false
846						} // ****
847
848					if (objAction.checkZip)
849						if (!isProperZip(objectValue(frmElements, actElem))) {// ****
850							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have an invalid zipcode')
851							objectFocus(frmElements, actElem);
852							submitenabled(argForm);
853							return false
854						} // ****
855
856					if (objAction.checkAlphabetic)
857						if (!isProperAlphabetic(objectValue(frmElements, actElem))) {// ****
858							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have invalid characters')
859							objectFocus(frmElements, actElem);
860							submitenabled(argForm);
861							return false
862						} // ****
863
864					if (objAction.checkUSPhone)
865						if (!isProperUSPhone(objectValue(frmElements, actElem))) {// ****
866							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have invalid characters')
867							objectFocus(frmElements, actElem);
868							submitenabled(argForm);
869							return false
870						} // ****
871
872					if (objAction.checkUSSSN)
873						if (!isProperUSSSN(objectValue(frmElements, actElem))) {// ****
874							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have invalid characters')
875							objectFocus(frmElements, actElem);
876							submitenabled(argForm);
877							return false
878						} // ****
879
880					if (objAction.email)
881						if (!isProperEmail(objectValue(frmElements, actElem))) {// ****
882							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' cannot have invalid characters')
883							objectFocus(frmElements, actElem);
884							submitenabled(argForm);
885							return false
886						} // ****
887
888					if (objAction.checkLength)
889						if (objectValue(frmElements, actElem).length < objAction.lengthToCheck) {// ****
890							alert (objAction.invalidAlert?objAction.invalidAlertMessage:actElem + ' must be at least ' + objAction.lengthToCheck + ' characters long')
891							objectFocus(frmElements, actElem);
892							submitenabled(argForm);
893							return false
894						} // ****
895				} // ***
896			} // **
897	} // *
898		
899	return true
900}
901
902
903function submitenabled(theform)
904	{
905	if (document.all||document.getElementById)
906		{
907		for (i=0;i<theform.length;i++)
908			{
909			var tempobj=theform.elements[i];
910			if(tempobj.type.toLowerCase()=="submit" || tempobj.type.toLowerCase()=="reset")
911				tempobj.disabled=false;
912			}
913		}
914	}
915
916
917function submitonce(theform)
918	{
919	if (document.all||document.getElementById)
920		{
921		for (i=0;i<theform.length;i++)
922			{
923			var tempobj=theform.elements[i];
924			if(tempobj.type.toLowerCase()=="submit" || tempobj.type.toLowerCase()=="reset")
925				tempobj.disabled=true;
926			}
927		}
928	}
929
930
931
932function observeWindowLoad(handler) {
933    if (window.addEventListener) { 
934        window.addEventListener('load',handler,false);
935    }
936    else if (document.addEventListener) {
937        document.addEventListener('load',handler,false);
938    }
939    else if (window.attachEvent) { 
940        window.attachEvent('onload',handler);
941    }
942    else {
943        if (typeof window.onload=='function') {
944            var oldload=window.onload;
945            window.onload = function(){
946                oldload();
947                handler();
948            }
949        } 
950        else { window.onload=init; }
951    }
952}

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.