function getElementsByClass (searchClass, node, tag) {
	var classElements = new Array();
	if (node == null) {
		node = document;
	}
	if (tag == null) {
		tag = '*';
	}
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if (pattern.test(els[i].className)) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function selected_opt (select_el) {
   for (i = 0; i < select_el.length; i++) {
      if (select_el.options[i].selected) {
         var selected = select_el.options[i];
      }
   }
   return selected;
}

function validate_email (email) {
   var regex = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
   return regex.test(email);
}

function validate (form) {
   var not_nulls = getElementsByClass("not-null", form);
   var not_nulls_length = not_nulls.length;
   var submit_button = getElementsByClass("submit_button", form)[0];
   var submit_button_value = submit_button.value;
   submit_button.disabled = true;
   submit_button.value = "Aguarde...";
   var msginfo = "";
   var foco = new Array();
   for (i = 0; i < not_nulls_length; i++) {
      var input = not_nulls[i];
      if (input.nodeName == "INPUT" || input.nodeName == "input" || input.nodeName == "TEXTAREA" || input.nodeName == "textarea") {
         if (input.value == "") {
            msginfo += "\n     -  "+input.title;
            foco.push(input);
         }
         else {
            var email = new RegExp('(^|\\s)email(\\s|$)');
            if (email.test(input.className) && !validate_email(input.value)) {
               msginfo += "\n     -  O e-mail informado parece não estar correto.";
               foco.push(input);
            }
         }
      }
      if (input.nodeName == "SELECT" || input.nodeName == "select") {
         var selected = selected_opt(input);
         if (selected.value == "na" || selected.value == "") {
            msginfo += "\n     -  "+input.title;
            foco.push(input);
         }
      }
   }
   if (msginfo != "") {
      msginfo = "Preencha os campos a seguir e tente novamente"+msginfo;
      alert(msginfo);
      foco[0].focus();
      submit_button.value = submit_button_value;
      submit_button.disabled = false;
      return false;
   }
   else {
      submit_button.value = submit_button_value;
      submit_button.disabled = false;
      return true;
   }
}