<!--
//////////////////////////////////////////
//					//
// 	   Research and Markets		//
//  	        - SFF - 	 	//
//   	    24th March 2006		//
//					//
//    Advanced Form Verification	//
//    	    V 1 - 24th Mar 06		//
//					//
//////////////////////////////////////////

/*
QUICK USAGE:
<form method="get" action="" onSubmit="return form_verify(this)"

SEE DOCUMENTATION BELOW
*/

//////////////////////
// GLOBAL VARIABLES //
//////////////////////

//get global settings (over-ride within HTML page)
var opt_tech_messages = new String(opt_tech_messages);
var opt_group_error_message = new String(opt_group_error_message);
var opt_group_error_message_title = new String(opt_group_error_message_title);
var opt_group_error_message_footer = new String(opt_group_error_message_footer);
var opt_highlight_field = new String(opt_highlight_field);
var opt_highlight_colour = new String(opt_highlight_colour);
var opt_save_cookies = new String(opt_save_cookies);
var opt_cookie_pre_name = new String(opt_cookie_pre_name);


//default vars
if (opt_tech_messages == "undefined") {
opt_tech_messages = "yes";
}
if (opt_group_error_message == "undefined") {
opt_group_error_message = "no";
}
if (opt_group_error_message_title == "undefined") {
opt_group_error_message_title = "Sorry, but there was a problem with the information you entered:\n\n";
}
if (opt_group_error_message_footer == "undefined") {
opt_group_error_message_footer = "\nPlease press \"OK\" and check your details.\n\n[Research and Markets]";
}
if (opt_highlight_field == "undefined") {
opt_highlight_field = "yes";
}
if (opt_highlight_colour == "undefined") {
opt_highlight_colour = "#f1dbdb";
}
if (opt_save_cookies == "undefined") {
opt_save_cookies = "yes";
}
if (opt_cookie_pre_name == "undefined") {
opt_cookie_pre_name = "rm_c_fv_";
}



/////////////////////////////
// NO NEED TO CHANGE BELOW //
/////////////////////////////

