// validate input data before form submit
function preSubmit(event)
{
	event = event ? event : window.event;

	var sourceForm = event.srcElement.form;
	var fieldType;

	for (j = 0; j < fields.length; j++)
	{
		fieldType = fields[j][2];

		for (i = 0; i < sourceForm.length; i++)
		{
			elem=sourceForm.elements[i];

			if (elem.name && (elem.name == fields[j][0]))
			{
				if (!elem.value.match(/\S/))
				{
					alert ("Не заполнено поле '" + fields[j][1] + "'");
					__focus(elem);
					return false;
				}
				else if (fieldType == "number" && !elem.value.match(/^([[1-9][0-9]*|[0+[0-9]+]])$/))
				{
					alert ("Поле '" + fields[j][1] + "' должно целое содержать положительное число");
					__focus(elem);
					return false;
				}
				else if (fieldType == "float" && (elem.value != parseFloat(elem.value) || elem.value <= 0))
				{
					alert ("Поле '" + fields[j][1] + "' должно содержать положительное число");
					__focus(elem);
					return false;
				}
				else if (fieldType == "email" && !elem.value.match(/^[a-z0-9\.\-_\+]+@[a-z0-9\-_]+\.([a-z0-9\-_]+\.)*?[a-z]+$/i))
				{
					alert ("Неверный адрес e-mail");
					__focus(elem);
					return false;
				}
				else if (fieldType == "abc" && !elem.value.match(/^[a-z0-9_]+$/i))
				{
					alert ("Неверный путь");
					__focus(elem);
					return false;
				}
				else if (fieldType == "date" && !parseDate(elem.value))
				{
					alert ("Неверный формат даты");
					__focus(elem);
					return false;
				}
				else if (fieldType == "radio")
				{
					var options = sourceForm.elements[elem.name];

					var value = false;

					for (var k = 0; k < options.length; k++)
					{
						value |= options[k].checked;
					}

					if (!value)
					{
						alert ("Не заполнено поле '" + fields[j][1] + "'");
						return false;
					}
				}
			}
		}
	}

	return true;
}

function parseDate(sValue)
{
	var parts = sValue.match(/^(\d{1,2})[\-|\/](\d{1,2})[\-|\/](\d{1,4})$/);

	if (!parts || parts.length < 3)
	{
		return false;
	}

	var dd = parseInt(parts[1]);
	var mm = parseInt(parts[2]);
	var yy = parseInt(parts[3]);

	if (yy < 70)
	{
		yy += 2000;
	}
	else if (yy < 100)
	{
		yy += 1900;
	}

	if (mm < 1 || mm > 12 || dd < 1 || dd > 31)
	{
		return false;
	}

	var v = new Date(mm + "/" + dd + "/" + yy);

	if (v.getMonth() != mm - 1)
	{
		return false;
	}

	if (dd < 10)
	{
		dd = "0" + dd;
	}

	if (mm < 10)
	{
		mm = "0" + mm;
	}

	return dd + "-" + mm + "-" + yy;
}

function __focus(elem)
{
	var hlColor	= "#FF0000";
	var n		= 3;
	var pause	= 50;

	elem.select();

	//	prevent crashing under browsers that do
	//	not support currentStyle element preperty
	if (typeof elem.currentStyle == "undefined")
	{
		return;
	}

	var initColor = elem.currentStyle.borderColor;
	var i = 0;

	var timeout = setInterval(function()
	{
		elem.style.borderColor = i++ % 2 ? initColor : hlColor;

		if (i >= n * 2)
		{
			clearInterval(timeout);
		}
	}, pause);
}
