function checkForm(form) {
 // Заранее объявим необходимые переменные
 var el, // Сам элемент
 elName, // Имя элемента формы
 value, // Значение
 type; // Атрибут type для input-ов
 // Массив списка ошибок, по дефолту пустой
 var errorList = [];
 // Хэш с текстом ошибок (ключ - ID ошибки)
 var errorText = {
 1 : "not filled 'Firs Name'",
 2 : "not filled 'Second Name'",
 3 : "not filled 'City'",
 4 : "not filled 'Email Address'",
 5 : "not filled 'Company Website'"
 }
 // Получаем семейство всех элементов формы
 // Проходимся по ним в цикле
 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 == "first_name" && value == "") errorList.push(1);
 if (el.name == "second_name" && value == "") errorList.push(2);
 if (el.name == "city" && value == "") errorList.push(3);
 if (el.name == "email_address" && value == "") errorList.push(4);
 if (el.name == "company_website" && value == "") errorList.push(5);
 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 = "you made a few mistakes:\n\n";
 for (i = 0; i < errorList.length; i++) {
 errorMsg += errorText[errorList[i]] + "\n";
 }
 alert(errorMsg);
 return false;
}