function form_verify (form_name) {
var all_error_messages = opt_group_error_message_title;
var first_focus = "";
var first_highlight = "";
var eval_focus_code = "";
var eval_highlight_code = "";
var group_error_messages = new Array();
var group_error_total = 0;

	//go through required fields
	for (var i = 0; i < fields_required.length; i++) {
	var field_variable = fields_required[i];

		//get the "required" or "optional" (?) option
		if (field_variable.indexOf('?') != -1) {
		field_variable = field_variable.substring(field_variable.indexOf('?')+1,field_variable.length);
		var optional = "yes";
		} else {
		var optional = "no";
		}
		
		//get the fieldname
		if (fields_required[i].indexOf('-') != -1) {
		var fieldname = field_variable.substring(0,field_variable.indexOf('-'));
		} else {
		var fieldname = field_variable;
		}
		
		//get the verification option
		if (fields_required[i].indexOf('-') != -1) {
		var verify = field_variable.substring(field_variable.indexOf('-'),field_variable.length);
		} else {
		var verify = "";
		}
		
		//get additional amount
		var extra_amount = verify.substring(2);	
		
		//lower case verification etc.
		extra_amount = str_lower(extra_amount);
		verify = str_lower(verify);

		//check that it's not a "big checkbox group"
		if (verify == "-k" || verify.indexOf('-x') != -1) {
		var formvalue = "";

		} else {

			//get user input
			eval("var formvalue = document."+form_name.name+"."+fieldname+".value");

		}
		
		//overwrite "optional" if there is input, ie. visitor entered in something
		if (formvalue != "" && optional == "yes") {
		optional = "no";		
		}
		
		//DEBUG (do not upload to live servers with uncommented DEBUG alert (obivously))
		//alert("Form Name: " + form_name.name + "\n" + "Field Name: " + fieldname + "\n" + "Field Validation: " + verify + "\n" + "Field Value: " + formvalue + "\n" + "Field Optional: " + optional);

			//verification (all returns false)
			var verify_chk = true;
			var tech_message = "";

			//check for email
			if (verify.indexOf("-e") != -1) {
			verify_chk = str_chk_email(formvalue);
			tech_message = "\n(email address characters only)";

			//check for only letters
			} else if (verify.indexOf("-a") != -1) {
			verify_chk = str_chk_letters(formvalue);
			tech_message = "\n(letters only)";

			//check for only numbers
			} else if (verify.indexOf("-n") != -1) {
			verify_chk = chk_number(formvalue,extra_amount);
			tech_message = "\n(numbers only)";

			//check for both numbers and letters
			} else if (verify.indexOf("-h") != -1) {
			verify_chk = str_chk_alphanumeric(formvalue);
			tech_message = "\n(letters and numbers only)";

			//check for check box value
			} else if (verify.indexOf("-b") != -1) {
			
				//"group" of checkboxes
				if (extra_amount != "") {
				verify_chk = chk_checkboxes_group(fieldname,form_name,extra_amount);
				tech_message = "\n(please tick a checkbox)";
								
				//only one check box
				} else {
				verify_chk = str_chk_box(fieldname,form_name);
				tech_message = "\n(please tick the checkbox)";
				}

			//check for an external variable
			} else if (verify.indexOf("-x") != -1) {
			verify_chk = stc_chk_boolean_variable(extra_amount);
			tech_message = "\n(please check the form for errors)";

			//check a big group of checkboxes
			} else if (verify.indexOf("-k") != -1) {
			verify_chk = str_chk_boxes(fieldname,form_name);
			tech_message = "\n(please tick a checkbox)";

			//check that str is not the same
			} else if (verify.indexOf("-s") != -1) {
			formvalue=str_lower(formvalue);
			verify_chk = str_not_equal(formvalue,extra_amount);
			tech_message = "\n(nothing entered)";

			//check that str contains no hyperlinks
			} else if (verify.indexOf("-nh") != -1) {
			verify_chk = containsNoHyperlink(formvalue);
			tech_message = "\n(message may not contain hyperlinks)";	

			//first name / name fields
			} else if (verify.indexOf("-t") != -1) {
			verify_chk = chk_name(formvalue);
			tech_message = "\n(please check your name)";

			//check for less than (and equal) size
			} else if (verify.indexOf("-l") != -1) {
			verify_chk = str_chk_less_size(formvalue,extra_amount);

				var length_to_remove = eval("document."+form_name.name+"."+fieldname+".value.length");
				length_to_remove = length_to_remove - extra_amount;
				tech_message = "\n(please remove "+length_to_remove+" characters.)";

			//check for greater than (and equal) size
			} else if (verify.indexOf("-g") != -1) {
			verify_chk = str_chk_great_size(formvalue,extra_amount);

				var total_length = eval("document."+form_name.name+"."+fieldname+".value.length");
				tech_message = "\n(must be "+extra_amount+" characters or more, so far " + total_length + " characters)";

			//check that a radio box is selected
			} else if (verify.indexOf("-r") != -1) {
			verify_chk = radiobox_checked(fieldname,form_name);
			tech_message = "\n(select a radio box)";

			//this field OR the other field must be filled in
			} else if (verify.indexOf("-o") != -1) {
			eval("var second_value = "+form_name.name+"."+extra_amount+".value");
			verify_chk = chk_two_values(formvalue,second_value);
			tech_message = "\n(please check your details)";

			//check for social security number
			} else if (verify.indexOf("-u") != -1) {
			
				//type of social security number
				if (extra_amount == "se") {
				verify_chk = chk_social_number_se(formvalue);
				tech_message = "\n(valid Swedish social number)";
				
				//default
				} else {
				verify_chk = chk_number(formvalue,extra_amount);
				tech_message = "\n(numbers only)";				
				}
			
			//check for postal code
			} else if (verify.indexOf("-c") != -1) {
			
				//type of postal code
				if (extra_amount == "uk") {
				verify_chk = chk_post_code_UK(formvalue);
				tech_message = "\n(valid UK postal code only)";
				
				//first part UK
				} else if (extra_amount == "uk1") {
				verify_chk = chk_post_code_UK_first(formvalue);
				tech_message = "\n(valid UK postal code only)";				

				//second part UK
				} else if (extra_amount == "uk2") {
				verify_chk = chk_post_code_UK_second(formvalue);
				tech_message = "\n(valid UK postal code only)";				

				//NO postal code
				} else if (extra_amount == "no") {
				verify_chk = chk_post_code_NO(formvalue);
				tech_message = "\n(valid NO postal code only)";				

				//DE postal code
				} else if (extra_amount == "de") {
				verify_chk = chk_post_code_DE(formvalue);
				tech_message = "\n(valid DE postal code only)";				

				//SE postal code
				} else if (extra_amount == "se") {
				verify_chk = chk_post_code_SE(formvalue);
				tech_message = "\n(valid NO postal code only)";				

				//default
				} else {
				verify_chk = str_chk_alphanumeric(formvalue);
				tech_message = "\n(letters and numbers only)";
				}

			//check for mobile phone number
			} else if (verify.indexOf("-m") != -1) {
			
				//type of mobile code
				if (extra_amount == "uk") {
				verify_chk = chk_mobile_UK(formvalue);
				tech_message = "\n(valid UK mobile phone number only)";
				
				//default
				} else {
				verify_chk = chk_number(formvalue);
				tech_message = "\n(numbers only)";				
				}
			

			//check for phone number
			} else if (verify.indexOf("-p") != -1) {
			
				//normal phone number UK
				if (extra_amount == "uk") {
				verify_chk = chk_phone_UK(formvalue);
				tech_message = "\n(valid UK phone number only)";
				
				//normal phone number
				} else if (extra_amount == "n") {
				verify_chk = chk_phone_number(formvalue,5);
				tech_message = "\n(valid phone number only)";

				//FR phone number
				} else if (extra_amount == "fr") {
				verify_chk = chk_phone_FR(formvalue);
				tech_message = "\n(valid French phone number only)";				

				//NO phone number
				} else if (extra_amount == "no") {
				verify_chk = chk_phone_NO(formvalue);
				tech_message = "\n(valid Norwegian phone number only)";				
				
				//SE phone number
				} else if (extra_amount == "se") {
				verify_chk = chk_phone_SE(formvalue);
				tech_message = "\n(valid Swedish phone number only)";				
				
				//default
				} else {
				verify_chk = chk_number(formvalue);
				tech_message = "\n(numbers only)";
				}

			//check for area phone number
			} else if (verify.indexOf("-d") != -1) {
			
				//normal phone number UK
				if (extra_amount == "uk") {
				verify_chk = chk_area_number_UK(formvalue,2);
				tech_message = "\n(valid UK area phone number)";

				//default
				} else {
				verify_chk = chk_number(formvalue);
				tech_message = "\n(numbers only)";
				}
			
			//check to see if there is a value
			} else if (formvalue == "" || formvalue == "blank") {
			verify_chk = false;
			tech_message = "\n(this field is required)";
			}

			//ADD ERROR MESSAGE AND FORM FOCUS
			if (verify_chk == false && optional == "no") {
			var display_message;
			display_message = fields_error_message[i];

				if (opt_tech_messages == "yes") {
				display_message += tech_message;
				}
				
				//display error
				if (opt_group_error_message != "yes") {
				alert(display_message);

				//add error onto a single message
				} else {
				group_error_messages[group_error_total] = fields_error_message[i];
				group_error_total++;
				}

				//focus on a radio box
				if (verify.indexOf("-r") != -1) {
				eval_focus_code = "document."+form_name.name+"."+fieldname+"[0].focus()";
				//eval_highlight_code = "document."+form_name.name+"."+fieldname+"[0].style.backgroundColor='#000000';";
				
				//big group checkbox (skip)
				} else if (verify.indexOf("-k") != -1) {
				
				//external variable
				} else if (verify.indexOf("-x") != -1) {

				//focus on the form element
				} else {
				
					eval("var chk_hidden = new String(document."+form_name.name+"."+fieldname+".type);");
					
					if (chk_hidden == "hidden") {
					eval_focus_code = "";

					} else {
					eval_focus_code = "document."+form_name.name+"."+fieldname+".focus()";
					//eval_highlight_code = "document."+form_name.name+"."+fieldname+".style.backgroundColor='"+opt_highlight_colour+"';";
					

					}
				}
				
				var tmp_check = new String(fields_redirect_focus[i]);
				
				//redirect focus on field
				if (tmp_check != "undefined") {
				
					eval("var chk_hidden = new String(document."+form_name.name+"."+tmp_check+".type);");

					if (chk_hidden == "hidden") {
					eval_focus_code = "";

					} else {
					eval_focus_code = "document."+form_name.name+"."+tmp_check+".focus()";

					}
				}

				//save first error
				if (first_focus == "") {
				first_focus = eval_focus_code;
				}
				if (first_highlight == "") {
				first_highlight = eval_highlight_code;
				}

				
				if (opt_group_error_message != "yes") {

				
				eval(eval_focus_code);
				
					//highlight field, apply CSS class
					if (opt_highlight_field == "yes") {
					eval(eval_highlight_code);
					}
				
				return false;
				}

			}
	} //end for

	//DISPLAY ONE BIG ERROR MESSAGE
	if (opt_group_error_message == "yes" && (group_error_messages.length >= 1)) {

	//focus on field
	eval(first_focus);
	
	//highlight field, apply CSS class
	if (opt_highlight_field == "yes") {
	eval(first_highlight);
	}
	

	//remove duplicate errors from group error message array
	if (opt_dedup_error_messages == "yes") {
	group_error_messages = array_dedup(group_error_messages);
	}
	
		//display only unqiue error messages
		for (var w = 0; w < group_error_messages.length; w++) {
		all_error_messages += "          - " + group_error_messages[w] + "\n";
		}
		
	all_error_messages += opt_group_error_message_footer;

	alert(all_error_messages);

	return false;
	}

return true;
} //end function
 
