vdwVal = {
	error_header: 'The following errors occurred',
	warningClass: 'error',
	validation:function(which) {
		required = vdwDOM.getElementsByClassName(which, '*', 'required');
		var errors = new Array();
		for (var i = 0; i < required.length; i++) {
			var input;
			var label;
			if (required[i].getElementsByTagName("input")[0]) {
				input = required[i].getElementsByTagName("input")[0];
				switch (input.getAttribute("type")) {
					case "text":
					if (required[i].getElementsByTagName("label")[0].firstChild.nodeType == 3) {
						label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.nodeValue);
					} else if (required[i].getElementsByTagName("label")[0].firstChild.firstChild.nodeType == 3) {
						label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.firstChild.nodeValue);
					}
					if (vdwVal.missingContent(input, label) != "") {
						errors.push(vdwVal.missingContent(input, label) + " is required");
					}
					if (required[i].className.indexOf('number') != '-1' && input.value != '') {
						if (isNaN(input.value) || input.value <= 0) {
							errors.push(label + ' must be a positive number');
						}
					}		
					if (required[i].className.indexOf("email") != "-1") {
						if (input.value != ""){
							var email = vdwVal.checkEmail(input.value);
							if (email == false){
								errors.push("Invalid Email Address\n");
								if (input.className.indexOf(vdwVal.warningClass) == -1) {
									vdwDOM.addClass(input, vdwVal.warningClass);
								}
							} else {
								vdwDOM.removeClass(input, vdwVal.warningClass);
							}
						}
					}	
					if (input.id == "cc_number" && input.value != "") {
						var cc_number = document.getElementById('cc_number');
						var cc_type = document.getElementById('cc_type');
						var cc_month = document.getElementById('cc_month');
						var cc_year = document.getElementById('cc_year');
						cc_valid = validateCard(cc_number.value,cc_type.value,cc_month.value,cc_year.value);
						if (cc_valid != "") {
							if (cc_number.className.indexOf(vdwVal.warningClass) == -1) {
								vdwDOM.addClass(cc_number, vdwVal.warningClass);
							}
							errors.push(cc_valid);
						} else {
							vdwDOM.removeClass(cc_number, vdwVal.warningClass);
						}			
					}
					break;
					case "radio":
					//label = vdwUtil.trimString(required[i].getElementsByTagName("p")[0].firstChild.nodeValue);
					label = vdwUtil.trimString(required[i].parentNode.getElementsByTagName("legend")[0].firstChild.nodeValue);
					if (vdwVal.valRadio(required[i].getElementsByTagName("input"), label) != "") {
						errors.push(vdwVal.valRadio(required[i].getElementsByTagName("input"), label) + " is required");
					}
					break;
					case "checkbox":
					label = vdwUtil.trimString(required[i].getElementsByTagName("p")[0].firstChild.nodeValue);
					if (vdwVal.valCheckbox(required[i].getElementsByTagName("input"), label) != "") {
						errors.push(vdwVal.valCheckbox(required[i].getElementsByTagName("input"), label) + " is required");
					}
					break;
					case "password":
					if (required[i].getElementsByTagName("label")[0].firstChild.nodeType == 3) {
						label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.nodeValue);
					} else if (required[i].getElementsByTagName("label")[0].firstChild.firstChild.nodeType == 3) {
						label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.firstChild.nodeValue);
					}
					if (vdwVal.missingContent(input, label) != "") {
						errors.push(vdwVal.missingContent(input, label) + " is required");
					}					
					break;
				}
			} else if (required[i].getElementsByTagName("textarea")[0]) {
				input = required[i].getElementsByTagName("textarea")[0];
				label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.nodeValue);
				if (vdwVal.missingContent(input, label) != "") {
					errors.push(vdwVal.missingContent(input, label) + " is required");
					if (input.className.indexOf(vdwVal.warningClass) == -1) {
						vdwDOM.addClass(input, vdwVal.warningClass);
					}
				}
			} else if (required[i].getElementsByTagName("select")[0]) {
				input = required[i].getElementsByTagName("select")[0];
				label = vdwUtil.trimString(required[i].getElementsByTagName("label")[0].firstChild.nodeValue);
				if (vdwVal.missingContent(input, label) != "") {
					errors.push(vdwVal.missingContent(input, label) + " is required");
					if (input.className.indexOf(vdwVal.warningClass) == -1) {
						vdwDOM.addClass(input, vdwVal.warningClass);
					}
				}
			}
		}
		return errors;
	},
	missingContent:function(field, label) {
		var missing_empty = '';
		if (field.value == '') {
			missing_empty += label;
			if (field.className.indexOf(vdwVal.warningClass) == -1) {
				vdwDOM.addClass(field, vdwVal.warningClass);
			}
		} else {
			vdwDOM.removeClass(field, vdwVal.warningClass);
		}
		return missing_empty;
	},
	valRadio:function(fields, label) {
		var missing_empty = '';
		var checked = 0;
		for (var j = 0; j < fields.length; j++) {
			if (fields[j].checked) {
				checked = 1;
			}
		}
		if (!checked) {
			missing_empty += label;
		}
		return missing_empty;
	},
	valCheckbox:function(fields, label) {
		var missing_empty = '';
		var checked = 0;
		for (var j = 0; j < fields.length; j++) {
			if (fields[j].checked) {
				checked = 1;
			}
		}
		if (!checked) {
			missing_empty+= label;
		}
		return missing_empty;
	},
	checkEmail:function(myForm) {
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myForm)){
			return (true)
		}
		return (false)
	},
	valCurrency:function(value) {
		// Remove commas and dollar signs
		var tmp = value.replace(/\$/g, '');
		tmp = tmp.replace(/,/g, '');
		if (tmp == '' || isNaN(tmp) || tmp <= 0) {
			return false;
		} else {
			return true;
		}
	},
	displayErrors:function(errors, which) {
		if (errors.length != 0) {
			if (document.getElementById('error_container')) {
				which.removeChild(document.getElementById('error_container'));
			}
			var error_container = document.createElement('div');
			error_container.className = 'errors';
			error_container.id = 'error_container';
			var error_head = document.createElement('h3');
			var error_head_txt = document.createTextNode(vdwVal.error_header);
			error_head.appendChild(error_head_txt);
			error_container.appendChild(error_head);
			var error_list = document.createElement('ul');
			var error_list_items = new Array();
			for (var k = 0; k < errors.length; k++) {
				error_list_items[k] = document.createElement('li');
				error_list_items[k].appendChild(document.createTextNode(errors[k]));
				error_list.appendChild(error_list_items[k]);
			}
			error_container.appendChild(error_list);
			which.insertBefore(error_container, which.firstChild);
			vdwUtil.fadeUp(error_container, 255, 0, 0);
			if (window.location.href.indexOf('#error_container') == -1) {
				window.location = window.location + "#error_container";
			} else {
				var url = window.location.href;
				url = url.slice(0,url.indexOf('#error_container'));
				window.location = url + '#error_container';
			}		
			return false;
		} else {
			return true;
		}	
	},
	alertErrors:function(errors) {
		var errorMsg = vdwVal.error_header + '\n';
		for (var i = 0; i < errors.length; i++) {
			errorMsg += errors[i] + '\n';
		}
		return errorMsg;
	}
}

