var fieldInterval = [];

function fieldError(field, message)
{
	if (field.name == undefined)
	{
		field = field[0];
	}
	
	var error_object = null;
	_field = field;
	while (error_object == null)
	{
		_field = _field.nextSibling;
		if (_field.nodeType == 1 && _field.className == "error")
		{
			error_object = _field;
			break;
		}
		else if (_field.nodeType == 1 && _field.className == "description")
		{
			break;
		}
	}
	
	if (error_object != null)
	{
		error_object.innerHTML = message;
	}
}

function hideField(field)
{
	var _field = $(field + "_id");

	var row_object = null;
	while (_field != null && row_object == null)
	{
		_field = _field.parentNode;
		if (_field.nodeName.toLowerCase() == "tr")
		{
			row_object = _field;
			break;
		}
	}
	
	row_object.style.display = "none";
}

function showField(field)
{
	var _field = $(field + "_id");

	var row_object = null;
	while (_field != null && row_object == null)
	{
		_field = _field.parentNode;
		if (_field.nodeName.toLowerCase() == "tr")
		{
			row_object = _field;
			break;
		}
	}
	
	row_object.style.display = "";
}

function fieldValidate(field, related)
{
	var _field = $(related + "_id");
	if (_field != null)
	{
		field = _field;
	}

	var form_object = null;
	var _field = field;
	while (_field != null && form_object == null)
	{
		_field = _field.parentNode;
		if (_field.nodeName.toLowerCase() == "form")
		{
			form_object = _field;
			break;
		}
	}
	
	var fieldValue = field.value;
	if (field.type == "checkbox")
	{
		fieldValue = field.checked ? field.value : "";
	}
	
	if (this["ajaxFormBefore_" + form_object.name] != undefined)
	{
		this["ajaxFormBefore_" + form_object.name](form_object.name);
	}
	
	new Ajax.Request(
		form_object.action,
		{
			method: "post",
			parameters: {"__DAZOOT_AJAX_FORM__": true, field: field.name, value: fieldValue},
			onSuccess: function(transport)
			{
				var json = transport.responseText.evalJSON();
				if (json == false)
				{
					errorMessage("Could not complete the request");
				}
				else
				{
					if (json.status == "error")
					{
						fieldError(field, json.message);
					} else
					{
						fieldError(field, "&nbsp;");
					}
				}
				if (this["ajaxFormAfter_" + form_object.name] != undefined)
				{
					this["ajaxFormAfter_" + form_object.name](form_object.name, json, field.name);
				}
			},
			onFailure: function()
			{
				errorMessage("Could not complete the request");
			}
		}
	);
}

function fieldValidateInit(field, related)
{
	var _field = $(related + "_id");
	if (_field != null)
	{
		field = _field;
	}

	var fn = field.name;
	
	clearTimeout(fieldInterval.fn);
	fieldInterval.fn = null;
	
	fieldInterval.fn = setTimeout(
			function()
			{
				fieldValidate(field, related)
			}
			, 1000, field, related
	);
}


