﻿// Uses the jQuery framework.
//
// Adds error messages and the CSS class "invalid" to form fields
// which have no valid input.


$(document).ready( function() {
	$("form#contact").submit( function() {
		var isValidForm = validateForm($(this));
		return isValidForm;
	});
	
	$("#contact input, #contact select, #contact textarea").blur( function() {
		checkValue($(this));
	});

});





/******** start: define customizable field types ********/
// HINT: the type "obligatory" should be defined first 
// (because if an obligatory field is not filled the rest of 
// the validation does not need to be performed.
var regExpFieldChecks = {
			obligatory:	{ 
							regexp: /\w+/, 
							errorMessage:	{
												'de': 'Bitte f\u00fcllen Sie das Feld "__name__" aus.' + "\n",
												'en': 'Please fill in the field "__name__".' + "\n",
												'pt': 'Por favor, preencha o campo "__name__".' + "\n"
							}
			}
			, email:	{
							regexp: /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9    -]+(\.[a-zA-Z0-9   -]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/,
							errorMessage:	{
												'de':	'Die angebenene E-Mail-Adresse "__value__" in Feld "__name__" hat kein g\u00fcltiges Format.' + "\n",
												'en':	'The given e-mail address "__value__" in field "__name__" has no valid format.' + "\n",
												'pt':	'Formato inválido do endereço de E-mail introduzido  "__value__" no campo "__name__".' + "\n"
												
							}
			}
			, attachment:	{ 
							regexp: /(?:\.jpg|\.pdf)$/, 
							errorMessage:	{
												'de': 'Bitte w\u00e4hlen Sie f\u00fcr das Feld "__name__" entweder eine JPG- oder eine PDF-Datei.' + "\n",
												'en': 'Please choose a JPG or a PDF file for field "__name__".' + "\n",
												'pt': 'Please choose a JPG or a PDF file for field "__name__".' + "\n"
							}
			}
}
/******** end: define customizable field types ********/


function validateForm(formObj) {
	formObj.attr('hasValidInput', '1');
	var formFieldIsValid = true;

	$("form#contact input, form#contact select, form#contact textarea").each( function() {
		if(! ($(this).attr("type") == "hidden" || $(this).attr("type") == "submit")) {
			formFieldIsValid = checkValue($(this));
			if(!formFieldIsValid) $(this).parents("form").attr('hasValidInput', '0');
		}
	});

	return formObj.attr('hasValidInput') == '1';
}



function checkValue(fieldObj) {
	var valueIsValid = true;
	var lang = fieldObj.parents('form').attr('lang');
	if(lang == undefined) lang = 'de';
	
	if(fieldObj.attr("type") == "hidden" || fieldObj.attr("type") == "submit") return valueIsValid;

	for(fieldType in regExpFieldChecks) {
		if(fieldObj.hasClass(fieldType)) {
			var regexp = regExpFieldChecks[fieldType]['regexp'];
			var errorText = regExpFieldChecks[fieldType]['errorMessage'][lang];
			var fieldTitle = $("label[@for=" + fieldObj.attr("id") + ']').text();
			fieldTitle = fieldTitle.replace(/\s*\*/, '');

			if(!regexp.test(fieldObj.val())) {
				valueIsValid = false;

				if(fieldObj.attr('hasError_obligatory') != '1') {

					if(fieldObj.attr('hasError_' + fieldType) == '1') continue;

					fieldObj.attr('hasError_' + fieldType, '1');
					errorText = errorText.replace("__name__", fieldTitle);
					errorText = errorText.replace("__value__", fieldObj.val());
					fieldObj.after('<p class="error-message ' + fieldType + '">' + errorText + '</p>');
				} else if (fieldType != 'obligatory') {
					fieldObj.attr('hasError_' + fieldType, '0');
					fieldObj.siblings(".error-message." + fieldType).remove();
				}
			} else {
				fieldObj.attr('hasError_' + fieldType, '0');
				//fieldObj.siblings("." + fieldType).fadeOut("normal", function() { $(this).remove() } );
				fieldObj.siblings(".error-message." + fieldType).remove();
			}
		}
	}

	if(valueIsValid == true) {
		fieldObj.removeClass("invalid");
	} else {
		fieldObj.addClass("invalid");
		fieldObj.siblings(".error-message").fadeIn("slow");
	}

	return valueIsValid;
}



