// JavaScript Document



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 validateForm(whichform) {
	// remove any error messages
	var spans = document.getElementsByTagName("span");
	for (var i=0; i<spans.length; i++) {
		if (spans[i].getAttribute("className") == "errorMsg") {
			spans[i].parentNode.removeChild(spans[i]);
			i--;
		}
	}
	//test mode
	if (whichform.className.indexOf("test") != -1) {
		if (!confirm("You are in test mode. Do you want to continue?")) return false;
	}
	var validated = true;
	var first_element = false;
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		if (element.className.indexOf("required") != -1) { //if this field is mandatory
			if (element.name.toLowerCase().indexOf("email") != -1) {
				if (whichform.className.indexOf("test") != -1) element.value = "Test@Value.com";
				if (!isEmail(element)) {
					createErrorMsg("Please complete, using a valid email address!", element);
					validated = false;
				}
			//radio buttons
			} else if (element.type == "radio") {
				if (whichform.className.indexOf("test") != -1) element.checked = "checked";
				var radiobuttons = (whichform[element.name]);
				if (!isRadioSelected(radiobuttons)) {
					createErrorMsg("Please choose one of the above options", element.parentNode.parentNode);
					validated = false;
				}
			} else if (element.type == "select-one" && element.className.indexOf(" date") != -1) {
				var selects = document.getElementById("date_select").getElementsByTagName("select");
				if (whichform.className.indexOf("test") != -1) {
					for (var j=0;j<selects.length;j++) {
						selects[j].selectedIndex = 1;	
					}
					
				}
				if(!isDateSelected(selects)) {
					createErrorMsg("Please complete the date of birth:", element.parentNode.parentNode);
					validated = false;
				}

			
			//call custom validation function and error messages
			/*} else if (condition) {
				if (!isFunction(element)) {
					createErrorMsg("", element);
					validated = false;
				}
			*/
						
				
			} else {
				//alert(element.name+": "+element.type);
				if (whichform.className.indexOf("test") != -1) element.value = "Test Value";
				if (!isFilled(element)) {
					createErrorMsg("Please complete the above", element);
					validated = false;
				}
			}
		if (!first_element && !validated) first_element = element;
		}
	}
	if (whichform.className.indexOf("test") != -1) {
		if (!confirm("Do you want to submit this form?")) return false;
	}
	//alert(document.forms[0].title_id.value);
	first_element.focus();
	return validated;
}


function createErrorMsg(msg, element) {
	var errorMsg = document.createElement("span");
	errorMsg.setAttribute("class","errorMsg");
	errorMsg.setAttribute("className","errorMsg");
	var emText = document.createTextNode(msg);
	errorMsg.appendChild(emText); 
	//element.parentNode.insertBefore(errorMsg,element);
	insertAfter(errorMsg,element);	
}

function isRadioSelected(radiobuttons) {
	myOption = -1;
	for (var j=radiobuttons.length-1; j > -1; j--) {
		//alert("loop");
		if (radiobuttons[j].checked) {
			myOption = j;
			j = -1;
		}
	}
	if (myOption == -1) {
		//alert("You must select a radio button");
		return false;
	} else {
		return true;	
	}

	//alert("You selected button number " + myOption + " which has a value of " + radiobuttons[myOption].value);	
}

function isDateSelected(selects) {
	for (var j=0; j<selects.length; j++) {
		
		if (selects[j].selectedIndex == 0) {
			//alert("wiibble");
			return false;
			break;
		}			
	}
	return true;	
}

function isFilled(field) {
  if (field.value.length < 1 || field.value == field.defaultValue) {
    return false;
  } else {
    return true;
  }
}


function isEmail(field) {
	var email = field.value;
	atPos = email.indexOf("@");
	stopPos = email.lastIndexOf(".");
	if (email == "" || email == field.defaultValue || atPos == -1 || stopPos == -1 || stopPos < atPos || stopPos - atPos == 1) {
		return false;
	} else {
		return true;
	}
}

function isKeyphrase(field) {
	var words = field.value.split(" ");
	if (words.length <= 1 || field.value == field.defaultValue) {
		return false;
	} else {
		return true;
	}
}

function setupTextAreas() {
	var textareas = document.getElementsByTagName("textarea");
 	//alert(textareas.length);
	for (var i=0; i<textareas.length; i++) {
		textareas[i].onkeyup = function() {
			//alert(this.value.length);
			if (this.value.length > this.getAttribute("maxlength")) {
				//alert("oi!");
				this.value = this.value.substr(0,this.value.length - 1);	
			}
		}
	}	
}

function prepareForms() {
	for (var i=0; i<document.forms.length; i++) {
		var thisform = document.forms[i];
    	//resetFields(thisform);
    	thisform.onsubmit = function() {
    	  	return validateForm(this);
    	}
  	}
	setupTextAreas();
	
}

addLoadEvent(prepareForms);