
var requiredFields = new Array();
var requiredFieldMessages = new Array();
var requiredMatchingDefaultOK = new Array();
var formatFields = new Array();
var formatSuccesses = new Array();
var formatMatchAllSuccesses = new Array();
var formatFailures = new Array();
var formatMatchAllFailures = new Array();
var formatMessages = new Array();

var errorCount = 0;
var errorMessage = "";
var isErrorFree = true ;

var url =  "../../Main/error/error.htm";
var Features = "dialogHeight:300px;dialogWidth:400px;center:1;status:0;scroll:1;scrollbars:yes;help:0;resizable:0" ;
					
					

function evenOutArrays() 
{
	if (requiredFields.length < requiredFieldMessages.length) 
	{ 
		requiredFieldMessages.length = requiredFields.length; 
	}
	if (requiredFields.length < requiredMatchingDefaultOK.length) 
	{ 
		requiredMatchingDefaultOK.length = requiredFields.length; 
	}
	if (requiredFieldMessages.length < requiredFields.length) 
	{
		var x = requiredFieldMessages.length;
		requiredFieldMessages.length = requiredFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			requiredFieldMessages[i] = "Field " + requiredFields[i] + " is a required field.";
		}
	}
	if (requiredMatchingDefaultOK.length < requiredFields.length) 
	{
		var x = requiredMatchingDefaultOK.length;
		requiredMatchingDefaultOK.length = requiredFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			requiredMatchingDefaultOK[i] = true;
		}
	}
	if (formatFields.length < formatSuccesses.length) 
	{ 
		formatSuccesses.length = formatFields.length; 
	}
	if (formatFields.length < formatMatchAllSuccesses.length) 
	{ 
		formatMatchAllSuccesses.length = formatFields.length; 
	}
	if (formatFields.length < formatFailures.length) 
	{ 
		formatFailures.length = formatFields.length; 
	}
	if (formatFields.length < formatMatchAllFailures.length) 
	{ 
		formatMatchAllFailures.length = formatFields.length; 
	}
	if (formatFields.length < formatMessages.length) 
	{ 
		formatMessages.length = formatFields.length; 
	}
	if (formatSuccesses.length < formatFields.length) 
	{
		var x = formatSuccesses.length;
		formatSuccesses.length = formatFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			formatSuccesses[i] = ".*";
		}
	}
	if (formatMatchAllSuccesses.length < formatFields.length) 
	{
		var x = formatMatchAllSuccesses.length;
		formatMatchAllSuccesses.length = formatFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			formatMatchAllSuccesses[i] = false;
		}
	}
	if (formatFailures.length < formatFields.length) 
	{
		var x = formatFailures.length;
		formatFailures.length = formatFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			formatFailures[i] = "^[\b]";
		}
	}
	if (formatMatchAllFailures.length < formatFields.length) 
	{
		var x = formatMatchAllFailures.length;
		formatMatchAllFailures.length = formatFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			formatMatchAllFailures[i] = false;
		}
	}
	if (formatMessages.length < formatFields.length) 
	{
		var x = formatMessages.length;
		formatMessages.length = formatFields.length;
		for (var i = x; i < requiredFields.length; i++) 
		{
			formatMessages[i] = "Field " + formatFields[i] + " is not formatted correctly.";
		}
	}
} // Ends the "evenOutArrays" function


function addErrorMessage(errStmt)
{
	errorCount ++ ;
	errorMessage = errorMessage + '|'+ errStmt;
}// Ends the "addErrorMessage" function

function displayError()
{
	if (errorCount == 0)
		return true;
	else
	{
		var Args = new Array(errorCount,errorMessage) ;
		
		//var url = '../error/error.htm'
		//var Features = "dialogHeight:300px;dialogWidth:400px;center:1;status:0;scroll:0;scrollbars=yes;help:0;resizable:0" ;
		window.showModalDialog(url,Args,Features)

		return false;
	}
}// Ends the "displayError" function

function areRequiredFieldsPresent(form) 
{
	//debugger
	errorCount = 0;
	errorMessage = "";
	for (var i=0; i < requiredFields.length; i++) 
	{
		eval("var field = form." + requiredFields[i]);
		if (field) 
		{
			// NOTE: THE TRIM JAVASCRIPT FUNCTION MUST BE INCLUDED
			// NOTE: THE GETFIELDVALUE JAVASCRIPT FUNCTION MUST BE INCLUDED
			var cell = document.all('td' + requiredFields[i]);
			bErrorFree = "true";
			
			if (trim(getFieldValue(field)) == "") 
			{
				//alert(requiredFieldMessages[i]);
				//var Args = new Array(1, requiredFieldMessages[i]) ;
				
				addErrorMessage(requiredFieldMessages[i]);
				
				//window.open(url)
				//window.showModalDialog(url,Args,Features)
				
				if (cell)
				{
					cell.style.color = "red";
					bErrorFree = "false";
				}
				
				if (errorCount == 1) 
				{	
					//field.focus();
					fieldFocus(field);
				}	
				//return false; // Return as soon as a failure is detected
			} // Ends the check to see if the field value is blank
			
			if (field.defaultValue) 
			{
				if ( (getFieldValue(field) == field.defaultValue) && ( !requiredMatchingDefaultOK[i]) ) 
				{
					//alert(requiredFieldMessages[i]);
					//var Args = new Array(1, requiredFieldMessages[i]) ;
				
					addErrorMessage(requiredFieldMessages[i]);
				
					//window.showModalDialog(url,Args,Features)
					
					if (cell)
					{
						cell.style.color = "red";
						bErrorFree = "false";
					}
					
					if (errorCount == 1) 
					{	
						//field.focus();
						fieldFocus(field);
					}	
					//return false; // Return as soon as a failure is detected
				}
			} // Ends the check to see if the field has a default value
	        
	        if(cell && bErrorFree == "true")
			{
				cell.style.color = "black";
			}
		
		} // Ends the check to make sure the field exists
	} // Move on to the next field
   
	//return true; // If we got this far, everything worked
	
	return displayError();
} // Ends the "areRequiredFieldsPresent" function


