function returnFormObj(submitObj)
{
	while(submitObj.nodeName.toLowerCase() != 'body')
	{
		if(submitObj.nodeName.toLowerCase() == 'form')
		{
			return submitObj;
		}
		if(typeof submitObj.parentNode == 'undefined')
		{
			return false;
		}
		submitObj = submitObj.parentNode
	}
	return false;
}

var errorChecks = new Array();
var errorActions = new Array();

errorActions['insertMessage'] = function(_element,flag)
{
	document.getElementById('errorMsg'+_element.id).className = (!flag)?'errorMsgVisible':'errorMsgHidden';
	
}

//start of email checker
errorChecks['emailCheck'] = function (emailStr)
{
var checkTLD=1;
var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray=emailStr.match(emailPat);
if (matchArray==null) {
return false;
}
var user=matchArray[1];
var domain=matchArray[2];
for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
return false;
   }
}
if (user.match(userPat)==null) {
return false;
}
var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {
for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
return false;
   }
}
return true;
}
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
return false;
   }
}
if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
return false;
}
if (len<2) {
return false;
}
return true;
}
//end of email checker

function formCheckAndSubmit(submitObj)
{
	var formObj = returnFormObj(submitObj);
	var formExecutionFlag = true;
	
	if(!formObj) return;
	
	for(var a=0;a<formObj.elements.length;a++)
	{
		
		_currentElement = formObj.elements[a]
		
		//if the REQUIRED field is in the form element and the value isn't empty, this passes
		requiredCheck = !(_currentElement.getAttribute('req')) || ( _currentElement.getAttribute('req') == "yes" && _currentElement.value != '' );
		//if the special check function field is not there, OR the function does exist AND returns true, this passes
		specialCheck = !_currentElement.getAttribute('checkFunc') ||  (errorChecks[_currentElement.getAttribute('checkFunc')] && errorChecks[_currentElement.getAttribute('checkFunc')](_currentElement.value));
		
		if(requiredCheck && specialCheck)
		{
			var thisElementFlag = true;
		}
		else
		{
			formExecutionFlag = false;
			var thisElementFlag = false;
		}
		
		if(_currentElement.getAttribute('errorAction') && errorActions[_currentElement.getAttribute('errorAction')])
		{
			errorActions[_currentElement.getAttribute('errorAction')](_currentElement,thisElementFlag);
		}
		
	}
	
	if(formExecutionFlag)
	{
		for(var a=0;a<formObj.elements.length;a++)
		{
			noValue = formObj.elements[a].value == '';
			isCheckBox = formObj.elements[a].type == 'checkbox';
			isntChecked = !formObj.elements[a].checked
			if(formObj.getAttribute('emptyValue') && (noValue || isCheckBox && isntChecked ) )
			{
				
				formObj.elements[a].value = formObj.getAttribute('emptyValue');
				if(isCheckBox && isntChecked)
				{
					formObj.elements[a].checked = true;
				}
				else
				{
					formObj.elements[a].style.color = (formObj.inputBgColor)?formObj.inputBgColor:"#ffffff";
				}
			}
		}
		formObj.submit();
	}
}