///////////////////
// SUB FUNCTIONS //
///////////////////




///////////////////////////////////////
// COUNTRY DATA VALIDATION FUNCTIONS //
///////////////////////////////////////


/* START UK CUSTOM DATA FUNCTIONS */

//test a UK phone area number number
function chk_area_number_UK (phone_number,phone_length) {
var pn = new String(phone_number);
var plength = new String(phone_length);

//default
if (plength == "" || isNaN(plength)) {
plength = 4;
}

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^0[0-9]{"+plength+",}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}

//test a UK phone number
function chk_phone_UK (phone_number,phone_length) {
var pn = new String(phone_number);
var plength = new String(phone_length);

//default
if (plength == "" || isNaN(plength)) {
plength = 10;
}

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^0[0-9]{"+plength+"}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}

//test a UK mpbile phone number
function chk_mobile_UK (phone_number,phone_length) {
var pn = new String(phone_number);
var plength = new String(phone_length);

//default
if (plength == "" || isNaN(plength)) {
plength = 9;
}

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^07[0-9]{"+plength+"}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}

//test a NO postal code
function chk_post_code_NO(postal_number,postal_length) {
var pc = new String(postal_number);
var plength = new String(postal_length);
//default
if (plength == "" || isNaN(plength)) {
plength = 4;
}

//remove typical values before checking
pc = remove_number_symbols(pc);

//regular expression
eval("var pn_pattern = /^[0-9]{"+plength+"}\$/;");

	//TEST
	if (pc == "" || pn_pattern.test(pc) == false ) {
	return false;
	}

return true;
}