function areSuccessesPresent(form) 
{
	//debugger; 
	errorCount = 0;
	errorMessage = "";
	for (var i=0; i < formatFields.length; i++) 
	{
		eval("var field = form." + formatFields[i]);
		if (field) 
		{ // Make sure the field is found
			// NOTE: THE TRIM JAVASCRIPT FUNCTION MUST BE INCLUDED
			// NOTE: THE GETFIELDVALUE JAVASCRIPT FUNCTION MUST BE INCLUDED
			var value = trim(getFieldValue(field));
			var cell = document.all('td' + formatFields[i]);
			if (value != "")
			{
			//if no value is entered return true whithout checking
			//required fields are already checked.
			//return true;
			//}
				var successes = formatSuccesses[i];
				bErrorFree = "true";
				
				if (typeof(successes) == "object") 
				{ // If it's an array
					// Go through all the expressions and see if they all match and see if any match
					var allMatched = true;
					var anyMatched = false;
					
					if (successes[0] == "date")
					{
						var check = checkValidDate(value);
						if (check)
						{
							allMatched = true; 
							anyMatched = true;
						}
						else
						{
							allMatched = false; 
							anyMatched = false;
						}
					}
					else
					{
						for (var x=0; x < successes.length; x++) 
						{
							var exp = new RegExp(successes[x], "gi");
							var check = exp.test(value);
							if ( !check ) 
							{ 
								allMatched = false; 
							}
							if ( check ) 
							{ 
								anyMatched = true; 
							}
							
						}
					}	
					// If the developer said they all have to match and they didn't all match, return an error
					if (formatMatchAllSuccesses[i] && !allMatched) 
					{
						//alert(formatMessages[i]);
						//var Args = new Array(1, formatMessages[i]) ;
						
						addErrorMessage(formatMessages[i]);
			
						//window.open(url)
						//window.showModalDialog(url,Args,Features)
						
						if (cell)
						{
							cell.style.color = "red";
							bErrorFree = "false";
						}
						
						if (errorCount == 1) 
						{	
							//field.focus();
							fieldFocus(field);
						}	
						//return false; // Return as soon as a failure is detected
					}
					
					// If none of them matched, it doesn't matter what the developer said, return an error
					if ( !anyMatched ) 
					{
						//alert(formatMessages[i]);
						//var Args = new Array(1, formatMessages[i]) ;
						
						addErrorMessage(formatMessages[i]);
			
						//window.open(url)
						//window.showModalDialog(url,Args,Features)
						
						if (cell)
						{
							cell.style.color = "red";
							bErrorFree = "false";
						}
						
						if (errorCount == 1) 
						{	
							//field.focus();
							fieldFocus(field);
						}	
						//return false; // Return as soon as a failure is detected
					}
					
				} 
				else 
				{ // The formatSuccesses entry is a single value, not an array
					var exp = new RegExp(successes, "gi");
					var check = exp.test(value);
					if ( !check ) 
					{ // If that single expression didn't match the criteria (thus, a failure)
						
						//alert(formatMessages[i]);
						//var Args = new Array(1, formatMessages[i]) ;
						
						addErrorMessage(formatMessages[i]);
			
						//window.open(url)
						//window.showModalDialog(url,Args,Features)
						
						if (cell)
						{
							cell.style.color = "red";
							bErrorFree = "false";
						}
						
						if (errorCount == 1) 
						{	
							//field.focus();
							fieldFocus(field);
						}	
						//return false; // Return as soon as a failure is detected
					}
					
				} // Ends the check to see if the format successes entry is an array or a single value
				if(cell && bErrorFree == "true")
				{
					cell.style.color = "black";
				}
			}	
		
		} // Ends the check to see if the field exists
	} // Move on to the next field
	
	//return true; // If we got this far, everything worked
	
	return displayError();
} // Ends the "areSuccessesPresent" function

