
function validateForm() {
	
	// holds an array of errors to output
	var fieldErrorArray = new Array();
	
	// private accessor methods
	this.checkRadio = checkRadio;
	this.checkChecked = checkChecked;
	this.checkText = checkText;
	this.checkTextMinLength = checkTextMinLength;
	this.checkNumeric = checkNumeric;
	this.checkPrice = checkPrice;
	this.checkListBoxHasItems = checkListBoxHasItems;
	this.checkSelect = checkSelect;
	this.validateEmailAddress = validateEmailAddress;
	this.validatePostCode = validatePostCode;
	this.displayErrors = displayErrors;
	this.numberOfErrors = numberOfErrors;
	this.addCustomError = addCustomError;
	
	// checks that one has been checked (may need altering)
	function checkRadio( element, length, output ) {

		var hasChecked = false;
		for (i = 0; i < length; i++){
			if (document.getElementById( element + '[' + i + ']').checked) {
		      hasChecked = true;
		   }
		}
		if(!hasChecked){
			fieldErrorArray.push(output);
		}
	}
	
	function checkChecked( element, output ) {
		if (!document.getElementById( element ).checked) {
			fieldErrorArray.push(output);
		}
	}
	
	// ensures text has been entered
	function checkText ( element, output ) {
		if (document.getElementById( element ).value == '') {
			fieldErrorArray.push(output);
		}
	}
	
	// ensures text of certain length has been entered
	function checkTextMinLength ( element, output, charLength ) {
		var checkString = document.getElementById( element ).value;
		if( checkString.length < charLength ){
			fieldErrorArray.push(output);
		}
	}
	
	function checkNumeric ( element, output  ){
		var data = document.getElementById( element ).value;
		var ValidChars = "0123456789.";
		var IsNumber = true;
		var Char;
		if( data.length > 0 ) {
			for (i = 0; i < data.length && IsNumber == true; i++){ 
				Char = data.charAt(i); 
				if (ValidChars.indexOf(Char) == -1){
					IsNumber = false;
				}
			}
			if( !IsNumber ){
				fieldErrorArray.push( output + ' must be a numeric value' );
			}
		} else {
			// no value entered
			fieldErrorArray.push( output );
		}
	}
	
	function checkPrice ( element, output  ){
		var data = document.getElementById( element ).value;
		var ValidChars = "0123456789.,";
		var IsNumber = true;
		var Char;
		if( data.length > 0 ) {
			for (i = 0; i < data.length && IsNumber == true; i++){ 
				Char = data.charAt(i); 
				if (ValidChars.indexOf(Char) == -1){
					IsNumber = false;
				}
			}
			if( !IsNumber ){
				fieldErrorArray.push( output + ' must be a price' );
			}
		} else {
			// no value entered
			fieldErrorArray.push( output );
		}
	}

	
	// checks for items in the passed listbox
	function checkListBoxHasItems ( element, output ) {
		if( document.getElementById( element ).length <= 0) {
			fieldErrorArray.push(output);
		}
	}
	
	// checks the value chosen is not the passed default value
	function checkSelect ( element, nothingValue, output ){
		if( document.getElementById( element ).value == nothingValue ){
			fieldErrorArray.push(output);
		}
	}
	
	// checks the value chosen is not the passed default value
	function validateEmailAddress ( emailAddress, output ){
		if( document.getElementById( emailAddress ) )
			emailAddress = document.getElementById( emailAddress ).value;
		if( typeof( output ) == 'undefined' )
			output = 'Email address is invalid';
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if ( !filter.test( emailAddress )){
			fieldErrorArray.push( output );
		}
	}

	// checks the value chosen is not the passed default value
	function validatePostCode ( element, output ){
		var filter  = /^[A-Za-z]{1,2}[0-9]{1}[A-Za-z0-9]{0,1}[ ]?[0-9]{1}[A-Za-z]{2}$/;
		if ( !filter.test( document.getElementById( element ).value ) ){
			fieldErrorArray.push( output );
		}
	}
	
	
	// add a custom error to the array
	function addCustomError( errorMessage ){
		
		fieldErrorArray.push( errorMessage );
		
	}
	
	// returns the number of errors found
	function numberOfErrors(){
		
		return fieldErrorArray.length;
		
	}
	
	// alerts all current errors to the user	
	function displayErrors(){
		
		var output = '';
		
		for(i=0;i<fieldErrorArray.length;i++){
			
			output += ' - ' +fieldErrorArray[i] + '\n';
			
		}
		
		alert('The following fields have not been completed:\n\n' + output);
		
	}
	
}

function navOn( id ) {
		document.getElementById('nav_' + id + '_rpt').style.backgroundImage = 'url(enhanceimages/nav-rpt-grey.jpg)';
		document.getElementById('nav_' + id + '_left').style.backgroundImage = 'url(enhanceimages/nav-left-grey.jpg)';
		document.getElementById('nav_' + id + '_right').style.backgroundImage = 'url(enhanceimages/nav-right-grey.jpg)';
	}
function navOff( id ) {
	document.getElementById('nav_' + id + '_rpt').style.backgroundImage = '';
	document.getElementById('nav_' + id + '_left').style.backgroundImage = '';
	document.getElementById('nav_' + id + '_right').style.backgroundImage = '';
}
function inputBoxFocus( input, defaultText, passwordField ) {
	if( typeof( passwordField ) != 'undefined' ) {
		document.getElementById( passwordField ).style.display = '';
		document.getElementById( passwordField+'_text' ).style.display = 'none';
		document.getElementById( passwordField ).focus();
	} else {
		if( input.value == defaultText ) {
				input.value = '';
		}
	}
}

function inputBoxBlur( input, defaultText, passwordField ) {
	if( input.value == '' ) {
		if( typeof( passwordField ) != 'undefined' ) {
			document.getElementById( passwordField ).style.display = 'none';
			document.getElementById( passwordField+'_text' ).style.display = '';
		} else {
			input.value = defaultText;
		}
	}
}

function validateCallMeBack() {
	
	var validator = new validateForm();

	// name
	if ( document.getElementById( 'call_me_back_name' ).value == '- Your Name -' ) {
		validator.addCustomError( 'Your Name' );
	} else {
		validator.checkText( 'call_me_back_name', 'Your Name' );
	}
	// number
	if ( document.getElementById( 'call_me_back_number' ).value == '- Your Phone Number -' ) {
		validator.addCustomError( 'Your Phone Number' );
	} else {
		validator.checkNumeric( 'call_me_back_number', 'Your Phone Number' );
	}
	if ( validator.numberOfErrors() > 0 ) {
		validator.displayErrors();
		return false;
	} else {
		return true;
	}
}

function validateContact() {
	var validator = new validateForm();

	// name
	validator.checkText( 'name', 'Name' );

	// number
	var validator2 = new validateForm();
	validator2.checkText( 'telephone', '' );
	validator2.checkText( 'email', '' );
	if ( validator2.numberOfErrors() >= 2 ) {
		validator.addCustomError( 'You must enter either a telephone number or email address' );
	}
	validator.checkText( 'enquiry', 'Enquiry' );
	if ( validator.numberOfErrors() > 0 ) {
		validator.displayErrors();
		return false;
	} else {
		return true;
	}
}

function checkform( fields, field_descriptions ) {
	for( var i = 0; i < fields.length; i++ ) {
		if( document.getElementById(fields[i]) && document.getElementById(fields[i]).value == 0 ) {
			alert( 'Please enter a value for ' + field_descriptions[i] );
			return false;
		}
	}
	
	return true;
}