var valid=true;
var bgcolor='#FFB0B0';
var colors=new Array(6);
var matches='';
var value_matches='';

//Для правильной инициализации valid
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];	
	
	//Собственно, проверка формы	
	validate(FormObj);
	
	//Возвращение значения	
	if(valid){return true;}
	else{return false;}
}

//Функция проверки
function 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("Не e-mail!");
                                          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("Не e-mail!");
                                        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){validate(children.item(i));}	
		}
		
	if(valid)
	  {return true;}
    else
	  {return false;}
}

