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 "numbertext":
				if($field.required && !validateNumberText($field.element)) {
					$errors.push($field.title + " is required");
					$valid = false;
				}
				break;
				case "dropdown":
				if($field.required && !validateDropdown($field.element)) {
					$errors.push($field.title + " is required");
					$valid = false;
				}
				break;
				case "password":
				if($field.required && !validatePassword($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");
						$valid = false;
					}
				} else if($field.required) {
					$errors.push($field.title + " is required");
					$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:\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":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "dropdown":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "numbertext":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "password":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "number":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "float":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "email":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "reentry":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "image":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			$focus.element.focus();
			break;
			case "fck":
			if($focus.hiddendiv)			
				makeTabVisible($focus.hiddendiv);
			FCKeditorAPI.GetInstance($focus.element).Focus();
			break;
		}
		return false;
	} else {
		return true;
	}
}

function validateText($field) {
	return(atLeastOneChar($field));
	return($field.value != "");
}
function validateDropdown($field) {
	return($field.value != "");
}

function validateNumberText($field) {
	return(atLeastOneInt($field));
	return($field.value != "");
}
function validatePassword($field) {
	ret1 = (atLeastOneChar($field));
	ret2 = (atLeastOneInt($field));
	
	if((ret1) && (ret2) && $field.value.length >= 6)
		return true;
	else
		return false;
}
function validateNumber($field) {
	return(atLeastOneInt($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 "radio":
		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;
}

function makeTabVisible(object) {
	for(i=1; i<=document.getElementById("totalTabs").value; i++) {
		if(("divTab" + i +"Link") == object + "Link") {
			document.getElementById("divTab" + i).style.display = "inline";
			document.getElementById("divTab" + i + "Link").className = "Selected";
		}
		else {	
			document.getElementById("divTab" + i).style.display = "none";
			document.getElementById("divTab" + i + "Link").className = "";
		}
	}
}


function atLeastOneChar($field){
var fieldContainsALetter = false;
var temp;
var blankValue = false;

if ($field.value.length > 0) {
	for (i=0; i < $field.value.length; i++){
		temp = $field.value.charAt(i);
		if(/[A-Za-z]/.test(temp)){
			fieldContainsALetter = true;
		}
	}
}
else {
	return false;
}

if (!(blankValue) && (fieldContainsALetter)){
	return true;
}
else {
	return false;
}
}

function atLeastOneInt($field){
var fieldContainsANumber = false;
var temp;
var blankValue = false;

if ($field.value.length > 0) {
	for (i=0; i < $field.value.length; i++){
		temp = $field.value.charAt(i);
		if(/[0-9]/.test(temp)){
			fieldContainsANumber = true;
		}
	}
}
else {
	return false;
}
if (fieldContainsANumber){
	return true;
}
else {
	return false;
}
}



