var formHasChanges = false;

function processAction(r)
{
	showLoadingIndicator ();
	var actions = r.getElementsByTagName ('action');
	if (actions != null)
	{
		for(i5 = 0; i5 < actions.length; i5++)
		{
			if (actions[i5].getAttribute('name') == 'runFunctions')
			{
				runFunctionsAction (actions[i5]);
			}			
			if (actions[i5].getAttribute('name') == 'highlightErrors')
			{
				highlightErrorsAction (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'removeErrors')
			{
				removeErrorsAction (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'disableFields')
			{
				disableFieldsAction (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'enableFields')
			{
				enableFieldsAction (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'exception')
			{
				exceptionAction (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'displayMessage')
			{
				displayMessage (actions[i5]);
			}
			if (actions[i5].getAttribute('name') == 'setFieldValues')
			{
				setFieldValuesAction (actions[i5]);
			}
      if (actions[i5].getAttribute('name') == 'setHasChanges')
      {
        setHasChanges (actions[i5]);
      }
		}	
	}
 	hideLoadingIndicator (); 
}

function runFunctionsAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	if (params != null)
	{
		for(x=0;x<params.length;x++)
		{
			if (params[x].getAttribute('name') == 'javascript')
			{
				eval (params[x].getAttribute ('value'));
			}		
		}
	}
}

function highlightErrorsAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var sessionBind = null;
	if (params != null)
	{
		for(x = 0; x < params.length; x++)
		{
			if (params[x].getAttribute('name') == 'sessionBind')
			{
				sessionBind = params[x].getAttribute ('value');
			}
			if (sessionBind != null)
			{
				if (params[x].getAttribute ('name') == 'field')
				{
					setFieldClassName(sessionBind, params[x].getAttribute ('value'), 'inputError');
				}
			}
		}
	}
}

function removeErrorsAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var sessionBind = null;
	if (params != null)
	{
		for(x=0;x<params.length;x++)
		{
			if (params[x].getAttribute('name') == 'sessionBind')
			{
				sessionBind = params[x].getAttribute ('value');
			}
			if (sessionBind != null)
			{
				if (params[x].getAttribute('name') == 'field')
				{
					setFieldClassName(sessionBind, params[x].getAttribute ('value'), '');
				}
			}
		}
	}
}

function enableFieldsAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var sessionBind = null;
	if (params != null)
	{
		for(x=0;x<params.length;x++)
		{
			if (params[x].getAttribute('name') == 'sessionBind')
			{
				sessionBind = params[x].getAttribute ('value');
			}
			if (sessionBind != null)
			{
				if (params[x].getAttribute('name') == 'field')
				{
					enableField (sessionBind, params[x].getAttribute ('value'));
				}
			}
		}
	}
}

function disableFieldsAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var sessionBind = null;
	if (params != null)
	{
		for(x=0;x<params.length;x++)
		{
			if (params[x].getAttribute ('name') == 'sessionBind')
			{
				sessionBind = params[x].getAttribute ('value');
			}
			if (sessionBind != null)
			{
				if (params[x].getAttribute ('name') == 'field')
				{
					disableField (sessionBind, params[x].getAttribute ('value'));
				}
			}
		}
	}
}

function setFieldValuesAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var sessionBind = null;
	if (params != null)
	{
		for(x = 0; x < params.length; x++)
		{
			if (params[x].getAttribute ('name') == 'sessionBind')
			{
				sessionBind = params[x].getAttribute ('value');
			}
			if (sessionBind != null)
			{
				setFieldValue (sessionBind, params[x].getAttribute ('name'), params[x].getAttribute ('value'));
			}
		}
	}
}

function setHasChanges (actionElement)
{
  var params = actionElement.getElementsByTagName ('parameter');
  if (params != null)
  {
    for(x = 0;x < params.length; x++)
    {
      if (params.item (x).getAttribute('name') == 'hasChanges')
      {
        var changesValue = params[x].getAttribute ('value');
        if (changesValue == 'true')
        {
          formHasChanges = true;
        }
      }
    }
  }
}

function exceptionAction (actionElement)
{
	var params = actionElement.getElementsByTagName ('parameter');
	var errorMessage = null;
	if (params != null)
	{
		for(x = 0;x < params.length; x++)
		{
			if (params.item (x).getAttribute('name') == 'errorMessage')
			{
				errorMessage = params[x].getAttribute ('value');
			}
		}
	}
  showErrorMessage (errorMessage);
}

