// JavaScript Document
var	elements = new Array();

function addElement(form, name, type, label, minLen, maxLen, format) {
	elements.push(new Element(form, name, type, label, minLen, maxLen, format));
}
	
function clearElements(){
	elements = new Array();	
}

function Element(form, name, type, label, minLen, maxLen, format) {
	this.form	= form;
	this.name 	= name;
	this.type	= type;
	this.label	= label;
	this.minLen	= minLen;
	this.maxLen	= maxLen;
	this.format	= format;
}

function validateForm(form) {
	var	result	= false;
	var	errors	= null;

	errors = validateElements(elements, form);

	if (errors) {
		drawError(errors);
	} else {
		result = true;
	}

	return result;
}

function validateElements(elements, form) {
	var	errors			= "";
	var	formatError		= false;
	var	e				= null;
	var	formValue		= null;
	var	checkFound		= false;
	var	selectionCount	= 0;
	var	selectedIndex	= null;

	for (i = 0; i < elements.length; i++) {
		e 				= elements[i];
		checkFound		= false;
		formatError		= false;
		selectionCount	= 0;
		selectedIndex	= null;

		if (e.form == form.name) {	
			formValue	= new String(eval("form." + e.name + ".value"));
			formValue = formValue.trim();
			if (e.type == "text") {
				if (e.minLen && formValue.length < e.minLen) {
					if (e.minLen == 1) {
						errors += e.label + " is required\n";
					} else {
						errors += e.label + " must contain " + e.minLen + " characters minimum\n";
					}
				} else if (e.maxLen && formValue.length > e.maxLen) {
					errors += e.label + " must contain " + e.maxLen + " characters maximum\n";
				} else if (e.format) {
					/*for (j = 0; (j < formValue.length && !formatError); j++) {
						if ((e.format.charAt(j) == "#" && isNaN(formValue.charAt(j)))
							|| (e.format.charAt(j) == "/" && formValue.charAt(j) != "/")
							|| (e.format.charAt(j) == "@" && formValue.charAt(j) != "@")
							|| (e.format.charAt(j) == "." && formValue.charAt(j) != ".")
							|| (e.format.charAt(j) == "-" && formValue.charAt(j) != "-")
							|| (e.format.charAt(j) == "A" && !isNaN(formValue.charAt(j)))) {
							formatError = true;
						}
					}
					
					if (formatError) {
						errors += e.label + " must be formatted as " + e.format + "\n";
					}*/
					regExp = new RegExp(e.format);
					if (!formValue.match(regExp)) {
						errors += e.label + " contains invalid formatting\n";
					}
				}
			} else if (e.type == "radio") {
				if(eval("form." + e.name + ".length") == null){
					if(eval("form." + e.name + ".checked")) checkFound = true;
				}else{
					for (j = 0; (j < eval("form." + e.name + ".length") && !checkFound); j++) {
						if (eval("form." + e.name + "[j].checked")) {
							checkFound = true;
						}
					}
				}
				
				if (!checkFound) {
					errors += e.label + " must have a selection\n";
				}
			} else if (e.type == "list") {
				for (j = 0; j < eval("form." + e.name + ".length"); j++) {
					if (eval("form." + e.name + "[j].selected")) {
						selectionCount++;
					}
				}
				
				if (e.minLen && selectionCount < e.minLen) {
					errors += e.label + " must have a minimum of " + e.minLen + " selections\n";
				} else if (e.maxLen && selectionCount > e.maxLen) {
					errors += e.label + " must have selections\n";
				}			
			} else if (e.type == "menu") {
				selectedIndex = eval("form." + e.name + ".selectedIndex");
				
				if (!eval("form." + e.name + ".options[selectedIndex].value")) {
					errors += e.label + " must have a valid selection\n";
				}
			} else if (e.type == "checkbox") {
				if(eval("form." + e.name + ".length") == null){
					if(eval("form." + e.name + ".checked")) selectionCount++;
				}else{
					for (j = 0; j < eval("form." + e.name + ".length"); j++) {
						if (eval("form." + e.name + "[j].checked")) {
							selectionCount++;
						}
					}
				}
				
				if (e.minLen && selectionCount < e.minLen) {
					errors += e.label + " must have a minimum of " + e.minLen + " selections checked\n";	
				} else if (e.maxLen && selectionCount > e.maxLen) {
					errors += e.label + " must have a maximum of " + e.maxLen + " selections checked\n";
				}
			}
		}
	}
	
	return errors;
}

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}