var validation_messages = [];

var email_pattern = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$';
var date_pattern = '^[0-3]?[0-9]\.[0-1]?[0-9]\.[0-9]{4}$';

function Validation(form_id)
{
	$('#'+form_id).submit(validation_check);
	this.add_rules = set_rules;
}

function set_rules(value, name, rules)
{
	rules = rules.split('|');

		$.each(
			rules,
			function(index, rule)
			{
				rule = rule.split(':');
				// Select validation operation
				switch(rule[0])
				{
					case 'required': required(value, name); break;
					case 'len': check_length(value, name, rule[1], 'equal'); break;
					case 'min': check_length(value, name, rule[1], 'min'); break;
					case 'max': check_length(value, name, rule[1], 'max'); break;
					case 'email': check_format(value, name, email_pattern); break;
					case 'date': check_format(value, name, date_pattern); break;
					default: return; break;
				}
			}
		);
}

function required(value, name)
{
	if(!value) validation_messages[validation_messages.length] = 'Nebyla vyplněna položka <strong>' + name + '</strong>';
}


function check_length(value, name, len, operator)
{
	// Validate arguments
	if(!operator) operator = 'equal';
	if(!len.search('/[0-9]+/')) alert('Maximal length value have to be integer...');
	operator = jQuery.trim(operator);
	if(!operator.search('/^(equal|max|min)$/')) alert('Operator have to be only equal, max or min...');
	
	// Stop if there is no value
	if(value.length == 0) return;
	
	switch(operator)
	{
		case 'equal':
			if(value.length != len) validation_messages[validation_messages.length] = "Položka <strong>" + name + "</strong> musí mít přesně " + decline_cahracters(len) + " znaků";
			break;
		case 'max':
			if(value.length > len) validation_messages[validation_messages.length] = "Položka <strong>" + name + "</strong> může mít maximálně " + decline_cahracters(len) + " znaků";
			break;
		case 'min':
			if(value.length < len) validation_messages[validation_messages.length] = "Položka <strong>" + name + "</strong> musí mít minimálně " + decline_cahracters(len) + " znaků";
			break;
	}
}

function match(value1, value2, message)
{
	if(value1 != value2)
	{
		validation_messages[validation_messages.length] = message;
	}
}

function check_format(value, name, pattern, case_sensitive)
{
	if(!ereg(value, pattern, case_sensitive))
	{
		validation_messages[validation_messages.length] = 'Položka <strong>' + name + '</strong> není ve správném formátu';
	}
}

function limit_chars(value, name, pattern, case_sensitive)
{
	if(ereg(value, pattern, case_sensitive))
	{
		validation_messages[validation_messages.length] = 'Položka <strong>' + name + '</strong> obsahuje nepovolené znaky';
	}
}

function ereg(value, pattern, case_sensitive)
{
	if(value == '') return true;
	var expression = (case_sensitive) ? new RegExp(pattern) : new RegExp(pattern, 'i');
    return (value.match(expression)) ? true : false;
}

function add_validation_message(message)
{
    validation_messages[validation_messages.length] = message;
}

function validation_check()
{	
	if(validation_messages != '')
	{
		var messages = '';
		if(!$.isArray(validation_messages)) validation_messages = [validation_messages];

		$.each(
		    validation_messages,
		    function( index, value )
			{
				messages = messages + '<li>' + value + '</li>';
			}
		);

		validation_messages = [];
        
        showSystemMessage(messages);
		return false;
	}
	else
	{
		return true;
	}
}

function decline_cahracters(number)
{
	if(number == 1)
		return 'znak';
	else if(number > 1 && number < 5)
		return 'znaky';
	else if(number >= 5)
		return 'znaků';
}