//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 = document.getElementById('captcha');

    if(is_captcha)
	{
	   captcha_validate();
	}

	//Возвращение значения после проверки
	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()
{
	if ((xmlHttp.readyState == 4) || (xmlHttp.readyState == 0))
	{
		//document.getElementById('cap_id').innerHTML='';
		cValue = document.getElementById('captcha').value;

		xmlHttp.open("GET","/_get_captcha.php?captcha="+cValue,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; - нельзя ставить, иначе форма отправляется без валидации полей
			  document.getElementById('cap_id').innerHTML='';
		}

		if(id_text=='0')
		{
              valid = false;
              document.getElementById('cap_id').innerHTML='<b style="color:red;">Код введен неправильно</b>';
              change_captha();
        }	
										
	}	
	 
	return;	
}

function change_captha(){
      var src = document.getElementById('captcha_img').src;
      src = src.replace(/&hash=[\d\.]+/, '');
      src += '&hash='+Math.random();
      document.getElementById('captcha_img').src = src;	
}
//------------------------------------------------------------------------------------------------
//----------------------------------XmlHttpRequest - проверка captcha-----------------------------
//------------------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------------
//----------------------------------Функция DOM-проверки формы------------------------------------
//------------------------------------------------------------------------------------------------
function form_validate(FormObj)
{
	var children=FormObj.childNodes;
	var regExpObj=/(.+)@(.+)\.(.+)/;

	//Пробежимся по всем потомкам формы
	for (var i=0; i<children.length; i++)
		{
			if(children.item(i).tagName=='INPUT' || children.item(i).tagName=='TEXTAREA')
				{
					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;
						}//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(children.item(i).hasChildNodes){form_validate(children.item(i));}
		}

    if(valid) return true;
	else return false;
}
//------------------------------------------------------------------------------------------------
//---------------------------------/Функция DOM-проверки формы------------------------------------
//------------------------------------------------------------------------------------------------

//При клике первый блок показывается, второй убирается	
function display_block(name1,name2)
	{					
		object1=document.getElementById(name1);
		object2=document.getElementById(name2);
		if(object1)
		  {					
			object1.style.display='block';					
		  }
		if(object2)
		  {
			object2.style.display='none';
		  }	
	}
	
//Для редактирования облака тегов	
function add_tag(count_id, block_id)
	{			
		var count = document.getElementById(count_id).value;
		
		var block = document.getElementById(block_id);
		var div = document.createElement('div');
		div.id = 'new_div_'+count;
		div.innerHTML = '<table style="width: 400px; border: none;"><tr><td style="border: none;"><div><div style="width: 160px;" class="sapid_qc_marker">Название тега</div><input type="text" value="" name="add_tagcloud['+count+'][TAG]" style="width: 160px;" /></div></td><td style="border: none;"><div><div style="width: 160px;" class="sapid_qc_marker">Ссылка </div><input type="text" value="" name="add_tagcloud['+count+'][LINK]" style="width: 160px;" /></div></td><td style="border: none;"><div><div style="width: 160px;" class="sapid_qc_marker">Альтернативный текст </div><input type="text" value="" name="add_tagcloud['+count+'][TITLE]" style="width: 160px;" /></div></td><td style="border: none;"><img src="/usr/system/images/delete.gif" width="12" height="14" style="cursor: pointer;" alt="Delete" title="Delete" onclick="document.getElementById(\''+div.id+'\').parentNode.removeChild(document.getElementById(\''+div.id+'\'))"></td></tr></table>	';
		block.parentNode.insertBefore(div, block);
		
		document.getElementById(count_id).value = parseInt(count)+1;
	}
	
function iePNGFix(dImg)
{
	dImg.runtimeStyle.behavior='none';
	
	var src = dImg.src ;
	if(src.substr( src.length-4 , 4).toLowerCase() != '.png'){return;}
	if(!dImg.complete){setTimeout( function(){ iePNGFix(dImg);} ,100 );}
	else
	{
		var dParentNode = dImg.parentNode;
		var oParentNodeStyle = dParentNode.runtimeStyle ;
		var oImgStyle =  dImg.currentStyle;
		var sDisplay = dParentNode.currentStyle.display.toLowerCase();
		dParentNode.title = ( dImg.title || dImg.alt );
		oParentNodeStyle.width = dImg.width + 'px';
		oParentNodeStyle.height = dImg.height + 'px';
		oParentNodeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + dImg.src + "',sizingMethod='scale')";
		oParentNodeStyle.border = [ oImgStyle.borderStyle , oImgStyle.borderWidth , oImgStyle.borderColor ].join(' '); 
		if(! dParentNode.currentStyle.hasLayout){oParentNodeStyle.display = 'inline-block' ;};
	};
};	