function checkForm(form) {
	// Заранее объявим необходимые переменные
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
	var phonePattern = /^[-0-9() ]+$/;  
	var namePattern = /^[-а-яА-Я]+$/;  
	
	var el, // Сам элемент
	elName, // Имя элемента формы
	value, // Значение
	type; // Атрибут type для input-ов
	// Массив списка ошибок, по дефолту пустой
	var errorList = [];
	// Хэш с текстом ошибок (ключ - ID ошибки)
	var errorText = {
	1 : "Не заполнено поле 'Имя'",
	2 : "Поле 'Имя' содержит недопустимые символы",
	3 : "Не заполнено поле 'Фамилия'",
	4 : "Поле 'Фамилия' содержит недопустимые символы",
	5 : "Не заполнено поле 'Телефон'",
	6 : "Поле 'Телефон' ошибочно",
	7 : "Не заполнено поле 'E-mail'",
	8 : "Поле 'E-mail' ошибочно",
	9 : "Не выбрана программа обучения",
	10 : "Не выбрано время обучения"
	}
	// Получаем семейство всех элементов формы
	// Проходимся по ним в цикле

	for (var i = 0; i < form.elements.length; i++) {
		el = form.elements[i];
		elName = el.nodeName.toLowerCase();
		value = el.value;
		
		if (elName == "input") { // INPUT
			// Определяем тип input-а
			type = el.type.toLowerCase();
			
			// Разбираем все инпуты по типам и обрабатываем содержимое
			switch (type) {
				case "text" :
					if (el.name == "name" && value == "") errorList.push(1);
					else if (el.name == "name" && !namePattern.test(value)) errorList.push(2);
					
					if (el.name == "sname" && value == "") errorList.push(3);
					else if (el.name == "sname" && !namePattern.test(value)) errorList.push(4);
					
					if (el.name == "phone" && value == "") errorList.push(5);
					else if (el.name == "phone" && !phonePattern.test(value)) errorList.push(6);
					
					if (el.name == "mail" && value == "") errorList.push(7);
					else if (el.name == "mail" && !emailPattern.test(value)) errorList.push(8);
				break;
				case "file" :
					// Ничего не делаем, хотя можем
				break;
				case "checkbox" :
					// Ничего не делаем, хотя можем
				break;
				case "radio" :
					// Ничего не делаем, хотя можем
				break;
				default :
					// Сюда попадают input-ы, которые не требуют обработки
					// type = hidden, submit, button, image
				break;
			}
		
		} else if (elName == "textarea") { // TEXTAREA
					// Ничего не делаем, хотя можем
		} else if (elName == "select") { // SELECT
		
			if (el.name == "edu" && value <= 0) errorList.push(9);
			if ((el.name == "day" || el.name == "month") && value <= 0) errorList.push(10);
		} else {
		// Обнаружен неизвестный элемент ;)
		}
	}

	// Финальная стадия
	// Если массив ошибок пуст - возвращаем true
	if (!errorList.length) return true;
	// Если есть ошибки - формируем сообщение, выовдим alert
	// и возвращаем false
	var errorMsg = "При заполнении формы допущены следующие ошибки:\n\n";
	
	for (i = 0; i < errorList.length; i++) {
		errorMsg += errorText[errorList[i]] + "\n";
	}
	
	alert(errorMsg);
	return false;
}