/*
	Walidacja formularzy by Adam Kopeć 2009
*/

//function validateForm
//
//funkcja waliduje formularz wg podanych kryteriów, wyświetla w odpowiednich miejscach komunikaty o błędach
//i opcjonalnie wyróżnia kolorem pola z błędnymi danymi
//
//form = obiekt formularza
//formFields = tablica nazw pól formularza
//validationMethods = tablica tablic literałów metod walidacji
//messageFields = tablica nazw pól, do których ma trafiać komunikat walidacji
//highlightIncorrect = czy zmieniać styl CSS pola przy błędzie
//correctStyle = styl CSS pola z poprawną daną
//incorrectStyle = styl CSS pola z niepoprawną daną
function validateForm(form,formFields,validationMethods,messageFields,highlightIncorrect,correctStyle,incorrectStyle)
{
	var validationEffect = true;
	for (var i = 0; i < formFields.length; i++ )
	{
		var fieldValidationMsg = '';
		for (var j =0; j < validationMethods[i].length; j++)
		{		
			switch (validationMethods[i][j].substr(0,4))
			{
			case 'pres':
				if (!ValidPresence(form[formFields[i]]))
					fieldValidationMsg = 'Wprowadzenie wartości w tym polu jest wymagane.';
				break;
			case 'minl':
				var minlength = validationMethods[i][j].substr(4);
				if (!ValidMinLength(form[formFields[i]],minlength))
					fieldValidationMsg = 'Wartość nie może być krótsza niż ' + minlength + ' znaków.';
				break;
			case 'maxl':
				var maxlength = validationMethods[i][j].substr(4);
				if (!ValidMaxLength(form[formFields[i]],maxlength))
					fieldValidationMsg = 'Wartość nie może być dłuższa niż ' + maxlength + ' znaków.';
				break;
			case 'kodp':
				if (!ValidPostCode(form[formFields[i]]))
					fieldValidationMsg = 'Niepoprawny kod pocztowy.';
				break;
			case 'mail':
				if (!ValidEmail(form[formFields[i]]))
					fieldValidationMsg = 'Niepoprawny adres e-mail.';
				break;
			case '_nip':
				if (!ValidNIP(form[formFields[i]].value) && ValidPresence(form[formFields[i]]))
					fieldValidationMsg = 'Niepoprawny numer NIP.';
				break;
			}
		}
		if (fieldValidationMsg != '')
		{
			setIncorrect(form[formFields[i]], incorrectStyle);
			validationEffect = false;
		}
		else
		{
			setCorrect(form[formFields[i]],correctStyle);
		}
		document.getElementById(messageFields[i]).innerHTML = fieldValidationMsg;
	}

	return validationEffect;
}

function ValidPostCode(formField)
{
	if (formField.value.search('[0-9]{2}-[0-9]{3}') == -1)
		return false;
	else
		return true;
}

function ValidEmail(formField)
{
	if (formField.value.search('[a-z0-9_.-]+([_\\.-][a-z0-9]+)*@([a-z0-9_\.-]+([\.][a-z]{2,4}))+') == -1)
		return false;
	else
		return true;
}

function ValidPresence(formField)
{
	if (formField.value == null || formField.value == '')
		return false;
	else
		return true;
}

function ValidMinLength(formField,minlength)
{
	if (formField.value.length < minlength)
		return false;
	else
		return true;
}

function ValidMaxLength(formField,maxlength)
{
	if (formField.value.length > maxlength)
		return false;
	else
		return true;
}

//ustawia styl CSS pola na pole z błędem
function setIncorrect(formField,incorrectStyle)
{
	formField.className = incorrectStyle;
}

//ustawia styl CSS pola na pole z poprawną wartością
function setCorrect(formField,correctStyle)
{
	formField.className = correctStyle;
}

//walidacja NIP by Marcin Pawlak http://tech.bigu.pl/walidacja-formularzy-w-javascript/
function ValidNIP(input_data)
{
	if ( !input_data.match( /^[0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/ )
	&& !input_data.match( /^[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/ )
	&& !input_data.match( /^[0-9]{10}$/ ) )
		return false;

		var my_nums = input_data.replace(/-/g,'');
		var valid_nums = "657234567";
		var sum=0;
		for (var temp=8;temp>=0;temp--)
			sum += (parseInt(valid_nums.charAt(temp)) * parseInt(my_nums.charAt(temp)));
		if ( (sum % 11) == 10 ? false : ((sum % 11) == parseInt(my_nums.charAt(9))) )
			return true;
		else
			return false;
}