var us_msg = {missing: "Не задано обязательное поле: \"%s\"", invalid: "Недопустимое значение поля: \"%s\"", email_or_phone: "Не задан ни email, ни телефон", no_list_ids: "Не выбрано ни одного списка рассылки"};
function us_onLoadImpl() {
	us_autodetectCharset();
}
var us_onLoadOld = null;
var us_onLoadCalled = false;
function us_onLoad() {
	us_onLoadImpl();
	us_onLoadCalled = true;
	if (us_onLoadOld) {
		us_onLoadOld();
	}
}
us_onLoadOld = window.onload;
window.onload = us_onLoad;
function us_autodetectCharset() {
	var d = document;
	var f = d.getElementById('us_form');
	var ee = f.getElementsByTagName('input');
	for (var i = 0;  i < ee.length;  i++) {
		var e = ee[i];
		if (e.getAttribute('name') == 'charset') {
			if (e.value == '') {
				// http://stackoverflow.com/questions/318831
				e.value = d.characterSet ? d.characterSet : d.charset;
			}
			return;
		}
	}
}
function us_onSubmit() {
	if (!us_onLoadCalled) {
		alert('us_onLoad() has not been called')
		return false;
	}
	function trim(s) {
		return s == null ? '' : s.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
	}
	var d = document;
	var f = d.getElementById('us_form');
	if (!f) {
		alert('Internal error: form not found.');
		return false;
	}
	var ee, i, e, n, v, r, k, b1, b2;
	var hasEmail = false;
	var hasPhone = false;
	ee = f.getElementsByTagName('input');
	for (i = 0;  i < ee.length;  i++) {
		e = ee[i];
		n = e.getAttribute('name');
		if (!n || e.getAttribute('type') != 'text') {
			continue;
		}
		v = trim(e.value);
		if (v == '') {
			k = e.getAttribute('_required');
			if (k == '1') {
				alert(us_msg['missing'].replace('%s', e.getAttribute('_label')));
				e.focus();
				return false;
			}
			continue;
		}
		if (n == 'email') {
			hasEmail = true;
		} else if (n == 'phone') {
			hasPhone = true;
		}
		k = e.getAttribute('_validator');
		r = null;
		switch (k) {
			case null:
			case '':
				break;
			case 'email':
				// TODO Provide regexps from PHP code (add getEmailValidationRegexp_forJavascript() to functions.php).
				r = /^[a-zA-Z0-9_+=-]+[a-zA-Z0-9\._+=-]*@[a-zA-Z0-9][a-zA-Z0-9-]*(\.[a-zA-Z0-9]([a-zA-Z0-9-]+))*\.([a-zA-Z]{2,6})$/;
				break;
			case 'phone':
				r = /^[\d +()\-]{7,32}$/;
				break;
			case 'float':
				r = /^[+\-]?\d+(\.\d+)?$/;
				break;
			default:
				alert('Internal error: unknown validator "' + k + '"');
				e.focus();
				return false;
		}
		if (r && !r.test(v)) {
			alert(us_msg['invalid'].replace('%s', e.getAttribute('_label')));
			e.focus();
			return false;
		}
	}
	if (!hasEmail && !hasPhone) {
		alert(us_msg['email_or_phone']);
		return false;
	}
	ee = f.getElementsByTagName('input');
	b1 = false;
	b2 = false;
	for (i = 0;  i < ee.length;  i++) { 		e = ee[i]; 		if (e.getAttribute('name') != 'list_ids[]') { 			continue; 		} 		b1 = true; 		if (e.checked) { 			b2 = true; 			break; 		} 	} 	if (b1 && !b2) { 		alert(us_msg['no_list_ids']); 		return false; 	} 	return true; }
