var VALIDATION_ERROR = "";

function vReq(field) {
	if (field.value.strip() === "") { VALIDATION_ERROR = "Pole nie może być puste"; return false; }
	else return true;
}

function vNotEqual(field, value) {
	if ($F(field) == value) { VALIDATION_ERROR = "Pole nie może być puste"; return false; }
	else return true;
}

function vReqChecked(field) {
	if (field.checked == false) { VALIDATION_ERROR = "Musisz zaakceptować regulamin aby korzystać ze sklepu"; return false; }
	else return true;
}

function vIfChecked(field, checkBoxId, func) {
	if ($(checkBoxId).checked) { if (typeof(this[func]) === "function") return this[func](field); }
	return true;
}

function vIfNotEmpty(field, func) {
	if (field.value.strip() != "") { return this[func](field); }
	return true;
}

function vIfDualChecked(field, checkBox1Id, checkBox2Id, func) {
	if ($(checkBox1Id).checked && $(checkBox2Id).checked) { if (typeof(this[func]) === "function") return this[func](field); }
	return true;
}

function vEqual(field, srcId) {
	if (field.value !== $(srcId).value) { VALIDATION_ERROR = "Hasła muszą być identyczne"; return false; }
	else return true;
}

function vEmail(field) {
	var email = field.value.strip();
	if (email.search(/^([\w\.\+\-])+@([a-zA-Z0-9\-]+\.)+\w{2,6}$/) === -1) { VALIDATION_ERROR = "Adres e-mail jest niepoprawny"; return false; }
	else return true;
}

function vNIP(field) {
	var nip = field.value.strip();
	if (nip.search(/^(\d{10}|(\d{3}-\d{3}-\d{2}-\d{2})|(\d{3}-\d{2}-\d{2}-\d{3}))$/) === -1) { VALIDATION_ERROR = "Numer NIP jest niepoprawny"; return false; }
	else return true;
}

function vPostal(field) {
	var postal = field.value.strip();
	if (postal.search(/^(\d{2})-(\d{3})$/) === -1) { VALIDATION_ERROR = "Kod pocztowy jest niepoprawny"; return false; }
	else return true;
}

function validateForm(form) {
	var valid = true;
	var form = $(form);
	var fields = form.getElements(), field;
	
	// Wyczyszczenie błędów
	$$("#" + form.id + " span.err").each(function(item) {
		item.innerHTML = "";
	});
	
	// Przejście po wszystkich polach text i password formularza
	for (var i=0; valid && Boolean(field=fields[i]); i++) {
		if (field.className !== "") {
			validators = field.className.split(" ");
			for (var j=0; valid && j<validators.length; j++) {
				var vString = validators[j];
				
				// podział na nazwę funkcji i parametry
				var vFunc = "", vParams = [];
				var paramsIdx = vString.indexOf("(") + 1;
				if (paramsIdx === 0) {
					vFunc = vString;
				}						
				else {
					vFunc = vString.substr(0, paramsIdx - 1);
					var paramsLen = vString.indexOf(")") - paramsIdx;
					vParams = vString.substr(paramsIdx, paramsLen).split(",");
				}
				
				// sprawdzić czy taka funkcja istnieje
				if (typeof(this[vFunc]) !== "function")
					continue;
				
				// dodanie parametru field na początku, wywołanie fukcji
				vParams.unshift(field);
				valid = this[vFunc].apply(null, vParams);
				
				// jeśli niepoprawne, wpisz tekst błędu do span-a
				if (!valid) {
					$("err_" + field.id).innerHTML = VALIDATION_ERROR;
					var x = field.offsetTop;
					var y = field.offsetLeft;
					window.scrollTo(x, y);
					field.focus();
				}
			}
		}
	}
	return valid;
}

