PageSourceSearch

https://uag.ru/js/forms.js

js uag.ru collected 2026-10-08 21:01:03 UTC 11,156 bytes, 303 lines download raw bytes

1site.forms = {};
2
3/**
4 * Добавляет события формам
5 */
6site.forms.init = function () {
7	var forms_arr = document.getElementsByTagName('form'),
8		_self, element, i, j, form;
9	for (i = 0; forms_arr.length > i; i++) {
10		form = forms_arr[i];
11		if (form.parentNode.className === "body") {
12			for (j = 0; form.elements.length > j; j++) {
13				element = form.elements[j];
14				if (element.parentNode.className === "required") {
15					site.utils.events.add(element, 'change', function() {
16						_self = site.utils.isIE ? event.srcElement : this;
17						return site.forms.data.check('', _self);
18					});
19				}
20				if (element.type == 'checkbox' && site.utils.css.checkClass(element, 'over')) {
21					site.utils.events.add(element, 'click', function() {
22						_self = site.utils.isIE ? event.srcElement : this;
23						return site.forms.checkedOver(_self);
24					});
25				}
26				if (element.type == 'radio') {
27					if (site.utils.css.checkClass(element, 'over')) {
28						site.utils.events.add(element, 'click', function() {
29							_self = site.utils.isIE ? event.srcElement : this;
30							return site.forms.checkedOver(_self, false);
31						});
32					}
33					else {
34						site.utils.events.add(element, 'click', function() {
35							_self = site.utils.isIE ? event.srcElement : this;
36							return site.forms.checkedOver(_self, true);
37						});
38					}
39				}
40			}
41			form.onsubmit = function() {
42				_self = site.utils.isIE ? event.srcElement : this;
43				site.forms.data.save(_self);
44				return site.forms.data.check(_self);
45			};
46		}
47	}
48	site.forms.data.restore();
49	//site.forms.comments.init();
50};
51
52site.forms.checkedOver = function(_self, remove) {
53	var element_name, element_over, label;
54	element_name = _self.name.match(/\[([a-z_]+)\][(\[\])]*$/);
55	element_name = element_name ? element_name[1] : _self.name;
56	element_name = _self.name.replace(element_name, element_name + '_over').replace(/\[\]$/, "");
57	element_over = document.getElementsByName(element_name);
58	element_over = element_over[0];
59	if (element_over) {
60		if (_self.type == "checkbox" && !_self.checked) remove = true;
61	}
62	else if (!remove) this.createOver(_self.parentNode, element_name);
63	if (remove && element_over) element_over.parentNode.removeChild(element_over);
64	return true;
65};
66
67site.forms.createOver = function(node, element_name) {
68	label = document.createElement('label');
69	label.innerHTML = '<input type="text" name="' + element_name + '" value="" class="text" />';
70	if (node.nextSibling === null) node.parentNode.insertBefore(label, node.nextSibling);
71	else node.parentNode.appendChild(label);
72};
73
74site.forms.data = {};
75
76/**
77 * Проверка корректности заполнения формы
78 *
79 * @param {Object} form Проверяемая форма
80 * @return {Boolean} Результат корректности заполнения
81 */
82site.forms.data.check = function (form, element) {
83	if (!form && element) {
84		if (site.utils.css.checkClass(element.parentNode, "required")) {
85			if (!site.forms.errors.check(element)) return false;
86		}
87	}
88	else {
89		var i, check_elements, checked, _err = "", element_name;
90		for (i = 0; form.elements.length > i; i++) {
91			element = form.elements[i];
92			if (site.utils.css.checkClass(element.parentNode, "required")) {
93				if (!site.forms.errors.check(element)) return false;
94			}
95			else if (element.type == 'radio' || element.type == 'checkbox') {
96				if (site.utils.css.checkClass(element.parentNode.parentNode, "required")) {
97					element_name = element.name.match(/\[([a-z_]+)\][(\[\])]*$/);
98					element_name = element_name ? element_name[1] : element.name;
99					if (checked && this.cashe !== element_name) {
100						checked = false;
101					}
102					if (element.checked) {
103						if (site.utils.css.checkClass(element, "over")) {
104							element = element.form.elements[element.name.replace(element_name, element_name + '_over').replace(/\[\]$/, "")];
105							if (!site.forms.errors.check(element)) return false;
106						}
107						checked = true;
108						this.cashe = element_name;
109					}
110					check_elements = element.form.elements[element.name];
111					if (element == check_elements[check_elements.length -1]) {
112						if (!checked) _err = "Поле обязательно для заполнения.";
113						if (!site.forms.errors.write(_err, check_elements[0])) return false;
114					}
115				}
116			}
117		}
118		delete this.cashe;
119	}
120    return true;
121};
122
123site.forms.data.save = function (form) {
124	if (!form && !form.id) return false;
125	var str = "", input, inputName, i, opt_str = "", o;
126	for (i = 0; i < form.elements.length; i++) {
127		input = form.elements[i];
128		if (input.name) {
129			inputName = input.name.replace(/([)\\])/g, "\\$1");
130			switch (input.type) {
131				case "password":break;
132				case "text":
133				case "textarea": str += 'TX,' + inputName + ',' + input.value; break;
134				case "checkbox":
135				case "radio": str += 'CH,' + inputName + '_' + i + ',' + (input.checked ? 1 : 0); break;
136				case "select-one": str += 'SO,' + inputName + ',' + input.selectedIndex; break;
137				case "select-multiple": {
138					for (o = 0; o < input.options.length; o++) {
139						if (input.options[o].selected) {
140							opt_str += input.options[o].value;
141							if (o < (input.options.length - 1)) opt_str += ":";
142						}
143					}
144					str += 'SM,' + inputName + ',' + opt_str; break;
145				}
146			}
147			if (i < (form.elements.length - 1)) str += "+";
148		}
149	}
150	document.cookie = "form_" + form.id + "=" + escape(str.replace(/([|\\])/g, "\\$1"));
151	return true;
152};
153
154site.forms.data.restore = function () {
155	if (registered = document.getElementById('partner_registered')) {
156		if (registered.value == 0) this.chooseAuth();
157	}
158	var forms = document.getElementsByTagName('form'),
159		cookie = new String(unescape(document.cookie)),
160		i, j, element, data, temp_cookie, form_cookie = {}, form_element;
161	cookie = cookie.split('; ');
162	for (i = 0; i < cookie.length; i++) {
163		if (cookie[i].indexOf("form_") == -1) delete cookie[i];
164		else {
165			temp_cookie = cookie[i].split('=');
166			form_cookie[temp_cookie[0]] = temp_cookie[1];
167		}
168	}
169	for (i = 0; i < forms.length; i++) {
170		if (forms[i].id) {
171			if (data = form_cookie["form_" + forms[i].id]) {
172				data = data.split('+');
173				for (j = 0; j < data.length; j++) {
174					element = data[j].split(',');
175					form_element = forms[i].elements[element[1]];
176					if (!element) continue;
177					switch (element[0]) {
178						case "PW": break;
179						case "TX": form_element.value = element[2]; break;
180						case "CH": {
181							form_element = forms[i].elements[element[1].replace(/^(.*_)/, '')];
182							if (site.utils.css.checkClass(form_element, 'over') && element[2] == 1) {
183								var element_name = form_element.name.match(/\[([a-z_]+)\][(\[\])]*$/);
184								element_name = element_name ? element_name[1] : form_element.name;
185								element_name = form_element.name.replace(element_name, element_name + '_over').replace(/\[\]$/, "");
186								site.forms.createOver(form_element.parentNode, element_name);
187							}
188							form_element.checked = (element[2] == 1) ? true : false; break;
189						}
190						case "SO": form_element.selectedIndex = element[2]; break;
191						case "SM":
192							var options = form_element.options;
193							var opt_arr = element[2].split(":"), op, o;
194							for (op = 0; op < options.length; op++)
195								for (o = 0; o < opt_arr.length; o++)
196									if (opt_arr[o] && (options[op].value == opt_arr[o]))
197										options[op].selected = true;
198							break;
199					}
200				}
201			}
202		}
203	}
204	var dev_type, studio, freelance, registered;
205	if (dev_type = document.getElementById('developer_type')) {
206		studio = document.getElementById('web-studio');
207		freelance = document.getElementById('free-lance');
208		switch (dev_type.value) {
209			case "65270" : {
210				studio.style.display = 'block';
211				break;
212			}
213			case "65271" : {
214				freelance.style.display = 'block';
215				break;
216			}
217		}
218	}
219	return true;
220};
221
222site.forms.errors = {};
223
224/**
225 * Генерация ошибок
226 *
227 * @param {Object} element Проверяемый элемент формы
228 * @return {Boolean} Результат корректности заполнения
229 */
230site.forms.errors.check = function(element) {
231	var element_name = element.name.match(/\[([a-z_]+)\][(\[\])]*$/),
232		empty_err = "Поле обязательно для заполнения.",
233		_err;
234	element_name = element_name ? element_name[1] : element.name;
235	switch (element_name) {
236		case "login": {
237			this.login = element;
238			switch (element.value.length) {
239				case 0: _err = empty_err; break;
240				case 1:
241				case 2: _err = "Слишком короткий логин. Логин должен состоять не менее, чем из 3х символов."; break;
242				default: {
243					if (element.value.length > 40) _err = "Слишком большой логин. Логин должен состоять не более, чем из 40 символов.";
244				}
245			}
246			break;
247		}
248		case "password": {
249			this.password = element;
250			switch (element.value.length) {
251				case 0: _err = empty_err; break;
252				case 1:
253				case 2: _err = "Слишком короткий пароль. Пароль должен состоять не менее, чем из 3х символов."; break;
254				default: {
255					if (this.login && this.login.value == element.value)
256						_err = "Пароль не должен совпадать с логином.";
257				}
258			}
259			break;
260		}
261		case "password_confirm": {
262			if (element.value.length == 0) _err = empty_err;
263			else if (this.password && this.password.value !== element.value) {
264				_err = "Пароли должны совпадать.";
265			}
266			break;
267		}
268		case "email": {
269			if (element.value.length == 0) _err = empty_err;
270			else if (!element.value.match(/.+@.+\..+/)) _err = "Некорректный e-mail.";
271			break;
272		}
273		default: {
274			if (element.name.match(/^.*e.*mail.*$/) && element.name != 'email_to') {
275				if (!element.value.match(/.+@.+\..+/)) _err = "Некорректный e-mail.";
276			}
277			if (element.type == 'text' && site.utils.css.checkClass(element, 'int')) {
278				if (!element.value.match(/^[\d]+$/)) _err = "Допустимы для ввода только цифры.";
279			}
280			if (element.value.length == 0) _err = empty_err;
281		}
282	}
283	return site.forms.errors.write(_err, element);
284};
285
286site.forms.errors.write = function (_err, element) {
287	var cont = element.parentNode.parentNode;
288	var formErr = (site.utils.isIE) ? $(cont).getElementsByClassName('formErr') : cont.querySelectorAll('.formErr');
289	if (formErr.length) cont.removeChild(formErr[0]);
290	if (_err) {
291		var err_block = document.createElement('div');
292		err_block.className = "formErr";
293		err_block.style.fontSize = '11px';
294		err_block.style.color = 'red';
295		err_block.innerHTML = _err;
296		cont.appendChild(err_block);
297		element.focus();
298		return false;
299	}
300	return true;
301};
302
303site.utils.events.add(window, 'load', function(){return site.forms.init();});

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.