/*
* @autor Шевченко Денис Алексеевич vdddslep@mail.ru
*
* JavaScript функции необходимые для проверки на валидность
*/

// для убирания подкраски текста при фокусе поля
function FieldOnFocus(field)
{
	if(field.value==field.getAttribute('markText'))
	{
		field.value='';  
		field.className = 'inputOnFocus'; 
	}
}

// для подкраски текстом при уводе фокуса с поля
function FieldOffFocus(field)
{
	if(field.value=='')
	{
		field.value=field.getAttribute('markText');
		field.className = 'input';
	}
}

//очищает форму от ненужной информации (от масок (перед отправкой))
function clearForm()
{
	var list = document.getElementsByTagName("input");
	for(var i = 0;i<list.length;i++){ 
		if(list[i].getAttribute('markText') && list[i].value==list[i].getAttribute('markText'))
			list[i].value="";
	}

}

//метод проверяет правильно или нет введено значение в поле
function validateField(field, type) {
	if (field) {
		// if (required && field.value.length<=0) {return false;}
		switch( type ) {
			case 'integer':
				if (!field.match (/^[0-9]*$/)) {return false;}
			break;
			
			case 'email':
				if (!field.match (/^([^@]+@([^@\.]{2,}\.)+[^@\.]{2,})?$/i)) {return false;}
			break;

			case 'string':
				if( !field.match(/^[a-zA-Zа-яА-ЯЁё0-9!@#$%^&*()_\-+\.,:№ ]*$/) ) {return false;}
			break;

			case 'text':
				if( !field.match(/^[a-zA-Zа-яА-ЯЁё0-9!@#$%^&*()_\-+\.,:;\\/"№ \s]*$/) ) {return false;}
			break;
			
			case 'date':
			  
				if( !field.match(/^\d{2}\.\d{2}\.\d{4}$/) ) {return false;}
				var D = Number(field.substring(0, 2)); 
				var M = Number(field.substring(3, 5)); 
				var Y = Number(field.substring(6)); 
				if(Y<1900||Y>2030)
					return false;
					
				return (D>0 && M>0 && Y>0 && (D<=[,31,28,31,30,31,30,31,31,30,31,30,31][M] || D==29 && M==2 && Y%4==0 && (Y%100>0 || Y%400==0)));                                                          
			break;  	
			}
	}else
		return true;
	return true;
}

/*
* метод подкрашивает поле в зависимости от значения переменной valid
*/
function markField(field, valid) {
	if (field) {
		if (valid) {
			field.className='inputOnFocus';
		} else {
			field.className='inputError';
		}
	}
}

//метод для проверки поля на валидность и подкраски его если все плохо он подкполе
function blurValid (field) { 
	var valid = validateField(field.value, field.getAttribute('fieldType'));
	markField(field,valid);
}


//метод выводит отчет о том как заполнеы поля формы
function formValid(){
	var text         = "";     // содержит отчет о проверки на валидность
	var requireText  = "";     // содержит отчет о проверки на заполнение обяз полей 
	var flag         = false;  // нашли или нет косяки в заполнении
	var requireflag  = false;  // нашли или нет косяки в проверке на заполнение обяз полей
	var valid        = false;
	var error        = new Array();
	//расшифровка ошибок
	error['text']     =" может содержать только буквы и цифры";
	error['string']   =" может содержать только буквы и цифры";
	error['integer']  =" может содержать только цифры";
	error['email']    =" должно содержать правильный адресс почты Пример: www@mail.ru";
	
	requireText="Не все обязательные поля заполнены !!! <br>";
	text  = "введены ошибочные данные: <br>";

	for(j=1;j<3;j++){
		//пробегаем по всем полям формы и проверяем верно ли введены данные
		var list;
		//сначало пробегаем по всем полям ввода
		if(j==1)
			list = document.getElementsByTagName("input");
		//потом по всем textarea
		if(j==2)
			list = document.getElementsByTagName("textarea");
		for(var i = 0;i<list.length;i++){ 
			//проверяем все ли обязательные поля заполнены
			if( list[i].getAttribute('require') &&
			(list[i].getAttribute('markText') && list[i].value==list[i].getAttribute('markText')||
			!list[i].getAttribute('markText') && list[i].value=="")) 
			{
				requireflag = true;
				requireText+="Поле '"+list[i].id+"' должно быть заполнено,<br>";	
			}	
		
			if(list[i].getAttribute('fieldType') && 
			(list[i].getAttribute('markText') && list[i].value!=list[i].getAttribute('markText')||
			!list[i].getAttribute('markText') && list[i].value!="") )
			{
				valid = validateField(list[i].value, list[i].getAttribute('fieldType') );
				if(!valid){
					flag=true;
					text+="Поле '"+list[i].id+"' "+error[list[i].getAttribute('fieldType')]+"<br>";
				}
			}
		}
	}
	//сначало выводим сообщение о том что типо не все заполнено
	if(requireflag)
	{
		document.getElementById('monitor').innerHTML="<font class=\"red\">"+requireText+"</font>";
		return false;
	}
	else
		document.getElementById('monitor').innerHTML="";

	//далее не плохо было бы озадачить пользователя что он не так все заполнел
	if(flag){
		document.getElementById('monitor').innerHTML="<font class=\"red\">"+text+"</font>";
		return false;
	}
	else
		document.getElementById('monitor').innerHTML="";
	

	return true;
}
