/* 

Validation Scripts
author : Johari Lanng / partially derived from Robin's "U-Beaut Validation Set"
date: 7th Nov 2002

*/

// variables used by validation functions ---------------------------------------------------

var alertColourBg = "#ffdfd0";			// background colour used to denote problematic inputs
var alertColourFg = "000000";				// foreground colour used to denote problematic inputs
var passTest = true;						// boolean flag 
var mandatoryTest = true;					// boolean flag that assumes all mandatory fields are entered until one fails
var testExpression = new RegExp();			// empty regular expression used later to test input value (populated conditionally)
var errorMessage = "";						// empty error message string (populated conditionally)

// define regular expression for current object based on the validation type attribute -----------------------------------------------------
function setRegExpression(objId)
{

//alert(objId);

	
    if((document.getElementById(objId).tagName!='button') && (document.getElementById(objId).type != 'button') && (document.getElementById(objId).type != 'submit') && (document.getElementById(objId).type != 'reset') && (document.getElementById(objId).type != 'hidden'))
	{
		switch(document.getElementById(objId).validation)
		{
			case "alpha":
				testExpression = new RegExp("^[-A-Za-z\\s()']*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain alpha characters.";
				break;

			case "numeric":
				testExpression = new RegExp("^[-0-9()\\s()']*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain numeric characters.";
				break;

			case "alphanumeric":
				testExpression = new RegExp("^[-A-Za-z0-9\\s()'.,?!$&:;\"\-\=\/]*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain alphanumeric characters.";
				break;

			case "email":
				testExpression = new RegExp("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field must contain a valid email address.";
				break;

			case "password":
				testExpression = new RegExp("^[-A-Za-z0-9\\s]*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain alphanumeric characters.\nIt must also be between 6 - 32 characters in length.";
				break;

			case "postcode":
				testExpression = new RegExp("^[-0-9]{0,4}$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field must contain 4 numeric characters.";
				break;
				
			case "phone":
				testExpression = new RegExp("^[-0-9()\\s]*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain numeric characters.";
				break;

			case "mobile_phone":
				testExpression = new RegExp("^[-0-9()\\s]*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain numeric characters.";
				break;

			case "bill_acc_no":
				testExpression = new RegExp("^[-0-9()\\s]*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field can only contain numeric characters.";
				break;
				
			case "user_id":
				testExpression = new RegExp("^[a-zA-Z0-9]+(([-.]{1}[a-zA-Z0-9]+)*@[a-zA-Z]+([-.]{1}[a-zA-Z]+)*(.[a-zA-Z]{2,3})+)*$");
				errorMessage = "The '" + document.getElementById(objId).title + "' field must contain 6 - 50 alphanumeric characters or a valid email address.";
				break;

			case "select":
				testExpression = new RegExp("^[^~]*$");
				errorMessage = "You must make a selection from the '" + document.getElementById(objId).title + "' menu.";
				break;
				
			case "ddmmyyyy_date":
				testExpression = new RegExp("(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])([1-2][0,9][0-9][0-9]))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])([1-2][0,9][0-9][0-9]))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])([1-2][0,9][0-9][0-9]))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))");
				errorMessage = "Please enter '" + document.getElementById(objId).title + "' in DD/MM/YYYY format";
				break;
				
											
			case "none":
				testExpression = new RegExp("^[^~]*$");
				errorMessage="";
				
			default:
				testExpression = new RegExp("^[^~]*$");
				errorMessage="";
		}
	} 
	

}

function debugMessage(element, message)
{
    //uncomment following line for debugging.
/*
    alert(message + " id: " + element.id +
    " name: " + element.name +
    " mandatory: " + element.mandatory +
    " validation: " + element.validation);
*/
}

// performs overall form validation ---------------------------------------------------------------------------
function validateForm(formName)
{
//window.status = "Version : 1  // mandatoryTest = " + mandatoryTest ;
	var retValForm = false;

	for(x=0; x<document.getElementById(formName).elements.length; x++)
	{
	
	var currentElement = document.getElementById(formName).elements[x];
	if(currentElement.tagName!='FIELDSET' && currentElement.type!='hidden' && currentElement.type!='submit' && currentElement.type!='reset' && currentElement.tagName!='button')	
    
	{
		setRegExpression(currentElement.id);
		
		switch(currentElement.mandatory)
		{
			case "yes":
				if((currentElement.value == "") || (currentElement.value == null) || (!testExpression.test(currentElement.value)))
				{
debugMessage(currentElement, "Field Failed - ");

					currentElement.mandatoryTest = false;
					currentElement.style.backgroundColor = alertColourBg;
					currentElement.style.color = alertColourFg;
					mandatoryTest = false;
				} else {
					currentElement.mandatoryTest = true;
					currentElement.style.backgroundColor = "white";
					currentElement.style.color = "black";
				}
					break;	
	
			default:
			    if( ((testExpression.test(currentElement.value)) && (currentElement.value != "")) || (currentElement.value=="") )
				{
					currentElement.mandatoryTest = true;
					currentElement.style.backgroundColor = "white";
					currentElement.style.color = "black";
				} else {
debugMessage(currentElement, "Field Failed - ");

					currentElement.mandatoryTest = false;
					currentElement.style.backgroundColor = alertColourBg;
					currentElement.style.color = alertColourFg;
					mandatoryTest = false;
				}
				break;
			}
		}
	}
	
	if(mandatoryTest)
	{
		retValForm = true;
	} else {
		alert("            You have not completed one or more of the mandatory fields.\n\Highlighted fields must be completed before your form can be submitted.");
		mandatoryTest = true;
		retValForm = false;
	}
	//alert('validateForm:' + retValForm);
	return retValForm;
}

// individual input / textarea tests ------------------------------------------------------------------------------------------------
function checkValue(objId)
{
    setRegExpression(objId);

    var passTest = testExpression.test(document.getElementById(objId).value);
	var currentElement = document.getElementById(objId);
	
    if( ((testExpression.test(document.getElementById(objId).value)) && (currentElement.value != "")) || (currentElement.value=="") )
    {
            currentElement.style.backgroundColor = "white";
            currentElement.style.color = "black";
    } else {
            alert(errorMessage);
            currentElement.style.backgroundColor = alertColourBg;
            currentElement.style.color = alertColourFg;
            currentElement.focus();
    }
}

