//
//	form handlers

genericFormSubmitDisableForm = function (form)
{
	var e;
	for (var i = form.elements.length; i--;)
	{
		e = form.elements[i];
		
		switch (e.type)
		{
			case "hidden":
				break;
			
			default:
				if (!e.disabled)
				{
					e._genericFormSubmit_enableMe = true;
					e.disabled = true;
				}
				break;
		}
	}
}

genericFormSubmitHandler = function (form)
{
	window.setTimeout((function () { genericFormSubmitDisableForm(form); }), 1);
	return true;
}

genericFormResponseEnableForm = function (form)
{
	var e;
	for (var i = form.elements.length; i--;)
	{
		e = form.elements[i];
		
		switch (e.type)
		{
			case "hidden":
				break;
			
			default:
				if (e.disabled && e._genericFormSubmit_enableMe) 
				{
					e._genericFormSubmit_enableMe = false;
					e.disabled = false;
				}
				break;
		}
	}
}

genericFormResponseHandler = function (type, result, evt, request)
{
	switch (type)
	{
		case "load":

			if (result.message)
				alert(result.message);

			if (result.redirect)
			{
				window.location.href = result.redirect;
				break;
			}

			if (result.reload)
			{
				window.location.reload();
				break;
			}

			genericFormResponseEnableForm(request.formNode);

			if (result.reset)
				request.formNode.reset();

			if (result.windowOpen)
			{
				switch (typeof result.windowOpen)
				{
					case "array":
						window.open(result.windowOpen[0], result.windowOpen[1], result.windowOpen[2], result.windowOpen[3]);
						break;
					
					default:
						window.open(result.windowOpen)
						break;
				}
			}

			break;

		case "error":
			alert("An error occurred when attempting to perform this action. Please try again later.");
			genericFormResponseEnableForm(request.formNode);
			break;
			
		default:
			alert("Unhandled form result type: "+ type);
			genericFormResponseEnableForm(request.formNode);
			break;
	}
}

//
//	other stuff

function clearMe (inp, val)
{
	//
	//	clears the value of given input node (inp) if the current value is equal to (val)

	if (inp.value == val)
		inp.value = "";
}

function toggleDivFade (id)
{
	//
	//	looks for a node with the supplied id and toggles it hidden/visible with fading

	var e = dojo.byId(id);
	if (!e)
		return;

	while (!dojo.fx || !dojo.fx.html)
		dojo.require("dojo.fx.html");

	if (e.style.display != "block")
		dojo.fx.html.fadeShow(e, 500);
	else
		dojo.fx.html.fadeHide(e, 500);
}

function currentNav (id)
{
	//
	//	marks the nav node with the supplied id as current by setting the css class

	var e = dojo.byId(id);
	if (!e)
		return;

	e.className = "current";
}