function submitForm (form)
{
	showLoadingIndicator ();
	form.method = 'post';
	Ext.Ajax.request ({
    'form':form,
		'success':function(req) {processAction (req.responseXML.documentElement); hideLoadingIndicator ();},
		'failure':function(req) {showErrorMessage(req.responseText); hideLoadingIndicator (); }
  });	
	return (false);
}
 
function executePageAndProcessAction (page, runAfter)
{
	showLoadingIndicator ();
	Ext.Ajax.request ({
    'url':page,
    'success':function (req) {processAction (req.responseXML.documentElement); if (runAfter != null) eval (runAfter)},
		'failure':function (req) {showErrorMessage (req.responseText); hideLoadingIndicator ();}
  });
  
	return (false);
}

function redirect(url)
{
	document.location = url;
}

function addForm (key, method, page, id)
{
  var action = 'add?key=' + key + '&method=' + method;
  if (id == null)
  {
    runAction (action + '&page=' + page);
  }
  else
  {
    runAction (action + '&page=' + page + '&id='+ id);
  }
}

function addChildForm (key, method, page, id)
{
  var action = 'add?key=' + key + '&method=' + method;
  if (id == null)
  {
    runAction (action + '&page=' + page + '&childKey=y');
  }
  else
  {
    runAction (action + '&page=' + page + '&id='+ id + '&childKey=y');
  }
}

function removeForm (key, method, keyToRemove, page, id)
{
  var action = 'remove?key=' + key + '&method=' + method + '&keyToRemove=' + keyToRemove;
  if (id == null)
  {
    runAction (action + '&page=' + page);
  }
  else
  {
    runAction (action + '&page=' + page + '&id='+ id);
  }
}

function saveForm (key, onValid)
{
  var action = 'saveByKey?key=' + key;
  runAction (action + '&onValid=' + onValid);
}

function deleteForm (loadKey, key, page, id)
{
  var action = 'deleteForm?key=' + key;
  if (id == null)
  {
    runAction (action + '&onValid=redirect (\'' + page + '?key=' + loadKey +'\')');
  }
  else
  {
    runAction (action + '&onValid=loadPage (\'' + page + '?key=' + loadKey +'\', \'' + id + '\')');
  }
}

function viewForm (key, page, id)
{
  var pageToLoad = page;
  if (key != null)
  {
    pageToLoad += '?key=' + key + '&view=y';
  }
  if (id == null)
  {
    redirect (pageToLoad);
  }
  else
  {
    loadPage (pageToLoad, id);
  }
}

function openForm (key, page, id)
{
  var pageToLoad = page;
  if (key != null)
  {
    pageToLoad += '?key=' + key;
  }
  if (id == null)
  {
    redirect (pageToLoad);
  }
  else
  {
    loadPage (pageToLoad, id);
  }
}

function copyForm (key, page, id)
{
  var action = 'copy?key=' + key;
  if (id == null)
  {
    runAction (action + '&page=' + page);
  }
  else
  {
    runAction (action + '&page=' + page + '&id='+ id);
  }
}

function resetForm (form, runAfter)
{
  if (form != null)
  {
    runFormAction ('resetForm', form, runAfter);
  }
}

function closeForm (form, onValid)
{
  if (form != null)
  {
    runFormAction ('close', form, onValid);
  }
}

function closeFormByKey (key, onValid)
{
  if (key != null)
  {
    runAction ('close?key=' + key, onValid);
  }
}

function checkFormForChanges (form, runAfter)
{
  formHasChanges = false;
  if (form != null)
  {
    runFormAction ('hasChanges', form, runAfter);
  }
  return (false);
}

function checkFormForChangesByKey (key, runAfter)
{
  formHasChanges = false;
  if (key != null)
  {
    runAction ('hasChanges?key=' + key, runAfter);
  }
  return (false);
}

function isFormHasChanges ()
{
  return (formHasChanges);
}

