//Author: FAV
var valid=true;          //Флаг общей проверки
var bgcolor='#FFB0B0';   //Цвет поля по умолчанию
var colors=new Array(6); //Массив цветов
var matches='';          //Захват шаблона
var value_matches='';    //Захват шаблона

var xmlHttp = createXmlHttpRequestObject(); //xmlHttp-объект

//------------------------------------------------------------------------------------------------
//----------------------------------Главная функция проверки--------------------------------------
//------------------------------------------------------------------------------------------------
function init_validate(FormObj)
{
	//До первой ошибки
	valid=true;

	//Список цветов
	colors[0]='#FFB0B0';
	colors[2]='#D7B0FF';
	colors[3]='#B2FFB0';
	colors[1]='#FFB0D8';
	colors[4]='#6495ED';
	colors[5]='#CC9AE4';

	//Случайный выбор цвета из списка
	ind=Math.round(Math.random()*5.4);
	bgcolor=colors[ind];

	//Собственно, проверка формы
	form_validate(FormObj);

    //При проверке captcha запускать процесс

    //Проверяем, есть ли на странице капча, если есть то проверяем
	var is_captcha = FormObj.captcha;

    if(valid && is_captcha)
	{
	   //captcha_validate(FormObj);
	}

	//Возвращение значения после проверки
	if(valid)
	{
	   return true;
	}
	else
	{
	   return false;
	}
}
//------------------------------------------------------------------------------------------------
//---------------------------------/Главная функция проверки--------------------------------------
//------------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------------
//-----------------------------------Создание xmlHttp-объекта-------------------------------------
//------------------------------------------------------------------------------------------------
function createXmlHttpRequestObject()
{

var xmlHttp;

if(window.ActiveXObject)
{ // Если IE
     try
        {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
             {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
             }
            catch (e) {}
        }

}

else{ // Все остальные браузеры

	try{
		xmlHttp = new XMLHttpRequest();
	}

	catch (e){
		xmlHttp = false;
	}
}

 if(!xmlHttp)
 { // Не удалось создать
	Alert('Не удалось создать объект XmlHttpRequest');
 }
 else return xmlHttp;
}
//------------------------------------------------------------------------------------------------
//----------------------------------/Создание xmlHttp-объекта-------------------------------------
//------------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------------
//----------------------------------XmlHttpRequest - проверка captcha-----------------------------
//------------------------------------------------------------------------------------------------
function captcha_validate(FormObj)
{
	if ((xmlHttp.readyState == 4) || (xmlHttp.readyState == 0))
	{
		//document.getElementById('cap_id').innerHTML='';
		cValue = FormObj.captcha.value;

		xmlHttp.open("GET","/_get_captcha.php?captcha="+cValue+"&captcha_sid="+FormObj.captcha_sid.value+"&hash="+Math.random(),false);
        //xmlHttp.onreadystatechange = handleServerResponse;

		xmlHttp.send(null);
		var xmlResponse = xmlHttp.responseXML;

		//При ошибке разбора XML функция просто умирает без лишних вопросов, поэтому имеет смысл смотреть responseText
		//alert(xmlHttp.responseText);

		xmlRoot = xmlResponse.documentElement;
		id = xmlRoot.getElementsByTagName('result');

     	id_text  = id.item(0).firstChild.data;

        //Проверка XML-ответа
		if(id_text=='1')
		{
		      //valid = true; - нельзя ставить, иначе форма отправляется без валидации полей
		}

		if(id_text=='0')
		{
              valid = false;
              FormObj.personalError.parentNode.getElementsByTagName('div')[0].innerHTML='Код введен неправильно.';
			  
			  var newCode = xmlRoot.getElementsByTagName('code').item(0).firstChild.data;
			  var img = FormObj.captcha_sid.parentNode.getElementsByTagName('img')[0];
			  FormObj.captcha_sid.value = newCode;
			  img.src = '/bitrix/tools/captcha.php?captcha_sid='+newCode;
        }	
										
	}	
	 
	return;	
}
//------------------------------------------------------------------------------------------------
//----------------------------------XmlHttpRequest - проверка captcha-----------------------------
//------------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------------
//----------------------------------Функция DOM-проверки формы------------------------------------
//------------------------------------------------------------------------------------------------
function form_validate(FormObj)
{
	var regExpObj=/(.+)@(.+)\.(.+)/;
	var tags = new Array('INPUT', 'TEXTAREA', 'SELECT');

	//Пробежимся по всем потомкам формы	
	for (var j=0; j<tags.length; j++)
	{
		var children=FormObj.getElementsByTagName(tags[j]);

		for (var i=0; i<children.length; i++)
		{
			if(children.item(i).getAttribute('validate'))
			{
				//При каждом проходе очищаем подсветку поля
				children.item(i).style.backgroundColor='';

				//Сама проверка валидности
				switch (children.item(i).getAttribute('validate'))
				{
					//Проверка на пустое значение
					case 'not_empty': if(children.item(i).value=='')
					{
						children.item(i).style.backgroundColor=bgcolor;
						alert("Поле не должно быть пустым");
						valid=false;
					}
					break;

					//Проверка на числовое значение
					case 'number':
						if(parseFloat(children.item(i).value)!=children.item(i).value)
						{
							children.item(i).style.backgroundColor=bgcolor;
							alert("Введено не числовое значение");
								  valid=false;
						}
					break;

					//Проверка обязательного e-mail
					case 'email':
						if(!regExpObj.test(children.item(i).value))
						{
							children.item(i).style.backgroundColor=bgcolor;
							alert("Введен некорректный адрес email");
								  valid=false;
						}
					break;

					//Проверка необязательного e-mail: или пусто, или e-mail
					case 'email_or_empty':
						if(children.item(i).value!='')
						{
							if(!regExpObj.test(children.item(i).value))
							{
								children.item(i).style.backgroundColor=bgcolor;
								alert("Введен некорректный адрес email");
								valid=false;
							}
						}
					break;
					
					//Проверка согласия на обработку персональных данных
					case 'personal':
						if(!children.item(i).checked)
						{
							FormObj.personalError.parentNode.getElementsByTagName('div')[0].innerHTML='Отправка сообщения  не возможна, так как вы<br>не дали согласие на обработку персональных данных.';
							valid=false;
						}
					break;
					
					//Проверка согласия на обработку персональных данных
					case 'personal_show':
						if(!children.item(i).checked)
						{
							FormObj.personalError.parentNode.getElementsByTagName('div')[0].style.display='block';
							valid=false;
						}
					break;
				}//switch


				//------------------Диапазон вида: range_or_empty(1000,50000)------------------------------------
				if( children.item(i).getAttribute('validate').substring(0,5)=='range' && children.item(i).value!='')
				{
				   matches=children.item(i).getAttribute('validate').match('range.*?([0-9]+),.*?([0-9]+).*');
				   if(children.item(i).value.match('^[0-9]+$'))
				   {
					  if( (children.item(i).value*1) > matches[1] && (children.item(i).value*1) < matches[2])
					  {
							   //Если условия проверки удовлетворяются - ничего не делаем
					  }
					  else
					  {
								children.item(i).style.backgroundColor=bgcolor;
								alert("Число не находится в диапазоне от "+matches[1]+" до "+matches[2]);
								valid=false;
					  }
				   } //Если не одно число, возможно 2 числа диапазона
				   else if(children.item(i).value.match('^[0-9]+-[0-9]+$'))
				   {

					  value_matches=children.item(i).value.match('^([0-9]+)-([0-9]+)$');

					  //Проверка вхождения каждой границы в диапазон
					  if(value_matches[1]*1 > matches[1] && value_matches[1]*1 < matches[2] && value_matches[2]*1 > matches[1] && value_matches[2]*1 < matches[2])
					  {
							  //Левая и правая границы введенного диапазона вошли в разрешенный
					  }
					  else    //Границы введенного не вошли в границы разрешенного
					  {
								children.item(i).style.backgroundColor=bgcolor;
								alert("Введенный Вами диапазон не находится внутри разрешенного: от "+matches[1]+" до "+matches[2]);
								valid=false;
					  }

				   } //Если и не одно число, и не диапазон 2 чисел
				   else
				   {
								children.item(i).style.backgroundColor=bgcolor;
								alert("Не число или диапазон вида 100-1000");
								valid=false;
				   }
				}
				//------------------------------/Диапазон вида: range(1000,50000)---------------------------------------------
			}
		}
	}

    if(valid) return true;
	else return false;
}
//------------------------------------------------------------------------------------------------
//---------------------------------/Функция DOM-проверки формы------------------------------------
//------------------------------------------------------------------------------------------------

