function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function focusLabels() {
	if (!document.getElementsByTagName) return false;
	var labels = document.getElementsByTagName("label");
	for (var i=0; i<labels.length; i++) {
		if (!labels[i].getAttribute("for")) continue;
		labels[i].onclick = function() {
			var id = this.getAttribute("for");
			if (!document.getElementById(id)) return false;
			var element = document.getElementById(id);
			element.focus();
		}
	}
}

function resetFields(whichform) {
  for (var i=0; i<whichform.elements.length; i++) {
    var element = whichform.elements[i];
    if (element.type == "submit") continue;
    if (!element.defaultValue) continue;
    element.onfocus = function() {
    if (this.value == this.defaultValue) {
      this.value = "";
     }
    }
    element.onblur = function() {
      if (this.value == "") {
        this.value = this.defaultValue;
      }
    }
  }
}

function prepareForms() {
  for (var i=0; i<document.forms.length; i++) {
    var thisform = document.forms[i];
    resetFields(thisform);
	thisform.onsubmit = function() {
		return validateForm(this);
	}
  }
}

function isFilled(field) {
	if (field.value.length < 1 || field.value == field.defaultValue) {
		return false;
	} else {
		return true;
	}
}

function isEmail(field) {
	if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1) {
		return false;
	} else {
		return true;
	}
}
function validateForm(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		if (element.className.indexOf("required") != -1) {
			
			
			if (!isFilled(element)) {
				
				if (element.name == "street1") {
					alert("Please fill in the street address 1 field.");
					return false;
				} 
				
				if (element.name == "postalcode") {
					alert("Please fill in the postal code field.");
					return false;
				}
				
				if (element.name == "phone1") {
					alert("Please provide a phone number.");
					return false;
				}
				
				if (element.name == "file1") {
					alert("Please select a curriculum vitae file to upload.");
					return false;
				}
				
				if (element.name == "file2") {
					alert("Please select a project description file to upload.");
					return false;
				}
				
				if (element.name == "reference1_name") {
					alert("Please provide the name of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_affiliation") {
					alert("Please provide the affiliation of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_title") {
					alert("Please provide the title of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_street1") {
					alert("Please provide the street address of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_city") {
					alert("Please provide the city of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_state") {
					alert("Please choose the state of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_postalcode") {
					alert("Please provide the postal code of your first reference.");
					return false;
				}
				
				if (element.name == "reference1_country") {
					alert("Please provide a country for your first reference.");
					return false;
				}
				
				if (element.name == "reference1_email") {
					alert("Please provide an e-mail address for your first reference.");
					return false;
				}
				
				if (element.name == "reference1_phone") {
					alert("Please provide a phone number for your first reference.");
					return false;
				}
				
				
				if (element.name == "reference2_name") {
					alert("Please provide the name of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_affiliation") {
					alert("Please provide the affiliation of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_title") {
					alert("Please provide the title of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_street1") {
					alert("Please provide the street address of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_city") {
					alert("Please provide the city of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_state") {
					alert("Please choose the state of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_postalcode") {
					alert("Please provide the postal code of your second reference.");
					return false;
				}
				
				if (element.name == "reference2_country") {
					alert("Please provide a country for your second reference.");
					return false;
				}
				
				if (element.name == "reference2_email") {
					alert("Please provide an e-mail address for your second reference.");
					return false;
				}
				
				if (element.name == "reference2_phone") {
					alert("Please provide a phone number for your second reference.");
					return false;
				}
				
				
				else {
				alert("Please fill in the "+element.name.replace(/_/, " ")+" field.");
				return false;

				}
			
			}
		}
		if (element.className.indexOf("email") != -1) {
			if (!isEmail(element)) {
				
				if (element.name == "reference1_email") {
					alert("Please provide a valid e-mail address for your first reference.");
					return false;
				} 
				
				
				if (element.name == "reference2_email") {
					alert("Please provide a valid e-mail address for your second reference.");
					return false;
				} else {
				
				alert ("The "+element.name+" field must be a valid e-mail address.");
				return false;
			}
			}
		}
	}
	return true;
}
addLoadEvent(prepareForms);
addLoadEvent(focusLabels);