//test a DE postal code
function chk_post_code_DE(postal_number,postal_length) {
var pc = new String(postal_number);
var plength = new String(postal_length);
//default
if (plength == "" || isNaN(plength)) {
plength = 5;
}

//remove typical values before checking
pc = remove_number_symbols(pc);

//regular expression
eval("var pn_pattern = /^[0-9]{"+plength+"}\$/;");

	//TEST
	if (pc == "" || pn_pattern.test(pc) == false ) {
	return false;
	}

return true;
}


//test a SE phone number
function chk_phone_SE (phone_number,phone_length) {
var pn = new String(phone_number);

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^[0-9]{5,10}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}

//test a SE postal code
function chk_post_code_SE(postal_number,postal_length) {
var pc = new String(postal_number);
var plength = new String(postal_length);
//default
if (plength == "" || isNaN(plength)) {
plength = 5;
}


//remove typical values before checking
pc = remove_number_symbols(pc);

//regular expression
eval("var pn_pattern = /^[0-9]{"+plength+"}\$/;");

	//TEST
	if (pc == "" || pn_pattern.test(pc) == false ) {
	return false;
	}

return true;
}

//test first part of UK post code
function chk_post_code_UK_first (postcode) {
var ps = new String(postcode);
ps += "9AB";

//remove typical values before checking
ps = remove_number_symbols(ps);

return chk_post_code_UK(ps);
}

