/* Функция isValidEmail принимает один или 2 аргумента:
email - электронный адрес для проверки;
strict - необязательный логический параметр (true/false), который 
определяет строгую проверку при которой пробелы до и после адреса 
считаются ошибкой

В качестве результата функция возвращает либо true, либо false
*/

function isValidEmail (email, strict)
{
 if ( !strict ) 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,4}$/i).test(email);
}



function checkForm(form) {
// Заранее объявим необходимые переменные
var el, // Сам элемент
elName, // Имя элемента формы
value, // Значение
type; // Атрибут type для input-ов
// Массив списка ошибок, по дефолту пустой
var errorList = [];
// Хэш с текстом ошибок (ключ - ID ошибки)
var errorText = {
1 : "Не заполнено поле 'Имя'",
2 : "Не заполнено поле 'e-mail'",
3 : "Не заполнен номер телефона",
4 : "Не введён текст сообщения",
5 : "Введён неверный адрес e-mail",
6 : "В имени не должно быть цифр"
}
// Получаем семейство всех элементов формы
// Проходимся по ним в цикле
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" && parseInt(value, 10)) errorList.push(6);
			if (el.name == "email" && value == "") errorList.push(2);
			else if (el.name == "email" && !isValidEmail(value)) errorList.push(5);
			if (el.name == "phone" && value == "") errorList.push(3);
			if (el.name == "message" && value == "") errorList.puch(4);
			break;
			case "file" :
			// Ничего не делаем, хотя можем
			break;
			case "checkbox" :
			// Ничего не делаем, хотя можем
			break;
			case "radio" :
			// Ничего не делаем, хотя можем
			break;
			default :
			// Сюда попадают input-ы, которые не требуют обработки
			// type = hidden, submit, button, image
			break;
		}
	} else if (elName == "textarea") { // TEXTAREA
		if (value == "") errorList.push(4);
	} else if (elName == "select") { // SELECT
		if (value == 0) errorList.push(5);
	} 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;
}

