var validateFormMessages = [];
validateFormMessages['required_empty.string'] = 'Pole wymagane nie może być puste';
validateFormMessages['required_empty.boolean'] = 'Proszę zaznaczyć wymagane pole';
validateFormMessages['required_empty.number'] = 'Pole wymagane nie może być puste';
validateFormMessages['email_incorect'] = 'Podany adres email jest niepoprawny';
validateFormMessages['password_incorect'] = 'Podane hasło jest niepoprawne';
/**************************************************************/
function validateEmail(email) 
{
    var emailValidation = /^([\w\-]+)(\.[\w\-]+)*@([\w\-]+\.){1,5}([A-Za-z]){2,4}$/;
    return emailValidation.test(email);
}	
/**************************************************************/
function validatePassword(password) 
{
	return password.length>=6;
}	
/**************************************************************/
function setFieldFocus(field)
{
	if(typeof(field) == 'undefined' || !field)
		return;
	field.focus();
}
/**************************************************************/
function getFieldValue(field) 
{
	if(field.tagName == "INPUT")
	{
		if(field.type == 'text' || field.type == 'password')
			return field.value;
		else if(field.type == 'checkbox')
			return field.checked;
		else if(field.type == 'radio')
			return field.checked;
	}
	else if(field.tagName == "SELECT")
	{
		if(field.value == '0' || field.value == '-1')
			return 0;
		return field.value;
	}
	else if(field.tagName == "TEXTAREA")
	{
		return field.innerHTML;
	}	
	return null;
}	
/**************************************************************/
function validateRequired(returnValue)
{
	if(typeof(returnValue.value) == 'string')
	{
		if(returnValue.value.length == 0)
		{
			returnValue.success = false;
			returnValue.message = getValidationErrorMessage(returnValue.field, 'required_empty.string');
			return returnValue;
		}
	}
	else if(typeof(returnValue.value) == 'boolean')			
	{
		if(returnValue.value === false)
		{
			returnValue.success = false;
			returnValue.message = getValidationErrorMessage(returnValue.field, 'required_empty.boolean');
		}
	}
	else if(typeof(returnValue.value) == 'number')
	{
		if(returnValue.value <= 0)
		{
			returnValue.success = false;
			returnValue.message = getValidationErrorMessage(returnValue.field, 'required_empty.number');
		}
	}
	return returnValue;
}
/**************************************************************/
function getValidationErrorMessage(field, error_message_code)
{
	if(typeof(validateFormMessages[field.id + '_' + error_message_code]) != 'undefined')
		return validateFormMessages[field.id + '_' + error_message_code];
	return validateFormMessages[error_message_code];
}
/**************************************************************/
function validateField(field, show_error_message)
{
	if(typeof(show_error_message) == 'undefined')
		show_error_message = false;
	if(typeof(field) == 'string')
		field = document.getElementById(field);
	if(!field)
		return null;
	var value = getFieldValue(field);
	var returnValue = {field: field, name: field.name, id: field.id, value: value, success: true, message: ''};
	if(typeof(field) == 'undefned' || !field || field.className.length == 0)
		return returnValue;
	var classNames = field.className.split(' ');
	if(classNames.length == 0)
		return returnValue;
	var required = false;
	for(var i=0;i<classNames.length;i++)
	{
		if(classNames[i] == 'form-required')
		{
			required = true;
			returnValue = validateRequired(returnValue);
			if(!returnValue.success)
			{
				if(show_error_message)
					showValidationMessage(returnValue.field, returnValue.message);
				return returnValue;
			}
		}
	}
	for(var i=0;i<classNames.length;i++)
	{
		var className = classNames[i];
		switch(className)
		{
			case 'form-email':
				if(!required && value.length == 0)
					break; 
				if(!validateEmail(value))
				{
					returnValue.success = false;
					returnValue.message = getValidationErrorMessage(field, 'email_incorect');
					if(show_error_message)
						showValidationMessage(returnValue.field, returnValue.message);
					return returnValue;
				}
				break;
			case 'form-password':
				if(!required && value.length == 0)
					break; 
				if(!validatePassword(value))
				{
					returnValue.success = false;
					returnValue.message = getValidationErrorMessage(field, 'password_incorect');
					if(show_error_message)
						showValidationMessage(returnValue.field, returnValue.message);
					return returnValue;
				}
				break;
		}
	}
	returnValue.success = true;
	return returnValue;
}
/**************************************************************/
function hideAllErrorMessages(form)
{
	var elements = form.elements;
	for(var i=0;i<elements.length;i++)
	{
		hideErrorMessageField(elements[i]);
	}
}
/**************************************************************/
function hideErrorMessageField(field)
{
	var error_message = getErrorMessageField(field);
	if(error_message)
		error_message.style.display = 'none';
}
/**************************************************************/
function getErrorMessageField(field)
{
	var elem = document.getElementById('error_' + field.id);
	if(typeof(elem) == 'undefined')
		elem = null;
	return elem;
}
/**************************************************************/
function showValidationMessage(field, message)
{
	if(typeof(field) == 'string')
		field = document.getElementById(field);
	if(!field)
		return null;
	setFieldFocus(field);
	var error_message = getErrorMessageField(field);
	if(error_message)
	{
		error_message.innerHTML = message;
		error_message.style.display = '';
	}
	else
	{
		alert(message);
	}
	return false;
}
/**************************************************************/
function validateForm(aEvent, button, stopOnError)
{
	var validated = true;
	if(typeof(stopOnError) == 'undefined')
		stopOnError = true;
	var form = button.form;
	var elements = form.elements;
	var values = {};
	var validations = {};
	for(var i=0;i<elements.length;i++)
	{
		hideErrorMessageField(elements[i]);
		var returnValue = validateField(elements[i]);
		if(returnValue.success === false)
		{
			validated = false;
			if(stopOnError)
			{
				return showValidationMessage(returnValue.field, returnValue.message);
			}
			else
			{
				showValidationMessage(returnValue.field, returnValue.message);
			}
		}
		if(typeof(returnValue.name) != 'undefined' && returnValue.name != '')
		{
			values[returnValue.name] = returnValue.value;
			validations[returnValue.name] = returnValue;
		}
	}
	return {validated: validated, values: values, validations: validations};
}
/**************************************************************/

