/*zmienne przechowujące kolory background'u inputa z wartością poprawną i niepoprawną*/
var input_background_correct='white';
var input_background_incorrect='#f9aeb3';

/*sprawdzanie czy wymagane pola zostały wypełnione.
  Dla każdego pola niewypełnionego zmienia kolor.
  parametry:
	form			-	formularz
	form_elements	-	pola wymagane
  return:
	true	-	pola zostały wypełnione
	false	-	pola nie zostały wypełnione  
  -------------------------------------
*/
function isImportantFilled(form,form_elements)
{	/*zmienna do określenia czy pola są puste*/
	is_important_empty=false;
	
	/*sprawdzanie czy pola wymagane zostały wypełnione*/
	for(element_to_check in form_elements)
	{	if(changeInputBackground((form.elements[form_elements[element_to_check]].value!=''),form.elements[form_elements[element_to_check]])==false)
		{	is_important_empty=true;
		}
	}
	
	/*zwracanie wyniku*/
	if(is_important_empty)
	return false;
	return true;
}
/*---------------------------------------------*/

/*zmiana tła zależna od poprawności walidacji
  parametry:
	validate_result	-	wynik walidacji
	form_element	-	element formularza
  return:
	validate_result
  -----------------------------------------------
*/
function changeInputBackground(validate_result,form_element)
{	/*zmiana koloru tła*/
	if(validate_result)
	form_element.style.backgroundColor=input_background_correct;
	else
	form_element.style.backgroundColor=input_background_incorrect;
	
	/*zwracanie wyniku walidacji*/
	return validate_result;
}
/*---------------------------------------------*/

/*sprawdzanie czy zmienna jest ciągiem numerycznym
  parametry:
	number_var	-	wartość do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isNumeric(number_var)
{	/*zamiana przecinka na kropkę*/
	number_var=number_var.replace(',','.');
	
	/*czy ciąg składa się jedynie z liczb*/
	if (isNaN(number_var))
	return false;
	return true;
}
/*---------------------------------------------*/

/*funkcja sprawdzajaca czy zmienna jest kodem pocztowym [polskim]
  parametry:
	postal_code	-	zmienna do sprawdzenia
  return:
	true	-	rok przestępny
	false	-	rok zwykły
  -----------------------------------------------
*/
function isPostalCode(postal_code)
{	/*czy ciąg pasuje do wzorca*/
	pattern=/^[0-9]{2}\s*-\s*[0-9]{3}$/;
	
	if (pattern.test(postal_code))
	return true;
	return false;
}
/*---------------------------------------------*/

/*sprawdzanie czy zmienna jest ciągiem numerycznym całkowitym
  parametry:
	number_var		-	wartość do sprawdzenia
	forbid_negative	-	czy wartości ujemne mają być zabronione
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isIntegerString(number_var,forbid_negative)
{	/*zamiana przecinka na kropkę*/
	number_var=number_var.replace(',','.');
	
	/*czy ciąg składa się jedynie z liczb*/
	if (isNaN(number_var))
	return false;
	
	/*czy ciąg jest liczbą całkowitą*/
	if(parseInt(number_var)!=parseFloat(number_var))
	return false;
	
	if(forbid_negative)
	{	/*czy jest większy lub równy zero*/
		if(parseInt(number_var)<0)
		return false;
	}
	
	return true;
}
/*---------------------------------------------*/

/*sprawdzanie maila
  parametry:
	mail	-	wartość do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isCorrectMail(mail)
{	pattern=/^[a-z][a-z0-9_\-]*([\.][a-z0-9_\-]+)*@[a-z0-9]+([a-z0-9_\-]*[\.])+[a-z]{2,7}$/i;
	if (pattern.test(mail))
	return true;
	return false;
}
/*---------------------------------------------*/

