function emptyElement(target) {
	while (target.hasChildNodes()) {
		target.removeChild(target.firstChild);
	}
}
Array.prototype.indexOf = function(obj, start) {
     for (var i = (start || 0), j = this.length; i < j; i++) {
         if (this[i] === obj) { return i; }
     }
     return -1;
}

//Recursively search through the given object's parents until a <form> is found, or false if the object is not inside a <form>
function findParentForm(object) {
	var parent = object.parentNode;
	if (parent.nodeName.toLowerCase() == "form") {
		return (parent);
	} else if (parent.nodeName.toLowerCase() == "body") {
		return false;
	} else {
		return (findParentForm(parent));
	}
}

//Validate a single form field
function validate(field) {
	var type = field.nodeName.toLowerCase();
	var test = field.getAttribute("test");
	var passed = false;
	
	switch (type) {
		case "input":
			if (test == "match") {
				//Make sure the value of this field matches the specified comparison field
				var comparison = document.getElementById(field.getAttribute("field")).value;
				passed = (field.value == comparison ? true : false);
			} else {
				//Make sure this field has a value
				passed = (field.value.length > 0 ? true : false);
			}
		break;
		case "select":
			passed = (field.value != "" ? true : false);
		break;
	}
	
	var target = document.getElementById("status_" + field.getAttribute("name"));
	emptyElement(target);
	
	var img = document.createElement("img");
	img.setAttribute("src","/wp-content/themes/twentyeleven/images/custom/" + (passed ? "success" : "error") + ".png");
	img.setAttribute("align","absmiddle");
	img.setAttribute("width","16");
	img.setAttribute("height","16");
	if (!passed) {
		img.setAttribute("title",field.getAttribute("error"));
	}
	target.appendChild(img);
}

//Validate an entire form (called from the button that would 'submit' the form)
function validateForm(object) {
	var form = findParentForm(object);
	
	var errors = new Array();
	var targets = new Array();
	
	var elements = form.getElementsByTagName("*");
	for (i = 0; i < elements.length; i++) {
		if (elements[i].getAttribute("error")) {
			
			
			targets.push(elements[i]);
			
			var type = elements[i].nodeName.toLowerCase();
			var test = elements[i].getAttribute("test");
			var name = elements[i].getAttribute("name");
			switch (type) {
				case "input":
					if (test == "match") {
						//Make sure the value of this field matches the specified comparison field
						var comparison = document.getElementById(elements[i].getAttribute("field")).value;
						if (elements[i].value != comparison) {
							errors.push(name);
						}
					} else {
						//Make sure this field has a value
						if (elements[i].value.length == 0) {
							errors.push(name);
						}
					}
				break;
				case "select":
					if (elements[i].value == "") {
						errors.push(name);
					}
				break;
			}
		}
	}
	if (errors.length == 0) {
		form.submit();
	} else {
		for (j = 0; j < targets.length; j++) {
			var name = targets[j].getAttribute("name");
			var passed = (errors.indexOf(name) == -1 ? true : false);
			
			var target = document.getElementById("status_" + name);
			emptyElement(target);
	
			var img = document.createElement("img");
			img.setAttribute("src","/wp-content/themes/twentyeleven/images/custom/" + (passed ? "success" : "error") + ".png");
			img.setAttribute("align","absmiddle");
			img.setAttribute("width","16");
			img.setAttribute("height","16");
			if (!passed) {
				
				img.setAttribute("title",targets[j].getAttribute("error"));
			}
			target.appendChild(img);
		}
	}
}
