
function validate(formName)
{var Pass=true;var inputValues=new Array();var valFailureMsgArray=new Array();var labelArray=document.getElementsByTagName('label');var not_empty_re=/\w/;var valid_email_re=/^[\w\-\.]+\@[\w\-\.]+\.[\w\-\.]+$/;var invalid_email_explanation='(invalid address entered)';var invalid_selection=/^Select one$/;with(document.getElementById(formName)){for(i=0;i<elements.length;i++)
{var elementType=elements[i].type;var elementName=elements[i].name;if(typeof elements[i].type!='undefined')
{inputValues=fillArray(elements[i],inputValues);if(i+1<elements.length){if(elementName==elements[i+1].name)
{continue}}
var optOrMand='o';if(elements[i].name.substring(0,2)=='m_'){optOrMand='m';}
if(inputValues.length>0&&inputValues[0]!='')
{validateInput(optOrMand,elements[i].name,inputValues)}
else
{if(optOrMand=='m')
{validateInput('m',elements[i].name,inputValues)}}}
inputValues.length=0;}}with(document.getElementById(formName))
if(Pass)
{return true}
else{alert("Please complete all required fields:"+"\n\n"+valFailureMsgArray.join('\n'));return false}
function fillArray(inputObjects,valuesArray)
{switch(inputObjects.type.substr(0,4))
{case"text":valuesArray[0]=inputObjects.value;break;case"sele":for(a=0;a<inputObjects.options.length;a++)
{if(inputObjects.options[a].selected)
{valuesArray[valuesArray.length]=inputObjects.options[a].value.search(invalid_selection)==-1?inputObjects.options[a].value:''}}
break;default:if(inputObjects.checked)
{valuesArray[valuesArray.length]=inputObjects.value}}
return valuesArray;}
function validateInput(optOrMand,inputName,inputValues)
{var regExToUse;var validationExplanation='';if(inputName.search(/date/i)!=-1)
{validationExplanation=validateDate(inputName,inputValues);if(validationExplanation==''){return};if(inputValues[0]==''){validationExplanation=''};}
else{if(inputName.search(/email/i)!=-1)
{regExToUse=valid_email_re;if(inputValues[0]!=''){validationExplanation=invalid_email_explanation};}
else
{regExToUse=not_empty_re;}
for(j=0;j<inputValues.length;j++)
{if(inputValues[j].search(regExToUse)!=-1)
{return}}}
getValidationFailureMessage(inputName,validationExplanation);Pass=false;}
function getValidationFailureMessage(inputName,validationExplanation){for(z=0;z<labelArray.length;z++)
{var currentLabel=labelArray[z].getAttribute('for')?labelArray[z].getAttribute('for'):labelArray[z].getAttribute('htmlFor');if(currentLabel==inputName)
{valFailureMsgArray[valFailureMsgArray.length]=labelArray[z].firstChild.nodeValue.concat(' ',validationExplanation);break;}}}
function validateDate(inputName,inputValues){var dateToday=new Date();var inputDate=new Date();var valid_date_re=/^\d{2}\/\d{2}\/[12]\d{3}$/;var invalid_date_explanation='(invalid date entered)';if(inputValues[0].search(valid_date_re)==-1)
{return'(invalid date format.  Must be dd/mm/yyyy)'}
var inputYear=inputValues[0].substr(6,4);var inputMonth=inputValues[0].substr(3,2);inputMonth--;var inputDay=inputValues[0].substr(0,2);inputDate.setFullYear(inputYear,inputMonth,inputDay);var adjustedYear=inputDate.getYear()%1900+1900;if(adjustedYear!=inputYear||inputDate.getMonth()!=inputMonth||inputDate.getDate()!=inputDay){return'(invalid date supplied)';}
if(inputName.search(/p_/)!=-1)
{if(inputDate>=dateToday)
{return'(date must be in the past)'}}
if(inputName.search(/f_/)!=-1){if(inputDate<=dateToday)
{return'(date must be in the future)'}}
return'';}}