/*Sprawdzanie poprawności stringa.
  Dozwolone znaki a-z, spacja, -, polskie znaki. Musi zaczynać się i kończyć na literę
  parametry:
	string_to_check	-	wartość do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isCorrectString(string_to_check)
{	pattern=/^[a-zA-ZęóąśłńźżćĘŁÓŚĄŻŹĆŃ][a-zA-Z\-ęóąśłńźżćĘŁÓŚĄŻŹĆŃ\s^\n]*[a-zA-ZęóąśłńźżćĘŁÓŚĄŻŹĆŃ]$/;
	if (pattern.test(string_to_check))
	return true;
	return false;
}
/*---------------------------------------------*/

/*funkcja sprawdzająca, czy ciąg jest poprawnym numerem NIP.
  Funkcja usuwa z ciągu spacje i - (myślnik), więc nie są one brane pod uwagę.
  Następnie funkcja sprawdza, czy zmienna składa się z 10 cyfr.
  parametry:
	nip	-	zmienna do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isNip(nip)
{	/*usuwanie spacji i myślników*/
	nip=nip.replace(/\-/g,'');
	nip=nip.replace(/\s/g,'');
	
	/*sprawdzanie, czy zmienna składa się z 10 cyfr*/
	pattern=/^[0-9]{10}$/;
	if (pattern.test(nip))
	return true;
	return false;
}
/*---------------------------------------------*/

/*Sprawdzanie poprawności numeru telefonu.
  Funkcja sprawdza długość (6<phone_number<31), zmienna może zawierać znaki: 0-9, -, spacja.
  parametry:
	phone_number	-	wartość do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isPhoneNumber(phone_number)
{	/*sprawdzanie długości zmiennej*/	
	phone=phone_number.split('');
	if(phone.length<7 || phone.length>30)
	return false;
	
	/*sprawdzanie czy jest zgodna z wzorcem*/
	pattern=/^[0-9\-\s^\n]*$/;
	if (pattern.test(phone_number))
	return true;
	return false;
}
/*---------------------------------------------*/

/*sprawdzanie czy ciąg jest liczbą całkowitą
  parametry:
	number_var		-	wartość do sprawdzenia
	forbid_negative	-	czy wartości ujemne mają być zabronione
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isInteger(number_var,forbid_negative)
{	/*zamiana przecinka na kropkę*/
	number_var=number_var.replace(',','.');
	
	/*czy ciąg pasuje do wzorca*/
	if(forbid_negative)
	pattern=/^(0|([1-9][0-9]*))$/;
	else
	pattern=/^(0|(\-?[1-9][0-9]*))$/;
	
	if (pattern.test(number_var))
	return true;
	return false;
	
	
}
/*---------------------------------------------*/

/*funkcja sprawdzająca poprawność daty
  parametry:
	date_to_check	-	wartość do sprawdzenia
  return:
	true	-	zmienna jest prawidłowa
	false	-	zmienna jest niepoprawna
  -----------------------------------------------
*/
function isCorrectDate(date_to_check)
{	/*sprawdzanie, czy data wpisana w odpowiedni sposób*/
	pattern=/^[1-9][0-9][0-9][0-9]\-[0-1][0-9]\-[0-3][0-9]$/;
	if (!pattern.test(date_to_check))
	return false;
	
	/*rozbijanie daty z formularza*/
	my_date=date_to_check.split("-");
	
	/*sprawdzanie daty*/
	if(my_date[1]==2)
	{	if(isLeapYear(my_date[0]))
		{	if(my_date[2]>29)
			return false;
		}
		else
		{	if(my_date[2]>28)
			return false;
		}
	}
	else
	{	if(my_date[1]==4 || my_date[1]==6 || my_date[1]==9 || my_date[1]==11)
		{	if(my_date[2]>30)
			return false;
		}
		else
		{	if(my_date[2]>31)
			return false;
		}
	}
	
	/*jeżeli data jest poprawna*/
	return true;
}
/*---------------------------------------------*/

/*funkcja sprawdzająca, czy rok jest przestępny
  parametry:
	year_to_check	-	wartość do sprawdzenia
  return:
	true	-	rok przestępny
	false	-	rok zwykły
  -----------------------------------------------
*/
function isLeapYear(year_to_check)
{	if(rok%4==0 && (rok%100!=0 || rok%400==0))
	return true;
	return false;
}
/*---------------------------------------------*/
