	function sendform(frmname,frmcontain,frmresult,frmwait,suffix) {

		$(frmresult).innerHTML = '';

		if (suffix != '') {
			suffix = '_' + suffix;
		}

		var alertText = '';
		var arrErrors = new Array();
		
		if ($('validate_required'+suffix).value != '') {
			var arrRequired = $('validate_required'+suffix).value.split(" ");	
			for(i=0;i<arrRequired.length;i++) {
				var name = arrRequired[i];
				if ($(name).value == '') {
					name = name.replace('frm_','');
					name = name.replace(/_/g,' ');
					var isFound = 0;
					for (j=0; j<arrErrors.length; j++) {
						if (arrErrors[j] == name) {
							isFound = 1;
							break;
						}
					}
					if (isFound == 0) {
						arrErrors.push(name)
					}
				}
			}
		}

		if ($('validate_dates'+suffix).value != '') {
			var arrDates = $('validate_dates'+suffix).value.split(" ");
			for(i=0;i<arrDates.length;i++) {
				var name = arrDates[i];
				if (isDate($(name).value) == false) {
					name = name.replace('frm_','');
					name = name.replace(/_/g,' ');
					var isFound = 0;
					for (j=0; j<arrErrors.length; j++) {
						if (arrErrors[j] == name) {
							isFound = 1;
							break;
						}
					}
					if (isFound == 0) {
						arrErrors.push(name)
					}
				}
			}
		}
		
		if ($('validate_emails'+suffix).value != '') {
			var arrEmails = $('validate_emails'+suffix).value.split(" ");
			for(i=0;i<arrEmails.length;i++) {
				var name = arrEmails[i];
				if ($(name).value != '') { // If the email is empty that's okay, as it may not be required.
					if (CheckEmail($(name).value) == false) {
						name = name.replace('frm_','');
						name = name.replace(/_/g,' ');
						var isFound = 0;
						for (j=0; j<arrErrors.length; j++) {
							if (arrErrors[j] == name) {
								isFound = 1;
								break;
							}
						}
						if (isFound == 0) {
							arrErrors.push(name)
						}
					}
				}
			}
		}
		
		for (i=0; i<arrErrors.length; i++) {
			alertText += '* ' + arrErrors[i] + ' \n';
		}
		
		
		
		if (alertText == '') {
			// Mootools 1.2 code.
			var options = {};
			$(frmname).getElements('input, textarea, select').each(function(el){
				var name = el.name;
				var value = el.get('value').stripScripts(false);;
				options[name] = value;
			});
			
			var request = new Request.JSON({
				url: $(frmname).get('action'),
				data: options,
				onRequest: function(instance) {
					$(frmcontain).style.display = 'none';
					$(frmwait).style.display = 'block';
				},
				onComplete: function(jsonObj) {
					$(frmwait).style.display = 'none';
					formResult(jsonObj);
				},
				onFailure: function (instance) {
					$(frmwait).style.display = 'none';
					formFail('Sorry your details could not be sent right now.',$('FormName').value);
				}
			}).send();
			
		} else {
			alert('Please check the following:\n'+alertText);
		}
	}
	
	function CheckEmail(strData) {
		if (strData == "") {
			return false;
		} else {
			var posAt = strData.indexOf("@")
			var strName = strData.substring(0, posAt)
			var strDomain = strData.substring(posAt+1, strData.length)
			var dotPos = strDomain.indexOf(".")
			var strExt = strDomain.substring(dotPos+1,strDomain.length)
			var strDomain = strDomain.substring(0,dotPos)
			if (strName=="" || strDomain=="" || strExt=="") {
				return false;
			} else {
				return true;
			}
		}
	}
	
	function addKeyChecks() {
		// Will automatically add code to limit keyboard entry on input boxes that have the designated class types.
		
		// Numbers only
		$(document.body).getElements('input.validN').addEvent('keydown', function(event){
				//alert(event.code); // Returns the lowercase letter pressed.
				if ((event.code > 47 && event.code < 58) || event.code == 9 || event.key == 'backspace' || event.key == 'space' || event.key == 'left' || event.key == 'right' || event.key == 'delete' || event.shift || event.control) {
					return true;
				} else {
					return false;
				}
		});

		// Alphanumeric + some specials only
		$(document.body).getElements('input.validAN').addEvent('keydown', function(event){
				//alert(event.code); // Returns the lowercase letter pressed.
				// Stop single quotes and double quotes and the slashes.
				if (event.code != 192 && event.code != 50 && event.code != 220 && event.code != 191) {
					return true;
				} else {
					if (event.code == 192 && event.shift) {
						return true;
					} else if (event.code === 50 && event.shift == false) {
						return true;
					} else {
						return false;
					}
				}
		});
	}