function form_validator(_Form, aFields)
{
	var oEl = null;
	var oForm = (typeof _Form === 'string') ? ($('#' + _Form)[0] || null) : _Form;
	if ( !oForm )
	{
		alert('Форма не найдена.');
		return false;
	}
	for (var idx in aFields)
	{
		if (aFields[idx] != null)
		{
			oEl = oForm.elements.namedItem(aFields[idx]['name']);
			if (oEl != null)
			{
				if (((oEl.tagName.toUpperCase() == 'INPUT' && oEl.type.toUpperCase() == 'TEXT')
					 || (oEl.tagName.toUpperCase() == 'TEXTAREA')
					 || (oEl.tagName.toUpperCase() == 'SELECT'))
					&& (oEl.value == '' || oEl.value == 0))
				{
					if (aFields[idx]['msg'])
					{
						alert(aFields[idx]['msg']);
					}
					else
					{
						alert('Поле "' + aFields[idx]['caption'] + '" должно быть заполнено.');
					}
					oEl.focus();
					return false;
				} // if ...
			}
		}
	}
	return true;
}

function form_reset(l)
{
	var key = null, jq = null, defv = null;
	for (key in l)
	{
		jq = $(l[key]);
		if ( jq.length == 0 ) continue;
		defv = jq[0].getAttribute('_defvalue');
		if ( defv ) jq.val(defv);
	}
}

function form_init(l)
{
	var key = null, jq = null;
	for (key in l)
	{
		jq = $(l[key]);
		if ( jq.length == 0 ) continue;
		jq.css('color', '#777777');
		jq[0].setAttribute('_patched', '0');
	}
}

function form_inputchanged(a)
{
	var patched = a ? a.getAttribute('_patched') : '0';
	if (patched && patched == '0')
	{
		a.style.color = '#000000';
		a.setAttribute('_patched', '1');
	}
}

// for Internet Explorer
function form_onPropChanged()
{
	if (event.propertyName.toLowerCase () == "value")
	{
		form_inputchanged(event.srcElement);
	}
}
