/* $Id: site-utils.js 187 2009-12-16 20:24:53Z uroemers $ */

var formId = '#anfrage';

$(document).ready(function() {

	/* Suppress column header row of tables nested in a
	 * container with the CSS class 'no-header' assigned.
	 *
	 * Markdown:
	 * ---------- 8< ----------
	 * <div class="no-header" markdown="1">
	 * Spaltenkopf|Spaltenkopf|Spaltenkopf
	 * -----------|-----------|-----------
	 * A1|B1|C1
	 * A2|B2|C2
	 * A3|B3|C3
	 * </div>
	 * ---------- >8 ----------
	 */
	$('.no-header th').parent().hide();

	if ($(formId)) {

		/* Flag required fields in contact form.
		 */
		$('.required').parent().parent().find('label').after('&nbsp;*');

		/* Inject column widths setup on contact form page.
		 */
		$('form table').prepend('<colgroup><col class="labels" /><col class="fields" /></colgroup>');

		/* Assign the large size class to default fields.
		 */
		$('input[type="text"]').each(function() {
			if ( !( $(this).hasClass('ipS') || $(this).hasClass('ipM') ) ) {
				$(this).addClass('ipL');
			}
		});

		/* Hook into submit process to validate form.
		 */
		$(formId).submit(submitIfValid);
	}
});

function submitIfValid() {
	if (validateForm()) {
		return true;
	}

	alert('Bitte prüfen Sie Ihre Angaben in den Pflichtfeldern und\n'
			+ 'versuchen Sie dann erneut, das Formular abzuschicken.');
	return false;
}

function validateForm() {
	var isValid = true;
	var focusSet = false;

	var $requiredFields = $('.required');
	var invalidClass = 'invalid';

	$requiredFields.removeClass(invalidClass);

	// check all required fields
	$requiredFields.each(function() {
		var fieldValue = jQuery.trim($(this).val());
		if (fieldValue == null || fieldValue == '') {
			$(this).addClass(invalidClass);
			if (!focusSet) {
				$(this).focus();
				focusSet = true;
			}
			isValid = false;
		}
	});

	// validate the e-mail address format
	var $emailField = $('#email');
	if (!validateEmail($emailField.val())) {
		$emailField.addClass(invalidClass);
		if (!focusSet) {
			$emailField.focus();
		}
		isValid = false;
	}

	return isValid;
}

function validateEmail(value) {
	return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
}

