var formObject;
var inputObject;
var inputObjectValue;
var inputObjectTitle;
var isFormValidFlag;
var conditions;
var not;
var messageText;
var skipIfEmpty;

//------------------------------------------------------------------------------


function initForm(formName) {
	formObject = document.getElementById(formName);
	//alert(formObject);
	inputObject = null;
	inputObjectValue = null;
	inputObjectTitle = '';
	isFormValidFlag = true;
	conditions = new Array();
	not = false;
	messageText = '';
	skipIfEmpty = false;
}

function initInput(inputName, inputTitle) {
	eval('inputObject = formObject.'+inputName+';');
	inputObjectValue = inputObject.value;
	inputObjectTitle = inputTitle;
}

//------------------------------------------------------------------------------

function notValidMessage() {
	if (messageText == '') {
		alert('Niepoprawna wartość pola \''+inputObjectTitle+'\'');
	} else {
		alert(messageText);
	}
}

//------------------------------------------------------------------------------

//we have form's object as 'formObject' global var here
//we also have global var with actual form's validation process status (isFormValidFlag)

function isFormValid() {
	return isFormValidFlag;
}

function submitFormIfValid() {
	if (!isFormValid()) {
		return false;
	}
	formObject.submit();
}

//------------------------------------------------------------------------------

function _valid() {
	if (!isFormValid()) {
		return false;
	}
	for (i=0; i<conditions.length; i++) {
		crrCondition = not ? '!('+conditions[i]+')' : conditions[i];
		//alert(crrCondition);
		//alert(crrCondition);
		//alert(inputObject.type);
		eval('matchCondition = '+crrCondition+';');
		//alert(matchCondition);
		if(!matchCondition && !(inputObjectValue == '' && skipIfEmpty)) {
			notValidMessage(); 
			isFormValidFlag = false;
			if (inputObject.type == 'text') {
				inputObject.focus();
				if (inputObjectValue != "") {
					inputObject.select();
				}
			}
			not = false;
			skipIfEmpty = false;
			return false;
		}
	}
	not = false;
	skipIfEmpty = false;
	return true;
}

//------------------------------------------------------------------------------

function isDefined(text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue != undefined'
	);
	return _valid();
}

function isIntValue(text) {
	messageText = text;
	conditions = new Array(
		'!isNaN(inputObjectValue)'
	);
	return _valid();
}

function isIntValuePositive(text) {
	messageText = text;
	conditions = new Array(
		'!isNaN(inputObjectValue)',
		'inputObjectValue > 0'
	);
	return _valid();
}

function hasLength(stringLength, text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue.length == '+stringLength
	);
	return _valid();
}

function isNotEmptyString(text) {
	messageText = text;
	not = true;
	return hasLength(0, text);
}

function lettersOnly(text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue.match(/^[a-zA-Z]+$/)'
	);
	return _valid();
}

function digitsOnly(text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue.match(/^[0-9]+$/)'
	);
	return _valid();
}

function isPostCode(text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue.match(/^[0-9]{2}-[0-9]{3}$/)'
	);
	return _valid();
}

function isEmail(text) {
	messageText = text;
	conditions = new Array(
		'inputObjectValue.match(/^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$/)'
	);
	return _valid();
}
