/*
var FormChecker = function()
{
	this.initialize.apply(this, arguments);
}
*/

var FormChecker = {
	validators: {
		'notEmpty': '/.+/',
		'numeric': '/[0-9]+/',
		'email': '/^.+[@].+[.][a-z]{2,4}$/'
	},

	errors: {
		'common': 'Bitte überprüfen Sie die rot markierten Felder!',
		'email': 'Bitte geben Sie eine gültige E-Mail-Adresse ein!'
	},

	check: function(button, options)
	{
		var form = button;
		var nodeName = form.nodeName.toLowerCase();

		while(form && nodeName != 'form' && form.parentNode)
		{
			form = form.parentNode;
			nodeName = form.nodeName.toLowerCase();
		}

		if(nodeName != 'form')
		{
			alert('Es sieht so aus, als wäre das Formular manipuliert worden!');
			return false;
		}

		var error = this.validate(options)
		if(error)
		{
			alert(error);
		}
		else
		{
			form.submit();
		}

		return false;
	},

	validate: function(options)
	{
		var error = '';
		var errorDisplayed = {};
		var errors = (typeof(globalErrors) == 'undefined') ? this.errors : globalErrors;

		for(validator in options)
		{
			if(typeof(options[validator]) == 'object')
			{
				for(var i = 0; i < options[validator].length; i++)
				{
					var val = eval(this.validators[validator]);
					if(!val.exec($(options[validator][i]).value))
					{
						addClassName($(options[validator][i]).parentNode, 'invalidLabel');
						addClassName(options[validator][i], 'invalid');

						if(validator in errors)
						{
							val = validator;
						}
						else
						{
							val = 'common';
						}
						if(!errorDisplayed[val])
						{
							error += errors[val] + "\n";
							errorDisplayed[val] = true;
						}
					}
				}
			}
			else
			{
				var val = this.validators[validator];
				val = eval(val);
				if(!val.exec($(options[validator]).value))
				{
					addClassName($(options[validator]).parentNode, 'invalidLabel');
					addClassName(options[validator], 'invalid');

					if(validator in errors)
					{
						val = validator;
					}
					else
					{
						val = 'common';
					}
					if(!errorDisplayed[val])
					{
						error += errors[val] + "\n";
						errorDisplayed[val] = true;
					}
				}
			}
		}

		if(!error)
		{
			return false;
		}

		return error;
	},

	removeInvalidFlag: function(input)
	{
		removeClassName(input.parentNode, 'invalidLabel');
		removeClassName(input, 'invalid');
	}
}