/* 
Данна функція перевіряє чи заповнені всі обов"язкові поля, та чи коректно введені данні
Для перевірки обов"язковості заповнення поля використовується атрибут check елементу форми
Для перевірки типу данних використовється атрибу елементу форми check_type, який може приймати наступны значення:
	int  - це значення атрибуту check_type означає, що данними введеними в поле повинне бути ціле число. Наприклад 5169873044 або -569 або 0
	mail  - це значення атрибуту check_type означає, що данними введеними в поле повинне бути e-mail. Наприклад gansuk@gmail.com
	price  - це значення атрибуту check_type означає, що данними введеним в поле повинне бути НЕ ціле додатнє число. Напркикда 115.35 або 226,669
	date  - це значення атрибуту check_type означає, що данними введеним в поле повинне бути датою. Дата вводиться в форматі yyyy-mm-dd. Наприклад 1988-11-21
	url_code  - це значення атрибуту check_type означає, що данними введеним в поле повинне бути ????? незнаю як описати... Допустимі сиволи - літери, цифри, крапка, дефіс, підкреслювання
	positiv -   це значення атрибуту check_type означає, що данними введеними в поле повинне бути ціле додатнє число. Наприклад 11
	float -   це значення атрибуту check_type означає, що данними введеними в поле повинне бути НЕ ціле число, наприклад -12,26 або 3,8965356



*/

 
 
 

 
 
 
//головна функція, яка викликається сабмітом форми
 
function checkform(f, lang) {
  var types = new Array(); //массив типів полів. В цей масив записуються типи полів, які потрібно потім перевірити на коректність данних
  var numbers = new Array(); //массив номерів полів, які мають атрибут "check_type"  Щоб потім легше було до них звертатися.
  var check_numbers = new Array(); //массив номерів полів. В цей масив записують номери полів які потрібно перевірити. 
  var mesage=''; //початкове повідомлення про незавповнені обов"язкові поля
  
  //цикл перебирає всі елементи форми       
  for (var i = 0; i<f.elements.length; i++) {
    
	//якщо знаходить в якомусть елементі атрибут "check", то
		if (null!=f.elements[i].getAttribute("check")){
		
			//записуєм в массив номери елементів форми, які мабть бути обов"язково заповненими
			check_numbers[check_numbers.length] = i;
		
			//якщо в ел форми э атрибут "check_type", то
			if(null!=f.elements[i].getAttribute("check_type")){
				//записуєм номер ел форми в масив
				numbers[numbers.length] = i;
				//записуєм в массив типи полів, які треба перевірити
				types[types.length] =  f.elements[i].getAttribute("check_type");
			}
       
		}
	}
	
	//var alrt = document.f.Media.value;
	
	
	//перевіряєм чи всі обов"язкові поля заповнені
	for(var i=0; i<check_numbers.length; i++){
		//якщо поле пусте, то додаємо його назву в повідомлення про незаповнені поля
		if(f.elements[check_numbers[i]].value==''){
			mesage += f.elements[check_numbers[i]].name;
			mesage += '\n';
		}
	}
	
	//якщо є незаповнені обов"язкові поля, то виводимон їхні назви
	if(mesage != ''){
		if(lang == 'rus')
			alert("Не заполнены все обязательные поля");
		if(lang == 'eng')
			alert("Not all obligatory fields are filled");
		return false;
	}
	//якщо ні, то відправляєм данні на перевірку коректності
	else{
		for(var i=0; i<types.length; i++){
			if(check_case(f, types[i], numbers[i])==false){
				return false;
			}
			
		}
	}
	
	
	
 }

 //функція яка визначає, якою функцією перевіряти коректність данних, в залежності від типу
function check_case(f, type, number){
	
		switch(type)
			{
				case "int":
							
				return	integer(f, number);
					
				break;    
				
				case "mail":
					
					return mail(f, number);
				break;
				
				case "date":
					
					return date(f, number);
				break;
				
				case "url_code":
					
					return url_code(f, number);
				break;
				
				case "price":
					
					return price(f, number);
				break;
				
				case "positiv":
					
					return positiv(f, number);
				break;
				
				case "float":
					
					return float(f, number);
				break;
				
				default:
					alert("No such default type")
			}
}

//функція яка перевіряє коректність наддних, якщо поле має тип int, тобто в полі має бути ціле число
function integer(f, el){
	var ef=f.elements[el].value;
	//набір дорустимих символів
	var regexpInt=/^-?[0-9]+$/;
	//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими (цифри ві 0 до 9), або false. якщо є ще якісь символи
	var result=regexpInt.test(ef);
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
	
}

function positiv(f, el){
	
	//набір дорустимих символів
	var regexpPositiv=/^[0-9]+$/;
	//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
	var result=regexpPositiv.test(f.elements[el].value);
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
	
}

//перевіряє поле типу mail, тобто чи праилно написаний імейл
function mail(f, el){
	//набір дорустимих символів
	var regexpMail=/^([a-zA-Z0-9])(([a-zA-Z0-9])*([\._-])?([a-zA-Z0-9]))*@(([a-zA-Z0-9\-])+(\.))+([a-zA-Z]{2,4})+$/;
	//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
	var result=regexpMail.test(f.elements[el].value);
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
}

//перевіряє поле типу date
function date(f, el){
	//набір дорустимих символів
	var regexpDate = /^[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]$/;
	//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
	var result=regexpDate.test(f.elements[el].value);
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
}

//перевыряэ поле типу price
function price(f, el){
		//набір дорустимих символів
		var regexpPrice = /^[0-9]+[.,]?[0-9]+$/;
		//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
		var result=regexpPrice.test(f.elements[el].value);
		var b=f.elements[el].value;
		if(result==true){
			var a=b.search(",");
			if(a != null){
				var b = b.replace("," , ".");
			}
		}
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
	
}

function float(f, el){
		//набір дорустимих символів
		var regexpFloat = /^-?[0-9]+[.,]?[0-9]+$/;
		//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
		var result=regexpFloat.test(f.elements[el].value);
		var b=f.elements[el].value;
		if(result==true){
			var a=b.search(",");
			if(a != null){
				var b = b.replace("," , ".");
			}
		}
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
	
}

//перевыряэ поле типу url_code
function url_code(f, el){
	//набір дорустимих символів
	var regexpUrl_code = /^[a-zA-Z0-9-_.]+$/;
	//в result потраляє або значення true, якщо в  полі немає інших символів, крім допустими, або false. якщо є ще якісь символи
	var result=regexpUrl_code.test(f.elements[el].value);
	
	//якщо результат false, тобто в полі є недопустимі символи, то фокусуємо курсор на невірно запоаненому поді і зупиняєм перевірку
	if(!result){
		f.elements[el].focus();
		return false;
	}
	
}