

function doEmbedFormActions(formObj, responseObjId, requiredFields)
{
	return checkFields(formObj, requiredFields) && !doEmbedFormSubmit(formObj, responseObjId);
}

function doFormActions(formObj, activeMenuId, requiredFields)
{
	return checkFields(formObj, requiredFields) && !doFormSubmit(formObj, activeMenuId);
}


function checkFields(formObj, requiredFields)
{
	bResult = false;
	
	if (requiredFields != null)	
	{
		// assume they filled everything in
		bResult = true;
		
		for(var i = 0; i < requiredFields.length; i++)
		{
			var bHighlight = false;
			var requiredFieldArray = getFormElemsByName(formObj, requiredFields[i]);
			if (requiredFieldArray != null)
			{
				if (requiredFieldArray.length == 1)
				{
					// just something simple
					var requiredField = requiredFieldArray[0];
					if (requiredField != null)
					{
						if (requiredField.options != null)
						{
							// this is a select
							bHighlight = requiredField.selectedIndex == 0;
						}
						else if(requiredField.value != null)
						{
							// this is something that has a value
							bHighlight = requiredField.value == '';
						}
						
					}
				}
				else
				{
					// radio button set
					// assume that none of them are selected
					var bHighlight = true;
					for(var j = 0; j < requiredFieldArray.length && bHighlight; j++)
					{
						bHighlight = !requiredFieldArray[j].checked;
					}
				}
				

				for (var j = 0; j < requiredFieldArray.length; j++)
				{
					if (bHighlight)
					{
						// highlight this one
						requiredFieldArray[j].style.backgroundColor = '#FFFF66';
						bResult = false;
					}
					else
					{
						// remove the highlight
						requiredFieldArray[j].style.backgroundColor = '';
					}
				}
				
			}

		}
	}
	
	if (!bResult)
	{
		alert('Please type a response in all of the highlighted fields and try again.');
	}
	
	return bResult;
}


function doFormSubmit(formObj, activeMenuId)
{	
	bResult = false;
	
	if (formObj != null)
	{
		getRequest();
		
		if (contentDIV == null)
		{
			contentDIV = document.getElementById('mainContent');
			if (contentDIV == null)
			{
				// can't go any further, allow the browser to navigate
				return true;
			}
		}
		
		// disable the submit button just in case
		setSubmit(formObj, false);
		
		// show the loading screen
		fadeIn('loadingBox');		

		// gather the form data
		var data = constructFormPost(formObj);

		// figure out where this should go
		var formURL = buildFormURL(formObj, 'hidden');		
		var navURL = buildFormURL(formObj, 'true');

		// submit the form
		var callback = function(response){ onFormPostComplete(response, navURL, activeMenuId); };


		if (formObj.method == 'post')
		{
			request.doPost(callback, formURL, data);
			bResult = true;
		}
		else if (formObj.method == 'get')
		{
			
			request.doGet(callback, formURL + '&' + data);
			bResult = true;
		}
	}
	
	return bResult;
}

function doEmbedFormSubmit(formObj, responseObjId)
{
	bResult = false;
	
	if (formObj != null)
	{
		getRequest();
		
		var responseObj = document.getElementById(responseObjId);
		if (responseObj != null)
		{
			responseObj.innerHTML = 'Sending...';
		}
		
		// disable the submit button just in case
		setSubmit(formObj, false);

		// gather the form data
		var data = constructFormPost(formObj);

		// figure out where this should go (embedded form responses are displayed directly)
		var navURL = buildFormURL(formObj, 'embed');
		
		// submit the form
		var callback =  function(response){ onEmbedFormPostComplete(response, formObj, responseObj); };

		if (formObj.method == 'post')
		{
			request.doPost(callback, navURL, data);
			bResult = true;
		}
		else if (formObj.method == 'get')
		{			
			request.doGet(callback, navURL + '&' + data);
			bResult = true;
		}
	}
	
	return bResult;
}


function onEmbedFormPostComplete(response, formObj, responseObj)
{
	if (responseObj != null)
	{
		var contentNodes = response.getElementsByTagName('body');
		if (contentNodes[0] != null)
		{
			responseObj.innerHTML = contentNodes[0].firstChild.nodeValue;
		}
		else
		{
			responseObj.innerHTML = '';
		}
	}
		
	formObj.reset();
	setSubmit(formObj, true);
}


function buildFormURL(formObj, type)
{
	var url = formObj.action;
	if (url.indexOf('?') != -1)
	{
		url += '&fromAJAX=' + type;
	}
	else
	{
		url += '?fromAJAX=' + type;
	}	

	return url;
}


function getRequest()
{
	if (request == null)
	{
		request = new AJAXRequest();
	}
}




function onFormPostComplete(response, url, activeMenuId)
{
	// navigate to the requested page
	mainNavigate(url, activeMenuId);
}

function constructFormPost(obj)
{
	var formData = '';
	
	for (var i = 0; i < obj.elements.length; i++)
	{	
		if (obj.elements[i].tagName == 'INPUT')
		{
			if (obj.elements[i].type == 'text' || obj.elements[i].type == 'hidden')
			{
			   formData += obj.elements[i].name + '=' + obj.elements[i].value + '&';
			}
			else if (obj.elements[i].type == 'checkbox')
			{
			   if (obj.elements[i].checked)
			   {
				  formData += obj.elements[i].name + '=' + obj.elements[i].value + '&';
			   }
			   else
			   {
				  formData += obj.elements[i].name + '=&';
			   }
			}
			else if (obj.elements[i].type == 'radio')
			{
			   if (obj.elements[i].checked)
			   {
				  formData += obj.elements[i].name + '=' + obj.elements[i].value + '&';
			   }
			}
		}   
		else if (obj.elements[i].tagName == 'SELECT')
		{
			var sel = obj.elements[i];
			formData += sel.name + '=' + sel.options[sel.selectedIndex].value + '&';
		}
		else if (obj.elements[i].tagName == 'TEXTAREA')
		{
			formData += obj.elements[i].name + '=' + obj.elements[i].value + '&';
		}
	}
	
	return formData;
}

function setSubmit(formObj, bEnabled)
{
	if (formObj != null)
	{
		for(var i = 0; i < formObj.elements.length; i++)	
		{
			if (formObj.elements[i].type == 'submit')
			{
				formObj.elements[i].disabled = !bEnabled;
			}
		}
	}
}

function getFormElemsByName(formObj, name)
{
	var formElems = Array();
	var numElems = 0;
	
	for(var i = 0; i < formObj.elements.length; i++)
	{
		if (formObj.elements[i].name == name)
		{
			formElems[numElems] = formObj.elements[i];
			numElems++;
		}
	}
	
	return formElems;
}