function isValid(what, chars)
{
	var i;

	for (i = 0; i < what.length; i++)
		if (chars.indexOf(what.charAt(i)) < 0) return false;

	return true;
}



function check_date(evt, fld) {
var chr = (evt.which) ? evt.which : evt.keyCode;
var ch = String.fromCharCode(chr);
var l = fld.value.length;
var s = fld.value;
var noerr = true;

//Проверяем на BackSpace, ESC
if (chr == 8 || chr == 27) return true;

//Проверяем первую цифру дня
if (l == 0 && ch != '0' && ch != '1' && ch != '2' && ch != '3') noerr=false;

//Проверяем вторую цифру дня
if (l == 1 && ch != '0' && ch != '1' && ch != '2' && ch != '3' && ch != '4' && ch != '5' && ch != '6' && ch != '7' && ch != '8' && ch != '9') noerr=false;
if (l == 1 && s.charAt(0) == '3' && ch != '0' && ch != '1') noerr=false;
if (l == 1 && s.charAt(0) == '0' && ch == '0') noerr=false;

//Если надо - вводим точку после дня
if (l == 2 && noerr) {
  l++;
  fld.value += '.';
}

//Проверяем первую цифру месяца
if (l == 3 && ch != '0' && ch != '1') noerr=false;

//Проверяем вторую цифру месяца
if (l == 4 && ch != '0' && ch != '1' && ch != '2' && ch != '3' && ch != '4' && ch != '5' && ch != '6' && ch != '7' && ch != '8' && ch != '9') noerr=false;
if (l == 4 && s.charAt(3) == '1' && ch != '0' && ch != '1' && ch != '2') noerr=false;
if (l == 4 && s.charAt(3) == '0' && ch == '0') noerr=false;

//Если вдруг точка после второй цифры месяца не введена - вводим ее
if (l == 5 && noerr) {
  l++;
  fld.value += '.';
}

//Проверяем первую цифру года
if (l == 6 && ch != '1' && ch != '2') noerr=false;

//Проверяем вторую цифру года
if (l == 7 && s.charAt(6) == '1' && ch != '9' && ch != '8') noerr=false;
if (l == 7 && s.charAt(6) == '2' && ch != '0' && ch != '1') noerr=false;

//Проверяем третью и четвертую цифры года
if ((l == 8 || l == 9) && ch != '0' && ch != '1' && ch != '2' && ch != '3' && ch != '4' && ch != '5' && ch != '6' && ch != '7' && ch != '8' && ch != '9') noerr=false; 

//Чтоб длину не превысить - отбой после 10 символов
if (l >= 10) noerr=false;

//Если символ подходящий - вводим его в поле
if (noerr) {
  l++;
  fld.value += ch;
}
else if (ch != '.') {
  alert('Неподходящий символ для ввода!\nФормат даты - ДД.ММ.ГГГГ, где ДД варьируется от 0 до 31, ММ - от 01 до 12, ГГГГ - от 1800 до 2199.');
  fld.focus();
}

//Если надо - добавляем точку
if ((l == 2 || l == 5) && noerr) {
  fld.value +='.';
}

//Возвращаем FALSE, так как символ уже добавлен к строке
return false;
}



function check_string(evt, fld, cs, smpl, msg)
{
	var chr = (evt.which) ? evt.which : evt.keyCode;
	var ch = String.fromCharCode(chr);
	var noerr, tl;

	if (cs) tl = 'да'; else tl = 'нет';

	//Проверяем на BackSpace, ESC
	if (chr == 8 || chr == 27) return true;

	//Проверяем символ на вхождение в шаблон ввода
	if (cs) noerr = isValid(ch, smpl);
	else noerr = (isValid(ch.toLowerCase(), smpl) || isValid(ch.toUpperCase(), smpl));
	
	//Если символ подходящий - вводим его в поле
	if (!noerr)
	{
	  alert('Неподходящий символ для ввода!\n\n'+msg+'\n\nДопустимые символы: '+smpl+'\nЗаглавные и прописные буквы считаются разными: '+tl);
	  fld.focus();
	}
	
	return noerr;
}



//Проверка правильной заполненности поля "Дата"
function check_dsmpl(fld)
{
	if (fld.value.length != 10 || /([0-2]\d|3[01])\.(0\d|1[012])\.(\d{4})/.exec(fld.value) == null) return false;

	var p = fld.value.split('.');
	var y = p[2] * 1;
	var m = p[1] * 1;
	var d = p[0] * 1;
	
	if (y < 1800 || y > 2200 ||
		m < 1 || m > 12 ||
		d < 1 ||
		(m == 1 && d > 31) || (m == 2 && ((y % 4 == 0 && d > 29) || (y % 4 && d > 28))) ||
		(m == 3 && d > 31) || (m == 4 && d > 30) || (m == 5 && d > 31) || (m == 6 && d > 30) || (m == 7 && d > 31) ||
		(m == 8 && d > 31) || (m == 9 && d > 30) || (m == 10 && d > 31) || (m == 11 && d > 30) || (m == 12 && d > 31))
	return false;
	
	return true;
}




//Функция проверки вводимого символа для поля "Мобильный телефон (русский)"
function check_mobile_rus_1ch(evt, fld)
{
	var chr = (evt.which) ? evt.which : evt.keyCode;
	var ch = String.fromCharCode(chr);

	//Проверяем на BackSpace, ESC
	if (chr == 8 || chr == 27) return true;

	return (isValid(ch, '0123456789') && fld.value.length < 11);
}



//Функция проверки правильной заполненности поля "Мобильный телефон (русский)"
function check_mobile_rus(fld)
{
	return (isValid(fld.value, '0123456789') && fld.value.length >= 11);
}



function prefj(dbirth, dreq, s) {
  var age = yearj(dreq) - yearj(dbirth);
    
  if (monthj(dreq) > monthj(dbirth) || (monthj(dreq) == monthj(dbirth) && dayj(dreq) > dayj(dbirth)))
    age--;
    
  if (age < 2) return "Inf";
  if (age >= 2 && age < 12) return "Chd";
  if (age >= 12 && s == 1) return "Mr";
  if (age >= 12 && s == 2) return "Mrs";
}



function monthj(ddd) {
  var m = ddd.substring(3, 4);
  return eval(m);
}



function dayj(ddd) {
  var d = ddd.substring(0, 1);
  return eval(d);
}



function yearj(ddd) {
  var y = ddd.substring(6, 9);
  return eval(y);
}



function test_email(email) {
  email = email.replace(/^\s+|\s+$/g, '');
  return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,6}$/i).test(email);
}



function check_email(evt, fld) {
    return check_string(evt,fld,0,'ABCDEFGHIJKLMNOPQRSTUVWXYZ.-_@1234567890','');
}
