// Field validators regexps.
var blank_regexp = "^$";
var name_regexp = "^[\w\.\']{2,}([\s][\w\.\']{2,})+$";
var username_regexp = "^[\w\d\_\.]{4,}$";
var password_regexp = "^.{6,}$";
var email_regexp = "^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$";
var domain_regexp = "^([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$";

function osm_form_validator(form_name)
{
	var fields = new Array();

	this.add_field = function(new_field)
	{
		fields.push(new_field);
	}

	document.forms[form_name].onsubmit = function()
	{
		for (var i = 0; i < fields.length; i++)
		{
			if (!fields[i].validate_field())
			{
				fields[i].focus_on_field();
				return false;
			}
		}
		
		return true;
	}	
}

function osm_validator_icon(message_field_id)
{
	field = ge(message_field_id);

	var status_span = document.createElement("span");
	var status_msg_span = document.createElement("span");
	status_msg_span.className = "error_invlid_msg";
	
	status_span.appendChild(status_msg_span);
	field.appendChild(status_span);

	this.show_valid_message = function()
	{
		status_span.className = "field_valid";
		status_msg_span.innerHTML = "&nbsp";
	}

	this.show_invalid_message = function(text)
	{
		status_span.className = "field_invalid";
		status_msg_span.innerHTML = text;
	}
	
	this.hide = function()
	{
		status_span.className = "";
		status_msg_span.innerHTML = "&nbsp";
	}
}

function osm_field(field_id, message_field_id)
{
	var field = ge(field_id);
	var validator_icon = new osm_validator_icon(message_field_id)
	
	var validity_checks = new Array();

	this.add_validity_check = function(condition_regexp, error_text)
	{
		validity_checks.push({"regexp": condition_regexp, "message": error_text, "not": false});
	}

	this.add_validity_exception_check = function(condition_regexp, error_text)
	{
		validity_checks.push({"regexp": condition_regexp, "message": error_text, "not": true});
	}

	this.focus_on_field = function()
	{
		field.focus();
	}

	function validate_field()
	{
		field.value = field.value.trim();
		var value = field.value;

		var input_is_valid = false;

		for (var i = 0; i < validity_checks.length; i++)
		{
			var validator_regexp = new RegExp(validity_checks[i].regexp, "i");
			
			// Checking validity according to actual field format.
			if (!validity_checks[i].not && value.search(validator_regexp) != -1)
			{
				input_is_valid = true;
			}
			// Checking validity to see validity exceptions (what they *shouldnt* be).
			else if (validity_checks[i].not && value.search(validator_regexp) == -1)
			{
				input_is_valid = true;
			}
			// It's an error
			else
			{
				input_is_valid = false;
				break;
			}
		}
		
		if (input_is_valid)
		{
			validator_icon.show_valid_message();
		}
		else
		{
			validator_icon.show_invalid_message(validity_checks[i].message);
		}
		
		return input_is_valid;
	}
	this.validate_field = validate_field;

	field.onblur = function()
	{
		validate_field();
	}
}