//test first part of UK post code
function chk_post_code_UK_second (postcode) {
var ps = new String(postcode);
ps = "NW1" + ps;

//remove typical values before checking
ps = remove_number_symbols(ps);

return chk_post_code_UK(ps);
}

//test a UK post code
function chk_post_code_UK (postcode) {
var ps = new String(postcode);

//remove typical values before checking
ps = remove_number_symbols(ps);

//regular expression
//var ps_pattern = /^[A-Z](([0-9])|([A-Z][0-9])|([0-9]{2})|([A-Z][0-9]{2})|([A-Z][0-9][A-Z])|([0-9][A-Z]))\s\d[A-Z]{2}$/i;		//original US code
var ps_pattern = /^[A-Z](([0-9])|([A-Z][0-9])|([0-9]{2})|([A-Z][0-9]{2})|([A-Z][0-9][A-Z])|([0-9][A-Z]))\d[A-Z]{2}$/i;

	//TEST
	if (ps == "" || ps_pattern.test(ps) == false ) {
	return false;
	}

return true;
}

/* END UK CUSTOM DATA FUNCTIONS */

//test name
function chk_name (name) {
var name_str = new String(name);

//regular expression
eval("var pn_pattern = /[0-9\?\@\:\#\\\/]+/;");

	//TEST
	if (name_str == "" || pn_pattern.test(name_str) == true) {		//special
	return false;
	}

return true;
}

//test a NO phone number
function chk_phone_NO (phone_number) {
var pn = new String(phone_number);

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^[0-9]{8}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}
/* START FR CUSTOM DATA FUNCTIONS */

//test a FR phone number
function chk_phone_FR (phone_number,phone_length) {
var pn = new String(phone_number);
var plength = new String(phone_length);

//default
if (plength == "" || isNaN(plength)) {
plength = 9;
}

//remove typical values before checking
pn = remove_number_symbols(pn);

//regular expression
eval("var pn_pattern = /^0[0-9]{"+plength+","+plength+"}\$/;");

	//TEST
	if (pn == "" || pn_pattern.test(pn) == false ) {
	return false;
	}

return true;
}

/* END FR CUSTOM DATA FUNCTIONS */

/* START SE CUSTOM DATA FUNCTIONS */

