/*
-----------------------------------------------
kathyjudge.com
Script: vdwVal.js
Author: Ben Glassman
Organization: Vermont Design Works
Created: 29 Sept 2008
----------------------------------------------- */

vdwVal = {
	error_header: 'The following errors occurred',
	warningClass: 'error',
	validation:function(e) {
		var form = vdwDOM.getTarget(e);
		required = vdwDOM.getElementsByClassName(form, '*', '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");
						vdwVal.setErrorClass(input, true);
					} else {
						vdwVal.setErrorClass(input, false);
					}
					if (required[i].className.indexOf('number') != '-1' && input.value != '') {
						if (!vdwVal.valNumber(input.value)) {
							errors.push(label + ' must be a positive number');
							vdwVal.setErrorClass(input, true);
						} else {
							vdwVal.setErrorClass(input, false);
						}
					}
					if (required[i].className.indexOf('currency') != '-1' && input.value != '') {
						if (!vdwVal.valCurrency(input.value)) {
							errors.push(label + ' must be a positive number');
							vdwVal.setErrorClass(input, true);
						} else {
							vdwVal.setErrorClass(input, false);
						}
					}
					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");
								vdwVal.setErrorClass(input, true);
							} else {
								vdwVal.setErrorClass(input, false);
							}
						}
					}	
					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 != "") {
							errors.push(cc_valid);
							vdwVal.setErrorClass(input, true);
						} else {
							vdwVal.setErrorClass(input, false);
						}		
					}
					break;
					case "radio":
					label = vdwUtil.trimString(vdwVal.getRadioLabel(required[i]).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");
					vdwVal.setErrorClass(input, true);
				} else {
					vdwVal.setErrorClass(input, false);
				}
			}
		}
		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;
	},
	valNumber:function(str) {
		if (isNaN(str) || str <= 0) {
			return false;
		} else {
			return true;
		}
	},
	valCurrency:function(value) {
		// Remove commas and dollar signs
		var tmp = value.replace(/\$/g, '');
		tmp = tmp.replace(/,/g, '');
		if (tmp == '' || !vdwVal.valNumber(tmp)) {
			return false;
		} else {
			return true;
		}
	},
	checkEmail:function(myForm) {
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myForm)){
			return (true)
		}
		return (false)
	},
	displayErrors:function(errors, e) {
		var form = vdwDOM.getTarget(e);
		if (errors.length != 0) {
			if (document.getElementById('error_container')) {
				form.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);
			form.insertBefore(error_container, form.firstChild);
			vdwUtil.fadeUp(error_container, 255, 0, 0);
			var anchor = '#' + form.id;
			if (window.location.href.indexOf(anchor) == -1) {
				window.location = window.location + anchor;
			} else {
				var url = window.location.href;
				url = url.slice(0,url.indexOf(anchor));
				window.location = url + anchor;
			}
			vdwDOM.cancelClick(e);
			return false;
		} else {
			return true;
		}	
	},
	errorsToString:function(errors, e) {
		var errorMsg = vdwVal.error_header + '\n';
		for (var i = 0; i < errors.length; i++) {
			errorMsg += errors[i] + '\n';
		}
		vdwDOM.cancelClick(e);
		return errorMsg;		
	},
	setErrorClass:function(input, error) {
		var hasErrorClass = (input.className.indexOf(vdwVal.warningClass) == -1) ? false : true;
		if (error) {
			if (!hasErrorClass) {
				vdwDOM.addClass(input, vdwVal.warningClass);
			}
		} else {
			vdwDOM.removeClass(input, vdwVal.warningClass);
		}
	},
	getRadioLabel:function(parent) {
		if (parent.getElementsByTagName('p')[0]) {
			return vdwDOM.firstChild(parent.getElementsByTagName('p')[0], 3);
		} else if (parent.parentNode.getElementsByTagName('legend')[0]) {
			return vdwDOM.firstChild(parent.parentNode.getElementsByTagName('legend')[0], 3);
		} else if (parent.parentNode.parentNode.getElementsByTagName('legend')[0]) {
			return vdwDOM.firstChild(parent.parentNode.parentNode.getElementsByTagName('legend')[0], 3);
		}
	}
}

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 errors = vdwVal.validation(e);
				vdwVal.displayErrors(errors, e);
			}, false);
		}
	}
	
	/* Any additional validation
	if (document.getElementById('employment_application_form')) {
		vdwDOM.addEvent(document.getElementById('employment_application_form'), 'submit', function(e) {
			var errors = vdwVal.validation(e);
			vdwVal.displayErrors(errors, e);
		}, false);
	}
	*/
	
}, false);