function runFieldAction (action, field, onValid)
{
	closeActionsMessages ();
	var sessionBind = field.form.getAttribute ('session-bind');
	var fieldValue = field.value;
	var fieldName = field.name;
	var fieldType = field.type;
	if (fieldType == 'checkbox')
	{
		if (!field.checked)
		{
			fieldValue = '';
		}
	}
	if (onValid != null)
	{
		executePageAndProcessAction(contextPath + '/actions/' + action + '?sessionBind=' + sessionBind + '&fieldName=' + fieldName + '&fieldValue=' + escape (fieldValue) + '&onValid=' + onValid);
	}
	else
	{
		executePageAndProcessAction(contextPath + '/actions/' + action + '?sessionBind=' + sessionBind + '&fieldName=' + fieldName + '&fieldValue=' + escape (fieldValue));
	}
}

function runFormAction (action, form, onValid)
{
	showLoadingIndicator ();
	closeActionsMessages ();
	var sessionBind = form.getAttribute ('session-bind');
	if (onValid == null)
	{
		onValid = form.getAttribute ('onValid');
	}
	form.action = contextPath + '/actions/' + action + '?sessionBind=' + sessionBind + '&onValid=' + onValid;
	submitForm (form);
	return false;
}

function runAction (page, onValid)
{
  if (onValid != null)
  {
    if (page.indexOf ('?') >= 0)
    {
	    executePageAndProcessAction (contextPath + '/actions/' + page + '&onValid=' + onValid);
    }
    else
    {
	    executePageAndProcessAction (contextPath + '/actions/' + page + '?onValid=' + onValid);
    }
  }
  else
  {
	  executePageAndProcessAction (contextPath + '/actions/' + page);
  }	  
}

function displayMessage (actionElement)
{
	closeActionsMessages ();
	var params = actionElement.getElementsByTagName ('parameter');
	var message = null;
	var type = null;
	if (params != null)
	{
		for(x = 0;x < params.length; x++)
		{
			if (params.item (x).getAttribute('name') == 'message')
			{
				message = params[x].getAttribute ('value');
			}
			if (params.item (x).getAttribute('name') == 'type')
			{
				type = params[x].getAttribute ('value');
			}
		}
	}
	var actionsMessagesDiv = document.getElementById ("actionsMessages");
	var messageElement = document.getElementById ("actionsMessage");
	var messageBoxElement = document.getElementById ("actionsMessageBox");
	if (type == 'error')
	{
			messageElement = document.getElementById ("actionsErrorMessage");
			messageBoxElement = document.getElementById ("actionsErrorMessageBox");
	}
	else if (type == 'success')
	{
			messageElement = document.getElementById ("actionsSuccessMessage");
			messageBoxElement = document.getElementById ("actionsSuccessMessageBox");
	}
	else if (type == 'prompt')
	{
			messageElement = document.getElementById ("actionsPromptMessage");
			messageBoxElement = document.getElementById ("actionsPromptBox");
	}
	if (messageElement != null)
	{
			messageElement.innerHTML = message;
	}
	if (messageBoxElement != null)
	{
			messageBoxElement.className = "show";
	}
	if (actionsMessagesDiv != null)
	{
			actionsMessagesDiv.className = "show";
	}
}

function closeActionsMessages ()
{
	var actionsMessagesDiv = document.getElementById ("actionsMessages");
	if (actionsMessagesDiv != null)
	{
			actionsMessagesDiv.className = "hide";
	}
	var messageElement = document.getElementById ("actionsMessage");
	if (messageElement != null)
	{
			messageElement.innerHTML = '';
	}
	var messageBoxElement = document.getElementById ("actionsMessageBox");
	if (messageBoxElement != null)
	{
			messageBoxElement.className = "hide";
	}
	messageElement = document.getElementById ("actionsErrorMessage");
	if (messageElement != null)
	{
			messageElement.innerHTML = '';
	}
	messageBoxElement = document.getElementById ("actionsErrorMessageBox");
	if (messageBoxElement != null)
	{
			messageBoxElement.className = "hide";
	}	
	messageElement = document.getElementById ("actionsSuccessMessage");
	if (messageElement != null)
	{
			messageElement.innerHTML = '';
	}
	messageBoxElement = document.getElementById ("actionsSuccessMessageBox");
	if (messageBoxElement != null)
	{
			messageBoxElement.className = "hide";
	}
	messageElement = document.getElementById ("actionsPromptMessage");
	if (messageElement != null)
	{
			messageElement.innerHTML = '';
	}
	messageBoxElement = document.getElementById ("actionsPromptBox");
	if (messageBoxElement != null)
	{
			messageBoxElement.className = "hide";
	}
}


