	/* Validator */
	var has_errors = false;
	var errors_map = {};

	function validator_map(map)
	{
		errors_map = map;
	}

	function validator_unmap()
	{
		errors_map = {};
	}

	function validator_has_errors()
	{
		return has_errors;
	}

	function validator_get(name, all)
	{
		var element = $("#" + name);
		if (!element.length)
			throw "";

		var value = "";

		var tag_name = element[0].tagName;
		switch (tag_name)
		{
			case "INPUT":
				value = trim(element.val());
				break;
			case "TEXTAREA":
				value = element.val();
				break;
			case "SELECT":
				if (all)
				{
					value = inputs_select_get_values(element);
					if (!value.length)
						value = "";
				}
				else
				{
					value = element.val();
					if (value === null)
						value = "";

					if (typeof value == "object")
						break;

					value = trim(value);
				}
				break;
		}

		if (value !== "")
			return value;

		validator_parse_string(name);
		has_errors = true;

		return null;
	}

	function validator_show_error(object, text, clear)
	{
		object = validator_get_object(object);
		if (object === null)
		{
			alert(text);
			return;
		}

		if (clear)
			validator_reset();

		object.addClass("error_selected");

		var errors = validator_find_container(object);
		if (!errors)
			return;

		if (errors.text() != "")
			text = "<br />" + text;

		errors.append(text);
		errors.show();
	}

	function validator_parse_string(param)
	{
		var object = $("#" + param);
		if (!object.length)
		{
			alert("Errors: Can't find '#" + param + "' element");
			return;
		}

		var label = $("label[for=" + param + "]");

		var name = "";
		if (label.length == 1)
			name = trim(label.text(), "\\s:");
		else
			name = param;

		validator_show_error(object, "Поле <b>" + name + "</b> обязательно для заполнения");
	}

	function validator_parse_object(param)
	{
		for (var key in param)
			validator_show_error(key, "Поле <b>" + param[key] + "</b> обязательно для заполнения");
	}

	function validator_reset()
	{
		$(".error_selected").removeClass("error_selected");
		$(".errors").empty();
		$(".errors").hide();

		has_errors = false;
	}

	function validator_get_object(object)
	{
		if (typeof object != "string")
			return object;

		if (typeof errors_map[object] != "undefined")
			object = errors_map[object];

		if (typeof object != "string")
			return object;

		return $("#" + object);
	}

	function validator_find_container(object)
	{
		while (object.length)
		{
			var errors = object.find(".errors");
			if (errors.length)
				return errors;

			object = object.parent();
		}

		alert("Errors: Can't find '.errors' container");
		return null;
	}