var exps = [
	['email', "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"],
	['login', "^([a-zA-Z0-9_]+)$"]
];

function getExp(chars) {
	for (var i=0; i<exps.length; i++) if (exps[i][0] == chars) return exps[i][1];
	return false;
}

function checkValue(value, caption, chars, min, max, message) {
//	if (!chars) {
		if (value == 0) return message ? message : 'Please enter field \'' + caption +'\'.';
		else if (!chars) return false;
//	}
	ex = getExp(chars);
	if (ex || chars || min > 0 || max > 0) {
		if (!ex && !chars && value == 0 && min > 0) return 'Please fill in field \'' + caption +'\'.';
		if (!ex && !chars && value.length < min) return 'Field \'' + caption + '\' must be at least ' + min + ' characters length.';
		if (!ex && !chars && value.length > max) return 'Field \'' + caption + '\' must be less than or equal ' + max + ' characters length.';
		if (!ex && !chars && name == 'login') if (!checkLogin(value)) return 'Field \'Username\' contains illegal characters.';
		if (!ex && !chars && name == 'email') if (!checkEmail(value)) return 'Email Address entered is incorrect.';
		if (window.RegExp) {
			if (ex) {
				var r = new RegExp(ex);
				if (!r.test(value)) return 'Field \'' + caption + '\' entered is incorrect.';
			} else {
				if (chars == '.') var r = new RegExp("^" + chars + "*$");
				else {
					var rty = new RegExp("[\*\+]$");
//					alert("^" + chars + (rty.test(chars) ? "" : "+") + "$");
					var r = new RegExp("^" + chars + (rty.test(chars) ? "" : "+") + "$")
				}
				if (!r.test(value)) return 'Field \'' + caption + '\' contains illegal characters.';
			}
		}
	} else if (value == max) return 'Please select field \'' + caption + '\'.';
	return false;
}

function checkForm(form, required) {
	for (var i=0; i<required.length; i++) {
		var rrr = false;
		var rad = false;
		for (var j=0; j<form.elements.length; j++) if (form.elements[j].name == required[i][0]) {
			if (required[i][2] == 'radio') {
				rrr = rrr || form.elements[j].checked;
				rad = true;
			} else {
				var res = checkValue(form.elements[j].value, required[i][1], required[i][2], required[i][3], required[i][4], required[i][5]);
				if (res) {
					alert(res);
					return false;
				}
				for (var k=0; k<form.elements.length; k++) if (form.elements[k].name == form.elements[j].name + '_confirmation') if (form.elements[k].value != form.elements[j].value) {
					alert('\'' + required[i][1] + '\' confirmation failed.');
					return false;
				}
			}
		}
		if (!rrr && rad) {
			if (required[i][5]) alert(required[i][5]);
			else alert('Please select radio \'' + required[i][1] +'\'.');
			return false;
		}
	}
	return true;
}
