//////////////////////////////////////////////////////////////////////////////////////////////////////
// ver 2006-04-18
// www.u-soft.ru
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Модуль предназначен для проверки корректности ввода в диалоговых формах
// Механизм работы следующий: к каждому полю ввода можно добавлять дополнительное поле validate, 
// в котором на языке JavaScript описывается условие проверки правильности ввода
// Функция validateform(frm) перебирает все элементы формы, проверяет наличие скрипта validate и выполняет его
//		eval(validate) = True  -> поле заполнено правильно 
//		eval(validate) = False -> поле заполнено неправильно 
// Для совместимости со старыми версиями движка оставлена также проверка по имени поля:
// Если имя поля начинается с префикса r_ -> значит поле не должно быть пустым
// Если имя поля = form_email -> значит это должен быть E-Mail
///////////////////////////////////////////////////////////////////////////////////////////////////////
// РЕКОМЕНДАЦИИ ПО ДОРАБОТКЕ:
// Можно добавлять новые функции для проверки значений. Например isPhone(value), isRussian(value), isNumeric(value)
// тогда в свойствах опции validate можно будет использовать эти новые функции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// ПРИМЕР: 
// 1. Проверяем, что поле subject не было изменено пользователем:
//     <input type="hidden" name="subject" validate="value=='Заказ на демоверсию'" value="Заказ на демоверсию">
// 2. Проверяем, что поле email является адресом электронной почты:
//     <input type="text" name="email" validate="isEmail(value)">


whitespace = " \t\n\r";
iEmail = "Введите правильный адрес электронной почты (например foo@bar.com).";

// Проверяем, что строка - пустая
function isEmpty(s) { return ((s == null) || (s.length == 0)); }


// Строка - из пробелов или пустая
function isWhitespace (s) {
  var i;
  if (isEmpty(s)) return true;
  for (i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if (whitespace.indexOf(c) == -1) return false;
  }
  return true;
}

// 
function doesExist (s) { return ( ! isEmpty(s) && ! isWhitespace (s) ); }

// Проверяем корректность адреса электронной почты.
function isEmail (s) {
  if (isEmpty(s)) return ( true );
  if (isWhitespace(s)) return ( false );
  var i = 1;
  var sLength = s.length;
  while ((i < sLength) && (s.charAt(i) != "@")) { i++; }
  if ((i >= sLength) || (s.charAt(i) != "@")) return ( false );
  else i += 2;
  while ((i < sLength) && (s.charAt(i) != ".")) { i++; }
  if ((i >= sLength - 1) || (s.charAt(i) != ".")) return ( false );
  else return ( true );
}

////////////////////////////////////////////////////////////
// Проверка корректности всей формы
////////////////////////////////////////////////////////////
function validateform(frm)
{
  for (i=0;i<frm.elements.length;i++)
  {
     
	// По каждому элементу просматриваем опцию validate
	// validate - это самодельная опция, в которой хранится сценарий JavaScript для проверки правильности значения поля.
	// Сценарий вызывается при помощи функции eval()
	 if (  doesExist ( frm.elements[i].validate ) ) {
		    var value = frm.elements[i].value;
			var validate=frm.elements[i].validate;
			var result=eval(validate);
			if (! result)
			{
				return ( false );
			}
		}

	// Опция оставлена для совместимости с предыдущими версиями движка:
	// префикс r_ в имени поля означает, что поле не должно быть пустым.
	// В последующих версиях рекомендуется использовать опцию validate
	if (frm.elements[i].name)
	{
	 if (frm.elements[i].name.indexOf('r_')==0)
     {
		if ( ! doesExist ( frm.elements[i].value ) ) {
			alert ( "Одно или несколько полей не заполнены." );
			frm.elements[i].focus();
			return ( false );
		} 
     }


	// Опция оставлена для совместимости с предыдущими версиями движка:
	// В последующих версиях рекомендуется использовать опцию validate="isEmail(value)"
	 if (frm.elements[i].name=='form_email')
	 {
		if ( ! doesExist ( frm.form_email.value ) ) {
			alert ( "Введите ваш email." );
			frm.form_email.focus();
			return ( false );
		}
		if ( ! isEmail ( frm.form_email.value ) ) {
			alert ( iEmail );
			frm.form_email.focus();
			return ( false );
		}
	 }
	}
  }
  return true;
}