vdwDOM.addEvent(window, 'load', function() {

	// Attach the validation to the submit event of all forms with a class of 'validate'
	var forms = document.getElementsByTagName('form');
	for (var i = 0; i < forms.length; i++) {
		if (forms[i].className.indexOf('validate') != '-1') {
			vdwDOM.addEvent(forms[i], 'submit', function(e) {
				var target = vdwDOM.getTarget(e)
				var errors = vdwVal.validation(target);
				if (errors.length > 0) {
					vdwVal.displayErrors(errors, target);
					vdwDOM.cancelClick(e);
				} else {
					return true;
				}
			}, false);
		}
	}
		
	// Any forms that require special validation
	// Capital Campaign Donation
	if (document.getElementById('capital_campaign_donate')) {
		vdwDOM.addEvent(document.getElementById('capital_campaign_donate'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var cc_errors = vdwVal.validation(target);
			// If "Other Amount" is chosen, require the other amount text input
			if (document.getElementById('gift_amount_custom').checked) {
				if (!vdwVal.valCurrency(document.getElementById('gift_amount_other').value)) {
					cc_errors.push('You have selected "Other Amount" for your contribution. Please enter an amount.');
				}
			}
			// If "My Company will Match this donation" is chosen, require the company name
			if (document.getElementById('company_match').checked && document.getElementById('company_name').value == '') {
				cc_errors.push('You have selected "My company will match this gift". Please enter your company\'s name.');
			}			
			// If "Pledge in Installments" is chosen, require the ending year and the frequency
			if (document.getElementById('installments').checked) {
				if (document.getElementById('installment_ending_year').value == '' || isNaN(document.getElementById('installment_ending_year').value)) {
					cc_errors.push('You have selected "Pledge in Installments" for your contribution. Please enter an ending year.');
				}
				if (!document.getElementById('installment_frequency_quarterly').checked && !document.getElementById('installment_annually').checked && !document.getElementById('installment_semiannually').checked) {
					cc_errors.push('You have selected "Pledge in Installments" for your contribution. Please enter a frequency for your installments.');
				}
			}
			if (cc_errors.length > 0) {
				vdwVal.displayErrors(cc_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	// Alumni Profile Form
	if (document.getElementById('alumni_profile')) {
		vdwDOM.addEvent(document.getElementById('alumni_profile'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var ap_errors = vdwVal.validation(target);
			var passwd = document.getElementById('password');
			var password_confirm = document.getElementById('passwd_confirm');
			if (passwd.value != password_confirm.value) {
				ap_errors.push('Password and Confirm Password must match');
			}
			// Make sure they have filled out information for at least one set of years
			var start1 = document.getElementById('start_year1');
			var end1 = document.getElementById('end_year1');
			if (start1.value == '' || isNaN(start1.value) || end1.value == '' || isNaN(end1.value)) {
				ap_errors.push('Please fill out at least one 4 digit start year and 4 digit end year.');
			} else if (start1.value < 1939 || end1.value < 1939 ){
				ap_errors.push('Please enter a year of 1939 or later');
			}
			if (ap_errors.length > 0) {
				vdwVal.displayErrors(ap_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('profile_login')) {
		vdwDOM.addEvent(document.getElementById('profile_login'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var login_errors = vdwVal.validation(target);
			if (login_errors.length > 0) {
				alert(vdwVal.alertErrors(login_errors));
				vdwDOM.cancelClick(e);
			}
		}, false);
	}
	
	if (document.getElementById('search_alumni')) {
		vdwDOM.addEvent(document.getElementById('search_alumni'), 'submit', function(e) {
			var last_name = document.getElementById('last_name');
			var first_name = document.getElementById('first_name');
			var camp_nickname = document.getElementById('camp_nickname');
			var camp_attended = document.getElementById('camp_attended');
			var year_attended = document.getElementById('year_attended');
			var nameinfo = true;
			var campinfo = true;
			if ((last_name.value == '') && (first_name.value == '') && (camp_nickname.value == '')) {
				nameinfo = false;
			} 
			if ((camp_attended.selectedIndex == 0) || (year_attended.value == '')) {
				campinfo = false;
			}
			if (!nameinfo && !campinfo) {
				alert('Please enter a first name, last name or nickname or choose a camp and year attended');
				vdwDOM.cancelClick(e);
			}
		}, false);
	}
	
	if (document.getElementById('facilities_rental')) {
		vdwDOM.addEvent(document.getElementById('facilities_rental'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var fr_errors = vdwVal.validation(target);
			// If Special Services are requested, require explanation
			if (document.getElementById('services_special').checked) {
				if (document.getElementById('services_requested').value == '') {
					fr_errors.push('You have requested special services, please explain');
				}
			}
			if (fr_errors.length > 0) {
				vdwVal.displayErrors(fr_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('auction_donation')) {
		vdwDOM.addEvent(document.getElementById('auction_donation'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var ad_errors = vdwVal.validation(target);
			if (ad_errors.length > 0) {
				vdwVal.displayErrors(ad_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('bbq_signup')) {
		// Set the initial total to 0
		var total = document.getElementById('total');
		var numAdults = document.getElementById('number_adults');
		var numChildren = document.getElementById('number_children');
		total.value = vdwUtil.formatCurrency(0);

		// Array of attendant fields with costs and calctotals function
		var attendants = new Array([numAdults, 15]);
		function calcTotals(sourceArr, destination) {
			var ttl = 0;
			for (var i = sourceArr.length - 1; i > -1; i--) {
				if (sourceArr[i][0].value <= 0 || isNaN(sourceArr[i][0].value)) { continue; }
				ttl += sourceArr[i][0].value * sourceArr[i][1];
			}
			destination.value = (ttl > 0)?vdwUtil.formatCurrency(ttl):vdwUtil.formatCurrency(0);
		}
		
		// Attach calctotals to attendant fields
		vdwDOM.addEvent(numAdults, 'change', function() {
			calcTotals(attendants, total);
		}, false);
// 		vdwDOM.addEvent(numChildren, 'change', function() {
// 			calcTotals(attendants, total);
// 		}, false);
		
		vdwDOM.addEvent(document.getElementById('bbq_signup'), 'submit', function(e) {
			calcTotals(attendants, total);
			var target = vdwDOM.getTarget(e);
			var bbq_errors = vdwVal.validation(target);
			if (numAdults.value != '') {
				if (numAdults.value <= 0 || isNaN(numAdults.value)) {
					bbq_errors.push('Please enter a number greater than zero for Number of Adults');
				}
			}
// 			if (numChildren.value != '') {
// 				if (numChildren.value <= 0 || isNaN(numChildren.value)) {
// 					bbq_errors.push('Please enter a number greater than zero for Number of Children');
// 				}
// 			}
			if (bbq_errors.length > 0) {
				vdwVal.displayErrors(bbq_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('donate_form')) {
		vdwDOM.addEvent(document.getElementById('donate_form'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var donate_errors = vdwVal.validation(target);
			if (donate_errors.length > 0) {
				vdwVal.displayErrors(donate_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('newsletter_signup')) {
		vdwDOM.addEvent(document.getElementById('newsletter_signup'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var donate_errors = vdwVal.validation(target);
			if (donate_errors.length > 0) {
				vdwVal.displayErrors(donate_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('seasonal_application')) {
		vdwDOM.addEvent(document.getElementById('seasonal_application'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var app_errors = vdwVal.validation(target);
			if (document.getElementById('personal_statement').value == '') {
				app_errors.push('Personal Statement is required');
			}
			if (app_errors.length > 0) {
				vdwVal.displayErrors(app_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}
	
	if (document.getElementById('internship_application')) {
		vdwDOM.addEvent(document.getElementById('internship_application'), 'submit', function(e) {
			var target = vdwDOM.getTarget(e);
			var app_errors = vdwVal.validation(target);
			if (app_errors.length > 0) {
				vdwVal.displayErrors(app_errors, target);
				vdwDOM.cancelClick(e);
			} else {
				return true;
			}
		}, false);
	}

}, false);