//test a SE social number
function chk_social_number_se (social_number) {
var sn = new String(social_number);

//remove typical values before checking
sn = remove_number_symbols(sn);

//regular expression
eval("var pn_pattern = /^[0-9]{11}\$/;");

	//TEST
	if (sn == "" || pn_pattern.test(sn) == false) {
	return false;
	}

	//check digits at start (DDMMYY00000)
	var sn_dd = sn.substr(0,2);
	var sn_mm = sn.substr(2,2);

	if (sn_dd > 31 || sn_mm > 12) {
	return false;
	}

return true;
}

/* END SE CUSTOM DATA FUNCTIONS */

///////////////////////////////////
// GENERIC DATA & FORM FUNCTIONS //
///////////////////////////////////

//check that 1 field out of 2 has been filled in
function chk_two_values (first_value, second_value) {

	//check something has been entered into one field
	if (first_value == "" && second_value == "") {
	return false;
	}

return true;
}




//check if a radio box is checked
function radiobox_checked(field_name,form_name) {
eval("var radio_total = document."+form_name.name+"."+field_name+".length;");
var chk_total = new String(radio_total);
var radio_value;

	//only one radio button
	if (chk_total == "undefined") {
	var radio_checked = eval("document."+form_name.name+"."+field_name+".checked");

		//if one is selected	
		if (radio_checked == "checked" || radio_checked == "true" || radio_checked == true) {
		return true;
		}
	}

	//multiple buttons
	for (var i = 0; i <radio_total; i++) {
	var radio_checked = eval("document."+form_name.name+"."+field_name+"["+i+"].checked");

		//if one is selected	
		if (radio_checked == "checked" || radio_checked == "true" || radio_checked == true) {
		return true;
		}
	}
return false;
}


//check for only numbers (backwards compatible)
function str_chk_numbers(str) {
return chk_number(str,1,100);
}


//test a normal number
function chk_number (numberx,start_length,end_length) {
var num = new String(numberx);
var length_start = new String(start_length);
var length_end = new String(end_length);

//default
if (length_start == "" || isNaN(length_start)) {
length_start = 1;
}
if (length_end == "" || isNaN(length_end)) {
length_end= 100;
}

//remove typical values before checking
num = remove_number_symbols(num);

//regular expression
eval("var pn_pattern = /^[0-9]{"+length_start+","+length_end+"}\$/;");

	//TEST
	if (num == "" || pn_pattern.test(num) == false ) {
	return false;
	}

return true;
}

//test a phone number (chk_number alias)
function chk_phone_number (phone_number,phone_length) {
var pn = new String(phone_number);
var plength = new String(phone_length);

//default
if (plength == "" || isNaN(plength)) {
plength = 2;
}

return chk_number(pn,plength,plength);
}