function areFailuresPresent(form) 
{
	errorCount = 0;
	errorMessage = "";
	for (var i=0; i < formatFields.length; i++) 
	{
		eval("var field = form." + formatFields[i]);
		if (field) 
		{ // Make sure the field is found
			// NOTE: THE TRIM JAVASCRIPT FUNCTION MUST BE INCLUDED
			// NOTE: THE GETFIELDVALUE JAVASCRIPT FUNCTION MUST BE INCLUDED
			var value = trim(getFieldValue(field));
			if (value != "")
			{
			//if no value is entered return true whithout checking
			//required fields are already checked.
			//return true;
			//}
				var failures = formatFailures[i];
				var cell = document.all('td' + formatFields[i]);
				bErrorFree = "true";
				
				//check if object exists
				if (failures)
				{
					if (typeof(failures) == "object") 
					{ // If it's an array
						// Go through the expressions and see if any match and see if they all match
						var allMatched = true;
						var anyMatched = false;
						for (var x=0; x < failures.length; x++) 
						{
							var exp = new RegExp(failures[x], "gi");
							var check = exp.test(value);
							if ( !check ) 
							{ 
								allMatched = false; 
							}
							if ( check ) 
							{ 
								anyMatched = true; 
							}
						}
						// If the developer says they all have to match to cause a failure, then cause a failure
						if (formatMatchAllFailures[i] && allMatched) 
						{
							//alert(formatMessages[i]);
							//var Args = new Array(1, formatMessages[i]) ;
							
							addErrorMessage(formatMessages[i]);
				
							//window.open(url)
							//window.showModalDialog(url,Args,Features)
							
							if (cell)
							{
								cell.style.color = "red";
								bErrorFree = "false";
							}
							
							if (errorCount == 1) 
							{	
								//field.focus();
								fieldFocus(field);
							}	
							//return false; // Return as soon as a failure is detected
						}
						
						// If the developer says that any match causes a failure, then cause a failure
						if (!formatMatchAllFailures[i] && anyMatched ) 
						{
							//alert(formatMessages[i]);
							//var Args = new Array(1, formatMessages[i]) ;
							
							addErrorMessage(formatMessages[i]);
				
							//window.open(url)
							//window.showModalDialog(url,Args,Features)
							
							if (cell)
							{
								cell.style.color = "red";
								bErrorFree = "false";
							}
							
							if (errorCount == 1) 
							{	
								//field.focus();
								fieldFocus(field);
							}	
							//return false; // Return as soon as a failure is detected
						}
						
					} 
					else 
					{ // The formatSuccesses entry is a single value, not an array
						var exp = new RegExp(failures, "gi");
						var check = exp.test(value);
						if ( check ) 
						{ // If that single expression matched the criteria (thus, a failure)
							//alert(formatMessages[i]);
							var Args = new Array(1, formatMessages[i]) ;
							
							addErrorMessage(formatMessages[i]);
			
							//window.open(url)
							//window.showModalDialog(url,Args,Features)
							
							if (cell)
							{
								cell.style.color = "red";
								bErrorFree = "false";
							}
							
							if (errorCount == 1) 
							{	
								//field.focus();
								fieldFocus(field);
							}	
							//return false; // Return as soon as a failure is detected
						}
						
					} // Ends the check to see if the format successes entry is an array or a single value
					
					if(cell && bErrorFree == "true")
					{
						cell.style.color = "black";
					}
				}// Ends check for failures object exists
			}	
		
		} // Ends the check to see if the field exists
	} // Move on to the next field
	//return true; // If we got this far, everything worked
	
	return displayError();
} // Ends the "areFailuresPresent" function

function isFormFormattedCorrectly(form) 
{

	evenOutArrays();
	if ( !(areRequiredFieldsPresent(form)) ) 
	{ 
		return false; 
	} // Return as soon as a failure is detected
	if ( !(areSuccessesPresent(form)) ) 
	{ 
		return false; 
	}
	if ( !(areFailuresPresent(form)) ) 
	{ 
		return false; 
	}
   return true;
} // Ends the "isFormFormattedCorrectly" function


function resetErrorColor(objField)
{
	if(objField != null) 
	{
		var cell = document.all('td' + objField.name);
		if(cell )
		{
			cell.style.color = "black";				
		}
	}
	else
	{
		for (var i=0; i < formatFields.length; i++) 
		{
			var cell = document.all('td' + formatFields[i]);
			if (cell ) 
			{
				cell.style.color = "black";				
				
			}		
		}
	}
}


function fieldFocus(field)
{
	//debugger
	switch(field.type)
	{
		case "text" :
		case "textarea" :
		case "password" :
		case "select-one" :
		case "select-multiple" :
		case "button" :
		case "reset" :
		case "submit" :
		case "radio" :
		case "checkbox" :
			//if(field.disabled == false)
			field.focus();
			return;
		default :
			if(field[0].type == "radio")
			{
				
				//field[i].focus();
				return;
			}
			else if(field[0].type == "checkbox")
			{
				field[i].focus();
				return;
			}
			else
				var str = "";
				for (x in field) { str += x + "\n"; }
				alert("I couldn't figure out what type this field is...\n\n" + field.name + ": ???\n\n\n" + str + "\n\nlength = " + field.length);
			break;
	}		
}
