function formEventHandler(e)
{		
      if ( typeof(window.event) != 'undefined' )
      {
	      e = window.event;
	      e.target = e.srcElement
      }

      // Only look interested in events for form elements
      // ie elements with a name attribute
      if ( (typeof(e.target.name) != 'undefined') )
      {
	      switch ( e.type )
	      {
		      case 'submit':
			      return this.notifyObservers('FORM_submit');
		      break;
	      }
      }

      return true;
}

function setCheckGroupSwitch()
{
	var i,c,targetElement,allTheSame;

	allTheSame = true;
	
	for ( i=0,c=this.form.elements.length; i<c; i++ )
	{
		targetElement = this.form.elements[i];

		if ( 	(targetElement != this.switchElement) && 
			(targetElement.name == this.name) && 
			(targetElement.type == 'checkbox')  && 
			(targetElement.checked != this.checked) )
		{
			allTheSame = false;
			break;
		}
	}
	
	if ( allTheSame ) 
	{
		this.switchElement.checked = this.checked;
	}
	else
	{
		this.switchElement.checked = 0;
	}
}

function switchCheckGroup(caller)
{
	var i,c,targetElement;
	
	for ( i=0,c=caller.form.elements.length; i<c; i++ )
	{
		targetElement = caller.form.elements[i];

		if ( (targetElement != caller) && (targetElement.name == caller.name) && (targetElement.type == 'checkbox') )
		{
			targetElement.checked = caller.checked;
			targetElement.switchElement = caller;
			targetElement.onclick = setCheckGroupSwitch;
		}
	}
}

function clearForm(form)
{
	var i,c,targetElement;

	for ( i=0,c=form.elements.length; i<c; i++ )
	{
		targetElement = form.elements[i];

		if ( (targetElement.type == 'text') || (targetElement.type == 'textarea') || (targetElement.type == 'hidden') )
		{
			targetElement.value = '';
		}
		
		if ( (targetElement.type == 'checkbox') || (targetElement.type == 'radio') )
		{
			targetElement.checked = false;
		}
	}
}

function FU_setElementValues(keyValPairs)
{
	var key, val, el;
	
	for ( key in keyValPairs )
	{
		val = keyValPairs[key];
		
		el = this.getFormElementByName(key);
		
		if ( el && el.type == 'text' )
		{
			el.value = val;
		}
	}
}

function FU_getFormElementByName(elementName)
{
	var i
	
	var elements = new Array();
	
	for ( i=0; i<this.elements.length; i++ )
	{
		if ( typeof(this.elements[i].name) != 'undefined' && this.elements[i].name == elementName)
		{
			elements.push(this.elements[i]);
		}
	}
	
	switch ( elements.length )
	{
		case 0:
			return false;
		break;
		case 1:
			return elements[0];
		break;
		
		default:
			return elements;
		break;
	}
	
	return false; 
}

function FU_extendForms()
{
	for ( var i=0; i<document.forms.length; i++ )
	{
		document.forms[i].setElementValues = FU_setElementValues
		document.forms[i].getFormElementByName = FU_getFormElementByName;
	}
}
window.registerEventHandler('onload', FU_extendForms);