PageSourceSearch

https://account.internationalairportreview.com/JavaScript/mootools/more/Forms/Form.Validator.Extras.js

js internationalairportreview.com collected 2026-10-02 03:44:44 UTC 6,967 bytes, 232 lines download raw bytes

1/*
2---
3
4script: Form.Validator.Extras.js
5
6name: Form.Validator.Extras
7
8description: Additional validators for the Form.Validator class.
9
10license: MIT-style license
11
12authors:
13  - Aaron Newton
14
15requires:
16  - Form.Validator
17
18provides: [Form.Validator.Extras]
19
20...
21*/
22Form.Validator.addAllThese([
23
24	['validate-enforce-oncheck', {
25		test: function(element, props){
26			var fv = element.getParent('form').retrieve('validator');
27			if (!fv) return true;
28			(props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){
29				if (element.checked){
30					fv.enforceField(item);
31				} else {
32					fv.ignoreField(item);
33					fv.resetField(item);
34				}
35			});
36			return true;
37		}
38	}],
39
40	['validate-ignore-oncheck', {
41		test: function(element, props){
42			var fv = element.getParent('form').retrieve('validator');
43			if (!fv) return true;
44			(props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){
45				if (element.checked){
46					fv.ignoreField(item);
47					fv.resetField(item);
48				} else {
49					fv.enforceField(item);
50				}
51			});
52			return true;
53		}
54	}],
55
56	['validate-nospace', {
57		errorMsg: function(){
58			return Form.Validator.getMsg('noSpace');
59		},
60		test: function(element, props){
61			return !element.get('value').test(/\s/);
62		}
63	}],
64
65	['validate-toggle-oncheck', {
66		test: function(element, props){
67			var fv = element.getParent('form').retrieve('validator');
68			if (!fv) return true;
69			var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea');
70			if (!element.checked){
71				eleArr.each(function(item){
72					fv.ignoreField(item);
73					fv.resetField(item);
74				});
75			} else {
76				eleArr.each(function(item){
77					fv.enforceField(item);
78				});
79			}
80			return true;
81		}
82	}],
83
84	['validate-reqchk-bynode', {
85		errorMsg: function(){
86			return Form.Validator.getMsg('reqChkByNode');
87		},
88		test: function(element, props){
89			return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){
90				return item.checked;
91			});
92		}
93	}],
94
95	['validate-required-check', {
96		errorMsg: function(element, props){
97			return props.useTitle ? element.get('title') : Form.Validator.getMsg('requiredChk');
98		},
99		test: function(element, props){
100			return !!element.checked;
101		}
102	}],
103
104	['validate-reqchk-byname', {
105		errorMsg: function(element, props){
106			return Form.Validator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')});
107		},
108		test: function(element, props){
109			var grpName = props.groupName || element.get('name');
110			var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){
111				return item.checked;
112			});
113			var fv = element.getParent('form').retrieve('validator');
114			if (oneCheckedItem && fv) fv.resetField(element);
115			return oneCheckedItem;
116		}
117	}],
118
119	['validate-match', {
120		errorMsg: function(element, props){
121			return Form.Validator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')});
122		},
123		test: function(element, props){
124			var eleVal = element.get('value');
125			var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value');
126			return eleVal && matchVal ? eleVal == matchVal : true;
127		}
128	}],
129
130	['validate-after-date', {
131		errorMsg: function(element, props){
132			return Form.Validator.getMsg('afterDate').substitute({
133				label: props.afterLabel || (props.afterElement ? Form.Validator.getMsg('startDate') : Form.Validator.getMsg('currentDate'))
134			});
135		},
136		test: function(element, props){
137			var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date();
138			var end = Date.parse(element.get('value'));
139			return end && start ? end >= start : true;
140		}
141	}],
142
143	['validate-before-date', {
144		errorMsg: function(element, props){
145			return Form.Validator.getMsg('beforeDate').substitute({
146				label: props.beforeLabel || (props.beforeElement ? Form.Validator.getMsg('endDate') : Form.Validator.getMsg('currentDate'))
147			});
148		},
149		test: function(element, props){
150			var start = Date.parse(element.get('value'));
151			var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date();
152			return end && start ? end >= start : true;
153		}
154	}],
155
156	['validate-custom-required', {
157		errorMsg: function(){
158			return Form.Validator.getMsg('required');
159		},
160		test: function(element, props){
161			return element.get('value') != props.emptyValue;
162		}
163	}],
164
165	['validate-same-month', {
166		errorMsg: function(element, props){
167			var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value');
168			var eleVal = element.get('value');
169			if (eleVal != '') return Form.Validator.getMsg(startMo ? 'sameMonth' : 'startMonth');
170		},
171		test: function(element, props){
172			var d1 = Date.parse(element.get('value'));
173			var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'));
174			return d1 && d2 ? d1.format('%B') == d2.format('%B') : true;
175		}
176	}],
177
178
179	['validate-cc-num', {
180		errorMsg: function(element){
181			var ccNum = element.get('value').replace(/[^0-9]/g, '');
182			return Form.Validator.getMsg('creditcard').substitute({length: ccNum.length});
183		},
184		test: function(element){
185			// required is a different test
186			if (Form.Validator.getValidator('IsEmpty').test(element)) return true;
187
188			// Clean number value
189			var ccNum = element.get('value');
190			ccNum = ccNum.replace(/[^0-9]/g, '');
191
192			var valid_type = false;
193
194			if (ccNum.test(/^4[0-9]{12}([0-9]{3})?$/)) valid_type = 'Visa';
195			else if (ccNum.test(/^5[1-5]([0-9]{14})$/)) valid_type = 'Master Card';
196			else if (ccNum.test(/^3[47][0-9]{13}$/)) valid_type = 'American Express';
197			else if (ccNum.test(/^6(?:011|5[0-9]{2})[0-9]{12}$/)) valid_type = 'Discover';
198			else if (ccNum.test(/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/)) valid_type = 'Diners Club';
199
200			if (valid_type){
201				var sum = 0;
202				var cur = 0;
203
204				for (var i=ccNum.length-1; i>=0; --i){
205					cur = ccNum.charAt(i).toInt();
206					if (cur == 0) continue;
207
208					if ((ccNum.length-i) % 2 == 0) cur += cur;
209					if (cur > 9){
210						cur = cur.toString().charAt(0).toInt() + cur.toString().charAt(1).toInt();
211					}
212
213					sum += cur;
214				}
215				if ((sum % 10) == 0) return true;
216			}
217
218			var chunks = '';
219			while (ccNum != ''){
220				chunks += ' ' + ccNum.substr(0,4);
221				ccNum = ccNum.substr(4);
222			}
223
224			element.getParent('form').retrieve('validator').ignoreField(element);
225			element.set('value', chunks.clean());
226			element.getParent('form').retrieve('validator').enforceField(element);
227			return false;
228		}
229	}]
230
231
232]);

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.