<!--

// MAXLENGTH
// SETS MAXIMUM LENGTH FOR TEXTAREA FIELDS - use in conjunction with the onkeyup event
// e.g. onkeyup="maxLength(50,this)"
// Version: 1.0
function maxLength(maxCharacters,field) {
	if(field.value.length > maxCharacters) {
		field.value = field.value.substring(0,maxCharacters);
		alert('This field is only allowed a maximum ' + maxCharacters + ' characters');
	}
}

//VALIDATE FORM
//VALIDATES A FORM FOR REQUIRED FIELDS AND FORMATS
//e.g. <form onsubmit="validateForm(this,'FirstName;LastName;Email','PostCode,postcode;EmailAddress,email','Password1,ConfirmPassword1;Password2,ConfirmPassword2')">
// Version 3.0
function validateForm(formID,requiredFields,formatFields,compareFields)
{
	var i;
	var j;
	var requiredFields;
	var arrRequiredFields;
	var formValidated = true;
	var elementID;
	var fieldLength;

	//clear span tags
	//clearSpanTags(formID)

//REQUIRED FIELDS
	
	//if a value is entered, create an array from the inputted fields string
	if (requiredFields.length > 0)
	{
		requiredFields		= new String(requiredFields);
		arrRequiredFields	= requiredFields.split(";");
		
		// remove all previously generated span tags
		clearSpanTags(arrRequiredFields);
		
		// if any fields in the array are blank, display error message
		for (i=0; i < arrRequiredFields.length ; i++)
		{
			fieldID = document.getElementById(arrRequiredFields[i]);
			if (fieldID.nodeName == "SELECT")
			{
				fieldLength = fieldID.options[fieldID.selectedIndex].value.length;
			}
			else
			{
				fieldLength	= fieldID.value.length;
			}
	
			if (fieldLength == 0)
			{
				displayErrorMessage(fieldID, "REQUIRED", "required", formValidated);
				formValidated = false;
			}
	
			if (fieldID.getAttribute("type") == "checkbox" && fieldID.checked == false)
			{
				displayErrorMessage(fieldID, "REQUIRED", "required", formValidated);
				formValidated = false;
			}
		}
	}


//VALIDATE FORMAT
	var arrFormatFields;
	var fieldID;
	var fieldValue;
	var fieldType;
	var strRegExp;
	var strText;

	//if a value is entered, create an array from the inputted fields string
	if (formatFields.length > 0)
	{
		formatFields = new String(formatFields);
		arrFormatFields = formatFields.split(";");

		// remove all previously generated span tags
		clearSpanTags(arrFormatFields);

		for (i=0; i < arrFormatFields.length; i++)
		{
			j = arrFormatFields[i].split(",");
			fieldID		= document.getElementById(j[0]);
			fieldValue	= fieldID.value;
			fieldType	= new String(j[1]);
			fieldType	= fieldType.toLowerCase();
			
			//if the form field is not empty, then validate format
			if (fieldValue != "")
			{
				// work out regular expression
				switch(fieldType)
				{
					case "number":
						//allows only digits and spaces
						strRegExp	= /^[\d\s]+$/i;
						strText		= ": Must be a valid number";
						break;
					case "email":
						strRegExp	= /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i;
						strText		= ": Must be a valid email address";
						break;
					case "url":
						//strRegExp	= /^([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$/i;
						strText		= ": Must be a valid website address in the format: www.website.com or website.com";
						break;
					case "postcode":
						strRegExp	= /^[A-Za-z]{1,2}\d([A-Za-z]|\d)? \d[A-Za-z]{2}$/i;
						strText		= ": Must be a valid post code";
						break;
					default:
						strRegExp	= fieldType;
						strText		= "";
						break;
				}
	
				// if the regular expression does not match, then display error message
				if (fieldValue.search(strRegExp) == -1)
				{
					displayErrorMessage(fieldID, "INVALID FORMAT " + strText, "format", formValidated);
					formValidated = false;
				}
			}
		}
	}


//COMPARE FIELDS
	//if a value is entered, compare all fields
	if (compareFields.length > 0)
	{
		compareFields		= new String(compareFields);
		arrCompareFields	= compareFields.split(";");

		for (i=0; i < arrCompareFields.length; i++)
		{
			j = arrCompareFields[i].split(",");
	
			// remove all previously generated span tags
			clearSpanTags(j);
			
			compareField1 = document.getElementById(j[0]);
			for (k=1; k < j.length; k++)
			{
				compareField2 = document.getElementById(j[k]);
				if (compareField1.value != compareField2.value)
				{
					displayErrorMessage(compareField1, "The value in these fields much match exactly", "compare", formValidated);
					displayErrorMessage(compareField2, "The value in these fields much match exactly", "compare", formValidated);
					formValidated = false;
				}
			}
		}
	}


//DISPLAY ERROR MESSAGE
	if (formValidated == false)
	{
		displayMainErrorMessage(formID);
	}

	return formValidated;
	//return false;
}

function clearSpanTags(fieldArray)
{
	for(var i = 0; i < fieldArray.length; i++)
	{
		//remove previous span tags
		if (document.getElementById('error_' + fieldArray[i]))
		{
			previousSpan = document.getElementById('error_' + fieldArray[i]);
			previousSpan.parentNode.removeChild(previousSpan);
		}
	}
}


function displayErrorMessage(elementID, message, classValue, firstError)
{
	// create new span tag with error message
	el = document.createElement("span");
	el.className = 'validation ' + classValue;
	el.id = 'error_' + elementID.id;
	el.textContent = message;
	
	// append new span tag to the end of the relevant input tag
	elementID.parentNode.appendChild(el);
	
	// if this is the first error, then select the corresponding form field
	if (firstError == true)
	{
		elementID.focus();
		if (elementID.nodeName != "SELECT")
		{
			elementID.select();
		}
	}	
}


function displayMainErrorMessage(formID)
// inserts an error message before the form
{
	if (document.getElementById("errorMessage") == null)
	{
		el = document.createElement("div");
		txt = document.createTextNode("This form has not been submitted because the field(s) marked below have not been completed correctly:");
		el.appendChild(txt);
		el.className = "error";
		el.id = "errorMessage";
		formID.parentNode.insertBefore(el, formID);
	}
}

//-->