/** 
 * Function to validate multiple forms in a HTML webpage
 * v0.01
 **/
 
/* Register the forms to be inspected for required fields */
var formsToValidate = new Array();
formsToValidate.push("frmContact");

var browser = navigator.appVersion;

function formValidator(formName,language)
{
	var formIsRegistered = false;
	var formToCheck = false;
	
	for (var i=0; i<formsToValidate.length; i++)
	{
		if (formsToValidate[i] == formName)
		{
			try
			{
				formToCheck = eval(document.forms[formName]);
			}
			catch(e)
			{
				// Form does not exist
				return false;
			}
			
			formIsRegistered = true;
			
			break;
		}
	}
	
	if (formIsRegistered)
	{
		var currentElement = false;
		var currentElementType = false;
		var msg = "";
		var firstElementToFocus = false;
		var radioFieldsChecked = new Array();
		var radioFieldAlreadyInArray = false;
		var radioFieldIsFilled = false;
		
		for (var i=0; i<formToCheck.elements.length;i++)
		{
			currentElement = formToCheck.elements[i];
			
			if (currentElement.className.match(/required/))
			{
				// Field is a required field, now check for the type of validation
				if (currentElement.className.match(/filled/))
				{
					try
					{
						currentElementType = currentElement.type;
					}
					catch(e)
					{
						// Property type not defined for current element
					}
					
					switch(currentElementType)
					{
						
						case("hidden"):
							
							// Dont perform any action if the element is of type hidden
							contineu;
							
						break;
						
						case("text"):
							
							if (currentElement.value == "" || !currentElement || currentElement == " " || currentElement.length < 1)
							{
								if (msg == "")
								{
									firstElementToFocus = currentElement;
								}
								
								var text = false;
								
								for (var j=0; j<currentElement.parentNode.getElementsByTagName('label').length; j++)
								{
									if (currentElement.parentNode.getElementsByTagName('label')[j].htmlFor == currentElement.id)
									{
										text = currentElement.parentNode.getElementsByTagName('label')[j].innerHTML.replace(/: [*]/,"");
									}
								}
								
								if (!text)
								{
									text = currentElement.id;
								}
								
								if (language == "nl")
								{
									msg += "'" + text + "' dient te worden ingevuld!\n";
								}
								else if (language == "en")
								{
									msg += "'" + text + "' is a required field!\n";
								}
								else if (language == "de")
								{
									msg += "'" + text + "' ist ein erforderliches Feld!\n";
								}
								else if (language == "fr")
								{
									msg += "'" + text + "' est un champ exige!\n";
								}
							}
							
						break;
						
						case("textarea"):
							
							if (browser.match(/MSIE/))
							{
								if (currentElement.innerHTML == "" || !currentElement || currentElement == " " || currentElement.length < 1)
								{
									if (msg == "")
									{
										firstElementToFocus = currentElement;
									}
									
									var text = false;
									
									for (var j=0; j<currentElement.parentNode.getElementsByTagName('label').length; j++)
									{
										if (currentElement.parentNode.getElementsByTagName('label')[j].htmlFor == currentElement.id)
										{
											text = currentElement.parentNode.getElementsByTagName('label')[j].innerHTML.replace(/: [*]/,"");
										}
									}
									
									if (!text)
									{
										text = currentElement.id;
									}
									
									if (language == "nl")
									{
										msg += "'" + text + "' dient te worden ingevuld!\n";
									}
									else if (language == "en")
									{
										msg += "'" + text + "' is a required field!\n";
									}
									else if (language == "de")
									{
										msg += "'" + text + "' ist ein erforderliches Feld!\n";
									}
									else if (language == "fr")
									{
										msg += "'" + text + "' est un champ exige!\n";
									}
								}
							}
							else
							{
								if (currentElement.value == "" || !currentElement || currentElement == " " || currentElement.length < 1)
								{
									if (msg == "")
									{
										firstElementToFocus = currentElement;
									}
									
									var text = false;
									
									for (var j=0; j<currentElement.parentNode.getElementsByTagName('label').length; j++)
									{
										if (currentElement.parentNode.getElementsByTagName('label')[j].htmlFor == currentElement.id)
										{
											text = currentElement.parentNode.getElementsByTagName('label')[j].innerHTML.replace(/: [*]/,"");
										}
									}
									
									if (!text)
									{
										text = currentElement.id;
									}
									
									if (language == "nl")
									{
										msg += "'" + text + "' dient te worden ingevuld!\n";
									}
									else if (language == "en")
									{
										msg += "'" + text + "' is a required field!\n";
									}
									else if (language == "de")
									{
										msg += "'" + text + "' ist ein erforderliches Feld!\n";
									}
									else if (language == "fr")
									{
										msg += "'" + text + "' est un champ exige!\n";
									}
								}
							}
							
						break;
						
						case("checkbox"):
							
							
							
						break;
						
						case("radio"):
							
							var text = false;
							
							for (var j=0; j<currentElement.parentNode.parentNode.getElementsByTagName('label').length; j++)
							{
								if (currentElement.parentNode.parentNode.getElementsByTagName('label')[j].htmlFor == currentElement.id)
								{
									text = currentElement.parentNode.parentNode.getElementsByTagName('label')[j].innerHTML.replace(/: [*]/,"");
								}
							}
							
							for (var h=0; h<radioFieldsChecked.length; h++)
							{
								if (radioFieldsChecked[h] == currentElement.name)
								{
									radioFieldAlreadyInArray = true;
								}
							}
							
							if (!radioFieldAlreadyInArray)
							{
								radioFieldsChecked[radioFieldsChecked.length] = currentElement.name;
								
								for (var t=0; t<formToCheck.elements.length; t++)
								{
									if (currentElement.name == formToCheck.elements[t].name)
									{
										if (formToCheck.elements[t].checked)
										{
											radioFieldIsFilled = true;
										}
									}
								}
								
								if (!radioFieldIsFilled)
								{
									if (language == "nl")
									{
										msg += "'" + text + "' dient opgegeven te worden!\n";
									}
									else if (language == "en")
									{
										msg += "'" + text + "' option is a required field!\n";
									}
									else if (language == "de")
									{
										msg += "'" + text + "' Wahl ist ein erforderliches Feld!\n";
									}
									else if (language == "fr")
									{
										msg += "'" + text + "' l'option est un champ exige!\n";
									}
								}
								
								radioFieldAlreadyInArray = false;
							}
							
						break;
						
					}
					
				}
				else
				{
					// If no type is specified
					
				}
			}
		}
		if (msg)
		{
			alert(msg);
			firstElementToFocus.focus();
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
	
	return false;
}

