function validate($fields) {	var $errors = [];	var $focus;	for(var $i = 0; $i < $fields.length; $i ++) {		var $field = $fields[$i];		switch($field.type) {			case "checkboxes":			$field.element = document.form[$field.field + "[]"];			break;			case "fck":			$field.element = $field.field;			break;			default:			$field.element = document.form[$field.field];			break;		}		if(elementVisible($field)) {			var $valid = true;			switch($field.type) {				case "text":				if($field.required && !validateText($field.element)) {					$errors.push($field.title + " is required");					$valid = false;				}				break;				case "number":				if(validateText($field.element)) {					if(!validateNumber($field.element)) {						$errors.push($field.title + " must contain only numbers");						$valid = false;					}				} else if($field.required) {					$errors.push($field.title + " is required");					$valid = false;				}				break;				case "float":				if(validateText($field.element)) {					if(!validateFloat($field.element)) {						$errors.push($field.title + " must be a numeric value");						$valid = false;					}				} else if($field.required) {					$errors.push($field.title + " is required");					$valid = false;				}				break;				case "email":				if(validateText($field.element)) {					if(!validateEmail($field.element)) {						$errors.push($field.title + " is invalid, please make sure this is correct and you have access to this account as your tickets are sent to you via email.");						$valid = false;					}				} else if($field.required) {					$errors.push($field.title + " is required. Please make sure this is entered correctly, and you have access to this account as your tickets are sent to you via email.");					$valid = false;				}				break;				case "reenter":				if(!validateReentry($field.element, $field.source)) {					$errors.push($field.title + " do not match");					$valid = false;				}				break;				case "checkbox":				if(!validateCheckbox($field.element)) {					$errors.push($field.error);					$valid = false;				}				break;				case "checkboxes":				if(!validateRadio($field.element)) {					$errors.push($field.error);					$valid = false;				}				break;				case "radio":				if(!validateRadio($field.element)) {					$errors.push($field.title + " is required");					$valid = false;				}				break;				case "image":				if(validateText($field.element)) {					if(!validateImage($field.element)) {						$errors.push($field.title + " is an invalid file format");						$valid = false;					}				} else if($field.required) {					$errors.push($field.title + " is required");					$valid = false;				}				break;				case "fck":				if($field.required && !validateFCK(FCKeditorAPI.GetInstance($field.element))) {					$errors.push($field.title + " is required");					$valid = false;				}				break;			}			if(!$valid && !$focus) $focus = $field;		}	}	var $error = "";	if($errors.length > 0) {		if($errors.length > 1) {			$error += "Please correct the following errors.  This information is included on your tickets and you may need to verfiy this information at the cinema so please ensure it is complete and correct:\n";		} else {			$error += "Please correct the following error:\n";		}		for(var $i = 0; $i < $errors.length; $i ++) {			$error += "- " + $errors[$i] + "\n";		}		alert($error);		switch($focus.type) {			case "text":			$focus.element.focus();			break;			case "number":			$focus.element.focus();			break;			case "float":			$focus.element.focus();			break;			case "email":			$focus.element.focus();			break;			case "reentry":			$focus.element.focus();			break;			case "image":			$focus.element.focus();			break;			case "fck":			FCKeditorAPI.GetInstance($focus.element).Focus();			break;		}		return false;	} else {		document.form.submit();		return true;	}}function validateText($field) {	return($field.value != "");}function validateNumber($field) {	return(/^[0-9\s]+$/.test($field.value));}function validateFloat($field) {	return(/^[0-9]*(\.[0-9]+)?$/.test($field.value));}function validateEmail($field) {	return(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test($field.value));}function validateReentry($field, $source) {	return($field.value == document.form[$source].value);}function validateCheckbox($field) {	return($field.checked);}function validateRadio($field) {	$valid = false;	for(var $i = 0; $i < $field.length; $i ++) {		if($field[$i].checked) {			$valid = true;			break;		}	}	return $valid;}function validateImage($field) {	var $valid = ["gif", "jpg", "png"];	var $extension = $field.value.split(".").pop().toLowerCase();	for(var $i = 0; $i < $valid.length; $i ++) if($extension == $valid[$i]) return true;	return false;}function validateFCK($field) {	return($field.GetXHTML(true) != "");}function checkAll() {	for($i = 0; $i < document.form.length; $i ++) {		var $field = document.form[$i];		if($field.type == "checkbox") {			$field.checked = document.form.all.checked;		}	}}function elementVisible($field) {	switch($field.type) {		case "checkboxes":		var $element = $field.element[0];		break;		case "fck":		var $element = document.getElementById($field.element);		break;		default:		var $element = $field.element;		break;	}	do {		if($element.style.display == "none") return false;		$element = $element.parentNode;	} while($element.tagName.toLowerCase() != "body");	return true;}
