function Init() {
  if (DOMFL.GetElm("firstname")) DOMFL.GetElm("firstname").focus();
	if (DOMFL.GetElm("form")) DOMFL.SetEvent(DOMFL.GetElm("form"), "submit", ValidateFields);
	InitTextCounters();
	InitCalendars();
}

function ValidateFields(e) {

  var form = document.createElement("div");

  var firstname = DOMFL.GetElm("firstname");
  var lastname = DOMFL.GetElm("lastname");
  var country = DOMFL.GetElm("country");
	var address = DOMFL.GetElm("address");
  var email = DOMFL.GetElm("email");
	var phone = DOMFL.GetElm("phone");
  var speakspanish_0 = DOMFL.GetElm("speakspanish_0");
  var speakspanish_1 = DOMFL.GetElm("speakspanish_1");
  var speakspanish_2 = DOMFL.GetElm("speakspanish_2");
  var speakspanish_3 = DOMFL.GetElm("speakspanish_3");
	var birthdate = DOMFL.GetElm("birthdate");
  var sex_m = DOMFL.GetElm("sex_m");
  var sex_f = DOMFL.GetElm("sex_f");
  var maritalstatus_s = DOMFL.GetElm("maritalstatus_s");
  var maritalstatus_m = DOMFL.GetElm("maritalstatus_m");
  var maritalstatus_sep = DOMFL.GetElm("maritalstatus_sep");
  var maritalstatus_d = DOMFL.GetElm("maritalstatus_d");
  var maritalstatus_w = DOMFL.GetElm("maritalstatus_w");
  var religion = DOMFL.GetElm("religion");
  var health = DOMFL.GetElm("health");
  var diet = DOMFL.GetElm("diet");
  var education_0 = DOMFL.GetElm("education_0");
  var education_1 = DOMFL.GetElm("education_1");
  var education_2 = DOMFL.GetElm("education_2");
  var education_3 = DOMFL.GetElm("education_3");
  var university = DOMFL.GetElm("university");
  var area = DOMFL.GetElm("area");
  var year = DOMFL.GetElm("year");
  var otherstudies = DOMFL.GetElm("otherstudies");
	var otherhobbies = DOMFL.GetElm("otherhobbies");
	var experience = DOMFL.GetElm("experience");
	var term_0 = DOMFL.GetElm("term_0");
	var term_1 = DOMFL.GetElm("term_1");
	var nazareth = DOMFL.GetElm("nazareth");
	var santaclara = DOMFL.GetElm("santaclara");
	var cardenalrodriguez = DOMFL.GetElm("cardenalrodriguez");
	var universidad = DOMFL.GetElm("universidad");
	var family = DOMFL.GetElm("family");
	var problem = DOMFL.GetElm("problem");
	var factors = DOMFL.GetElm("factors");
	var year2015 = DOMFL.GetElm("year2015");
	var ref1name = DOMFL.GetElm("ref1name");
	var ref1email = DOMFL.GetElm("ref1email");
	var ref2name = DOMFL.GetElm("ref2name");
	var ref2email = DOMFL.GetElm("ref2email");
	var ref3name = DOMFL.GetElm("ref3name");
	var ref3email = DOMFL.GetElm("ref3email");
	var misc = DOMFL.GetElm("misc");
  
  var email_regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var birth_regex = /^[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]$/;

	if (firstname.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su nombre."));
		form.appendChild(CustomTextField(firstname));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}
	
	if (lastname.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su apellido."));
		form.appendChild(CustomTextField(lastname));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}

	if (country.selectedIndex == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe escoger su país."));
		form.appendChild(CustomSelect(country));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetSelect));
    return;
	}

  if (address.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su dirección del correo actual."));
		form.appendChild(CustomTextField(address));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}
	
	if (email.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su correo electrónico."));
		form.appendChild(CustomTextField(email));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	} else if (!email.value.match(email_regex)) {
		DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe verificar su correo electrónico."));
		form.appendChild(CustomTextField(email));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}

	if (phone.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su numero de teléfono."));
		form.appendChild(CustomTextField(phone));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}
	
  if (!speakspanish_0.checked && !speakspanish_1.checked && !speakspanish_2.checked && !speakspanish_3.checked) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su maestría de español."));
		form.appendChild(CustomRadio(speakspanish_0));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetRadio));
    return;
	}

	if (birthdate.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su fecha de nacimiento."));
		form.appendChild(CustomDatePicker(birthdate));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetDatePicker));
    return;
	} else if (!birthdate.value.match(birth_regex)) {
		DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe verificar su fecha de nacimiento."));
		form.appendChild(CustomDatePicker(birthdate));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetDatePicker));
    return;
	}

	if (!sex_m.checked && !sex_f.checked) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su sexo."));
		form.appendChild(CustomRadio(sex_m));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetRadio));
    return;
	}
	
	if (!maritalstatus_s.checked && !maritalstatus_m.checked && !maritalstatus_sep.checked && !maritalstatus_d.checked && !maritalstatus_w.checked) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su estado civil."));
		form.appendChild(CustomRadio(maritalstatus_s));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetRadio));
    return;
	}
	
	if (religion.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar su afiliación religiosa."));
		form.appendChild(CustomTextField(religion));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}
	
	if (!education_0.checked && !education_1.checked && !education_2.checked && !education_3.checked) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su nivel completado de la educación."));
		form.appendChild(CustomRadio(education_0));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetRadio));
    return;
	}
	
	if (year.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe suministrar el año que se graduó de la escuela."));
		form.appendChild(CustomTextField(year));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
    return;
	}
	
	if (!education_0.checked) {

    if (university.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar el nombre de su universidad."));
			form.appendChild(CustomTextField(university));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}
		
		if (area.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar su campo de estudio durante la universidad."));
			form.appendChild(CustomTextField(area));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

	}
	
	if (otherstudies.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su descripción de otros estudios debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(otherstudies));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (otherhobbies.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe describir sus pasatiempos."));
		form.appendChild(CustomTextarea(otherhobbies));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (otherhobbies.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su descripción de pasatiempos debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(otherhobbies));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (experience.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe describir su experiencia previa de voluntario."));
		form.appendChild(CustomTextarea(experience));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (experience.value.length > 2000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su descripción de experiencia previa de voluntario debe ser menos de 2000 caracteres de largo."));
		form.appendChild(CustomTextarea(experience));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (!term_0.checked && !term_1.checked) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe especificar su disponibilidad."));
		form.appendChild(CustomRadio(term_0));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetRadio));
    return;
	}
	
	if (family.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe contestar esta pregunta: ¿qué piensan sus padres, su novia/novio, sus amigos, etc. de usted queriendo ofrecerse en Honduras?"));
		form.appendChild(CustomTextarea(family));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (family.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su respuesta debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(family));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (problem.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe contestar esta pregunta: describa un problema grave o un conflicto en su vida y cómo usted lo manejó."));
		form.appendChild(CustomTextarea(problem));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (problem.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su respuesta debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(problem));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (factors.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe contestar esta pregunta: ¿qué son tres (3) factores que son instrumentales en su querer para ofrecerse (los valores religiosos, personales o morales por ejemplo)?"));
		form.appendChild(CustomTextarea(factors));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (factors.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su respuesta debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(factors));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}
	
	if (year2015.value.length == 0) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Debe contestar esta pregunta: ¿puede describir usted lo que usted piensa o espera que su vida estará como en el año 2015?"));
		form.appendChild(CustomTextarea(year2015));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	} else if (year2015.value.length > 1000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Su respuesta debe ser menos de 1000 caracteres de largo."));
		form.appendChild(CustomTextarea(year2015));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}

	if (ref1name.value.length != 0 || ref1email.value.length != 0) {

    if (ref1name.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar el nombre de su primera referencia."));
			form.appendChild(CustomMiniTextField(ref1name));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}
		
		if (ref1email.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar un correo electrónico para su primera referencia."));
			form.appendChild(CustomMiniTextField(ref1email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		} else if (!ref1email.value.match(email_regex)) {
			DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe verificar un correo electrónico para su primera referencia."));
			form.appendChild(CustomMiniTextField(ref1email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

	}
	
	if (ref2name.value.length != 0 || ref2email.value.length != 0) {

    if (ref2name.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar el nombre de su segunda referencia."));
			form.appendChild(CustomMiniTextField(ref2name));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

		if (ref2email.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar un correo electrónico para su segunda referencia."));
			form.appendChild(CustomMiniTextField(ref2email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		} else if (!ref2email.value.match(email_regex)) {
			DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe verificar un correo electrónico para su segunda referencia."));
			form.appendChild(CustomMiniTextField(ref2email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

	}
	
	if (ref3name.value.length != 0 || ref3email.value.length != 0) {

    if (ref3name.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar el nombre de su tercera referencia."));
			form.appendChild(CustomMiniTextField(ref3name));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

		if (ref3email.value.length == 0) {
	    DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe suministrar un correo electrónico para su tercera referencia."));
			form.appendChild(CustomMiniTextField(ref3email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		} else if (!ref3email.value.match(email_regex)) {
			DOMFL.StopEvent(e);
			form.appendChild(CustomMessage("Debe verificar un correo electrónico para su tercera referencia."));
			form.appendChild(CustomMiniTextField(ref3email));
	    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextField));
	    return;
		}

	}

  if (misc.value.length > 2000) {
    DOMFL.StopEvent(e);
		form.appendChild(CustomMessage("Sus comentarios debe ser menos de 2000 caracteres de largo."));
		form.appendChild(CustomTextarea(misc));
    DOMFL.ShowModalWindow(CustomForm(form, false, SetTextarea));
    return;
	}

}

function InitTextCounters() {
	var textareas = DOMFL.GetElmsByTag("textarea", DOMFL.GetElm("mainarea"));
	for (var i = textareas.length - 1; i >= 0; i--) {
		if (!isNaN(parseInt(textareas[i].className, 10))) {
	    var l = DOMFL.GetElmsByTag("label", textareas[i].parentNode)[0];
	    var count = document.createElement("span");
			count.id = textareas[i].id + "_count";
			count.appendChild(DOMFL.Text(" (" + textareas[i].value.length + "/" + textareas[i].className + " caracteres)"));
	    l.appendChild(count);
	    DOMFL.SetEvent(textareas[i], "keyup", TextCounter);

		}
	}
}

function TextCounter(e) {
	var textarea = DOMFL.GetEventElm(e);
	var count = DOMFL.GetElm(textarea.id + "_count");
	if (count) {
		count.replaceChild(DOMFL.Text(" (" + textarea.value.length + "/" + textarea.className + " caracteres)"), count.childNodes[0]);
	}
}

function InitCalendars() {
	var cals = DOMFL.GetElmsByClass("calendar", "input", DOMFL.GetElm("mainarea"));
	for (var i = cals.length - 1; i >= 0; i--) DOMFL.SetCalendar(cals[i]);
}

DOMFL.RunWhenReady(Init);