//check for email
function str_chk_email(str) {
var email = str;

//regular expression
//var ps_pattern = /^([\w\-~.]+\@([\w\-]+\.){1,}[a-zA-Z]{2,4})$/;
var ps_pattern = /^([a-zA-Z0-9_\.\-'])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;


	//TEST
	if (email == "" || ps_pattern.test(email) == false ) {
	return false;
	}
	
	if (email.indexOf('..') != -1) {
	return false;
	}

return true;
}

//check for both numbers and letters
function str_chk_alphanumeric(str) {
var stringx = str;

//regular expression
var ps_pattern = /^[0-9A-Za-z ]+$/;

	//TEST
	if (stringx == "" || ps_pattern.test(stringx) == false) {
	return false;
	}

return true;
}

//check for only letters
function str_chk_letters(str) {
var stringx = str;

//regular expression
var ps_pattern = /^[A-Za-z ]+$/;

	//TEST
	if (stringx == "" || ps_pattern.test(stringx) == false) {
	return false;
	}

return true;
}

//check for less than (and equal) size
function str_chk_less_size(str,chr_size) {
	if (str == "" || str.length > chr_size) {
	return false;
	}
return true;
}

//check for greater than (and equal) size
function str_chk_great_size(str,chr_size) {
	if (str == "" || str.length < chr_size) {
	return false;
	}
return true;
}

//check external variable
function stc_chk_boolean_variable (variable_name) {
eval("var bool_var = new String(" + variable_name + ");");

	//defaults to 'false'
	if (bool_var == "true") {
	return true;
	}

return false;
}

//check a (big) group of checkboxes
function str_chk_boxes (checkbox, form_name) {

	for (var i = 0; i < document.forms[form_name.name].elements.length; i++) {

		if(document.forms[form_name.name].elements[i].name.substring(0,checkbox.length) == checkbox) {

			//exit out of loop to save CPU time
			if(document.forms[form_name.name].elements[i].checked==true) {
			return true;
			}
		}
	}

return false;
}


//check checkbox "group"
function chk_checkboxes_group (fieldname,form_name,group_name) {
var chk = 0;					
var chk_rtn = "";

	//get all checkbox names that match the "group name"
	for (var h = 0; h < fields_required.length; h++) {
	var checkbox_field = new String(fields_required[h]);

		if (eval("checkbox_field.indexOf('-b"+group_name+"') != -1")) {
		checkbox_field = fields_required[h].substring(0,fields_required[h].indexOf('-'));
		chk_rtn = str_chk_box(checkbox_field,form_name);
			
			//ok
			if (chk_rtn == true) {
			chk = 1;
			}
		}
	}

	//false
	if (chk == 0) {
	return false;
	}

return true;
}





//check for check box value
function str_chk_box(checkbox,form_name) {
	//redefine form value for a checkbox
	var str = eval(form_name.name+"."+checkbox+".checked");
	if (str == false) {
	return false;
	}
return true;
}


//check that str is not the same
function str_not_equal(str,equal) {
	if (str == equal) {
	return false;
	}
return true;
}

function containsNoHyperlink(str)
{
	//if(str.indexOf("<a href") != -1 || str.IndexOf("http://") != -1)
		//return false;
	return true;
}

//////////////////////
// COMMON FUNCTIONS //
//////////////////////

//remove common symbols in number fileds
function remove_number_symbols (str) {
str = _str_reg_exp_replace(str,",","");
str = _str_reg_exp_replace(str,"\\\.","");	//needs to have extra backslashes
str = _str_reg_exp_replace(str," ","");
str = _str_reg_exp_replace(str,"\-","");
return str;
}

//replace a symbol in a string (for backwards compatibility)
function _str_reg_exp_replace (str, find_value, replace_value) {
eval("var reg_expression = /"+find_value+"/g;");
str = str.replace(reg_expression,replace_value);
return str;
}

//remove white space
function trim (str) {
var re1 = /^\s*/;
var re2 = /\s*$/;
str = str.replace(re1,"");
str = str.replace(re2,"");
return str;
}
//lower case a string
function str_lower (str) {
var str = new String(str);
str = str.toLowerCase();
return str;
}


//remove duplicate array values
function array_dedup(array_value) {
var new_array = new Array();
var new_array_total = 0;

	//compare original array with a blank one
	for (var x = 0; x < array_value.length; x++) {
	var dedup = 0;

		for (var y = 0; y < new_array.length; y++) {
			
			if (array_value[x] == new_array[y]) {
			dedup++;
			}
		
		}
		
		//add to new array
		if (dedup == 0) {
		new_array[new_array_total] = array_value[x];
		new_array_total++;
		}
	
	}


return new_array;
}


//////////////////
// DOCUMENATION //
//////////////////
/*

VERIFICATION OPTIONS
-a 		= 	letters only (and spaces, but that's all)
-n 		=	numbers only
-e 		=	email address characters only

-t		=	Name fields (titles, cities etc.), no numbers allowed

-b 		=	check box field
-b1 		=	check box field, in a group, where at least one must be ticked

-h 		=	only alpha and numeric
-lX 		=	field must equal this length eg. firstname-10
-gX 		=	field must be greater than X number of characters
-sXXXXXX 	=	field cannot equal
-r 		=	field is a radio box

-o		=	this field OR another field

-k		= 	a big group of checkbox where only the starting name is the same eg. "category202"

-x		=	checks if an external variable is TRUE

-nh		=	no hyperlink in text

//United Kingdom
-p		= 	numbers only (or use -n), for phone number etc.
-pUK		=	phone number for UK
-dUK		=	phone area number for UK
-c 		= 	postal code (default -a)
-cUK		= 	post "c"ode UK
-cUK1		= 	post "c"ode for UK first part ie. "NW11" 9AB
-cUK2		= 	post "c"ode for UK second part ie. NW11 "9AB"
-mUK		=	mobile phone number

//Sweden
-uSE		=	swedish social number
-cSE		=	swedish post code
-pSE		= 	swedish phone number

//Danish
-n8		=	danish phone number
-n4		=	danish post code

//German
-cDE

//Norway
-cNO		=	norway post code
-pNO		=	norway phone number

//France
-n5		=	france post code
-pFR		=	france phone number






?		=	field is optional, but still needs to be validated if there is input





USAGE

<script language="JavaScript" type="text/javascript">
<!--

//create user arrays
var fields_required = new Array();
var fields_error_message = new Array();
var fields_redirect_focus = new Array();

//options
var opt_group_error_message = "yes";
var opt_dedup_error_messages = "yes";

//fields to check (in order)
fields_required[0] = "title";
fields_required[1] = "fname";
fields_required[2] = "lname";
fields_required[3] = "houseno";
fields_required[4] = "pn_code-cUK";
fields_required[5] = "day_phone_area-dUK";
fields_required[6] = "day_phone_number-pn";
fields_required[7] = "night_phone_area-dUK";
fields_required[8] = "night_phone_number-pn";
fields_required[9] = "email-e";
fields_required[10] = "replacemonth";
fields_required[11] = "replaceyear";
fields_required[12] = "td1day";
fields_required[13] = "td1month";
fields_required[14] = "td1year";
fields_required[15] = "td1time";
fields_required[16] = "td2day";
fields_required[17] = "td2month";
fields_required[18] = "td2year";
fields_required[19] = "td2time";


//error message to be displayed (in order)
fields_error_message[0] = "Please enter your title.";
fields_error_message[1] = "Please enter your first name.";
fields_error_message[2] = "Please enter your last name.";
fields_error_message[3] = "Please enter your house number.";
fields_error_message[4] = "Please enter your post code.";
fields_error_message[5] = "Please enter your daytime telephone number.";
fields_error_message[6] = "Please enter your daytime telephone number.";
fields_error_message[7] = "Please enter your nighttime telephone number.";
fields_error_message[8] = "Please enter your nighttime telephone number.";
fields_error_message[9] = "Please enter your email address.";
fields_error_message[10] = "Please enter your replacement date.";
fields_error_message[11] = "Please enter your replacement date.";
fields_error_message[12] = "Please enter your test drive 1 date.";
fields_error_message[13] = "Please enter your test drive 1 date.";
fields_error_message[14] = "Please enter your test drive 1 date.";
fields_error_message[15] = "Please enter your test drive 1 date.";
fields_error_message[16] = "Please enter your test drive 2 date.";
fields_error_message[17] = "Please enter your test drive 2 date.";
fields_error_message[18] = "Please enter your test drive 2 date.";
fields_error_message[19] = "Please enter your test drive 2 date.";


fields_redirect_focus

//-->
</script>
<script language="JavaScript" src="form_verify.js" type="text/javascript"></script>

<form method="get" action="" onSubmit="return form_verify(this)"






PROBLEMS WITH USING THIS CODE:
1. Form names cannot contain a "-" (which they shouldn't anyway for javascript reasons, this also includes spaces etc.)

2. form must have a "name"






*/
//-->
