(function($) {
	
	$.fn.validate = function(options) {
			
		var defaults = {
			lang						: 'de',
			addReqStar 					: false, // adds a <div class='reqStar'> -> class must be defined in css
			errorClass 					: 'inputError',
			noErrorClass				: 'noInputError',
			errorMessageInInput			: false, // if the error message should be put into the input field
			displayErrorsWithSymbols 	: false, // displays the error message next to the input field with a symbol
			errorDiv	 				: '',
			successDiv					: '',
			editDiv						: '',
			errorWrapperElement			: 'errorWrapper',
			textareaMinLength			: 0, // set the minimum character length for a textarea
			validateCheckboxes			: false, // if true at least one checkbox of the formular has to be checked
			validateCheckboxMessage		: '', // the element which holds the error message if the checkbox error is true
			validateCheckboxErrorDiv	: '', // the div where the error Message should appear
			ajaxUrl						: '', // set the url for an ajax request
			ajaxLoader					: '', // set the id for the ajaxLoader gif
			ajaxResponseDiv				: '', // the div in which the ajax Response should be injected
			ajaxSuccessImage			: '', // shows a success image previous to the ajaxResponseDiv
			ajaxErrorImage				: '', // shows an error image previous to the ajaxResponseDiv
			ajaxInputAlreadySent		: '', // set the value of the hidden input - prevents the form to be send for another time
			ajaxSuccessMessage			: '', // sets the ajaxSuccessMessage in an hidden input
			conversionTrackingDiv		: '', // sets the conversionTracking DIV
			conversionTrackingCode		: 0,   // set the concersionTrackingCode
			conversionParamsDiv			: ''
		};  

	var options = $.extend(defaults, options);
	
	error = [];
	
	var validations = {
		requiredUrl		: /^(http[s]?\:\/\/)?(www\.)?[öüäa-zA-Z0-9-\.]+\.([a-z]{2,4})[A-Za-z0-9-_%&\?\/.=]*$/,
		requiredAz 		: /^[a-zA-Z- ÖÜÄöäüßÃàáâÆæåãèéëìíòóôõùúÁÀCcDÉÈEeÍÌNnÇÕÓÒRrŠšTtÚUuÝýŽžÑñÿ\/.]+$/,
		requiredEmail	: /^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$/,
		requiredAz09	: /^[0-9a-zA-Z- .:ÖÜÄöäüßÃàáâÆæåãèéëìíòóôõùúÁÀCcDÉÈEeÍÌNnÇÕÓÒRrŠšTtÚUuÝýŽžÑñÿ\/\(\)]+$/,
		required09		: /^[0-9]+$/,
		requiredPrice	: /^\d*[0-9](\.\d*[0-9])?$/
	};
		
	if (options.lang == 'de') {
		var errorMessages = {
			lengthMessage			: 'Bitte ausfüllen',
			requiredAz				: 'Bitte ausfüllen',
			generalSuccessMessage	: 'Daten wurden erfolgreich gesendet'
		};
		var validationMessages = {
			requiredAz				:	'Keine Sonderzeichen erlaubt',
			requiredAz09			:	'Keine Sonderzeichen erlaubt',
			required09				:	'Nur Zahlen erlaubt',
			requiredEmail			: 	'Bitte eine gültige Email eingeben',
			requiredMinLengthPrefix	: 	'Bitte geben Sie mindestens ',
			requiredMinLengthSuffix	:	' Zeichen ein',
			requiredOption			:	'Bitte auswählen',
			requiredUrl				: 	'Bitte ein gültige URL eingeben',
			requiredPrice			:	'Bitte einen gültigen Preis eingeben'
		};
	} // if
	if (options.lang == 'en') {
		var errorMessages = {
			lengthMessage			: 'Please fill in',
			requiredAz				: 'Please fill in',
			generalSuccessMessage	: 'Data sent successfully'
		};
		var validationMessages = {
			requiredAz				:	'No special characters allowed',	
			requiredAz09			:   'No special characters allowed',
			required09				:	'Only Numbers allowed',
			requiredEmail			:	'Please fill in a valid email address',
			requiredMinLengthPrefix	: 	'Please fill in at least ',
			requiredMinLengthSuffix	:	' characters',
			requiredOption			: 	'Please choose',
			requiredUrl				: 	'Please fill in a valid url',
			requiredPrice			:	'Please fill in a valid price'
		};
	} // if
	if (options.lang != "de" && options.lang != "en") {
		var errorMessages = {
			lengthMessage			: 'Please fill in',
			requiredAz				: 'Please fill in',
			generalSuccessMessage	: 'Data sent successfully'
		};
		var validationMessages = {
			requiredAz				:	'No special characters allowed',	
			requiredAz09			:   'No special characters allowed',
			required09				:	'Only Numbers allowed',
			requiredEmail			:	'Please fill in a valid email address',
			requiredMinLengthPrefix	: 	'Please fill in at least ',
			requiredMinLengthSuffix	:	' characters',
			requiredOption			: 	'Please choose',
			requiredUrl				: 	'Please fill in a valid url',
			requiredPrice			:	'Please fill in a valid price'
		};
	}
	
	// set all validationErrors to false at the beginning
		var validationErrors = {
			generalError			:	false,
			requiredAz			 	: 	false,
			requiredEmail			: 	false,
			requiredMinLength		: 	false,
			requiredAz09			: 	false,
			required09				:	false,
			requiredOption			: 	false,
			requiredUrl				: 	false,
			requiredPrice			: 	false
		}
	
	// mark the input fields mandatory
	if (options.displayErrorsWithSymbols) {
		// all inputs
		this.find('input:text').each(function() {
			var id = $(this).attr('id');
			var requiredClass = $(this).attr("class");
			if (options.addReqStar) {
				addReqStar(id);
			} // if
			$(this).focus(function() {
				showEditSymbol(id);		
			});
			$(this).blur(function() {
				if (!$(this).hasClass("required")) {
					hideEditSymbol(id);
				} // if				
			});
		});
		// all selects
		this.find('select').each(function() {
			var id = $(this).attr('id');
			if (!$(this).hasClass('noReqStar')) {
				if (options.addReqStar) {
					addReqStar(id);
					validateOnChange(id);
				} // if
			} // if
		}); // find select
		
		this.find('textarea').each(function() {
			var id = $(this).attr('id');
			$(this).focus(function() {
				showEditSymbol(id);			
			});
			$(this).blur(function() {
				//hideEditSymbol(id);
			});
		}); // finc textarea
	} // if
	
	// clear Input Fields onfocus
	this.find('input:text').each(function() {
		clearInput($(this).attr('id'));
		validateOnKeyUp($(this).attr('id'));
		validateOnBlur($(this).attr('id'));
	}); // if
	this.find('textarea').each(function() {
		clearInput($(this).attr('id'));
		validateOnKeyUp($(this).attr('id'));
		validateOnBlur($(this).attr('id'));
	});
	
	/** validate on change **/
	function validateOnKeyUp(id) {
		
		if (!options.displayErrorsWithSymbols) {
			return;	
		}
		
		$("#"+id).keyup(function() {
			if($(this).hasClass("requiredAz")) {
				if(!validations.requiredAz.test($(this).val())) {
					validationErrors.requiredAz = displayError(id, $(this).val(), validationMessages.requiredAz);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredAz09")) {
				if(!validations.requiredAz09.test($(this).val())) {
					validationErrors.requiredAz09 = displayError(id, $(this).val(), validationMessages.requiredAz);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("required09")) {
				if(!validations.required09.test($(this).val())) {
					validationErrors.required09 = displayError(id, $(this).val(), validationMessages.required09);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredPrice")) {
				if(!validations.requiredPrice.test($(this).val())) {
					validationErrors.requiredPrice = displayError(id, $(this).val(), validationMessages.requiredPrice);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredEmail")) {
				if(!validations.requiredEmail.test($(this).val())) {
					validationErrors.requiredEmail = displayError(id, $(this).val(), validationMessages.requiredEmail);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
			
			if ($(this).hasClass("validate09")) {
				if($(this).val().length < 7) {
					validationErrors.required09 = displayError(id, $(this).val(), validationMessages.required09);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					if(!validations.required09.test($(this).val())) {
						validationErrors.required09 = displayError(id, $(this).val(), validationMessages.required09);
						$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
					} else { // no error
						displaySuccess(id);
					} // if-else
				} // if-else
			} // if
			
			if ($(this).hasClass("validateUrl")) {
				if (!validations.requiredUrl.test($(this).val())) {
					validationErrors.requiredUrl = displayError(id, $(this).val(), validationMessages.requiredUrl);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
			
			if ($(this).hasClass("requiredMinLength")) {
				if ($(this).val().length < options.textareaMinLength) {
					validationErrors.requiredMinLength = displayError(id, $(this).val(), validationMessages.requiredMinLengthPrefix+options.textareaMinLength+validationMessages.requiredMinLengthSuffix);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
		});		
	} // function
	
	function validateOnBlur(id) {
		
		if (!options.displayErrorsWithSymbols) {
			return;	
		}
		
		$("#"+id).blur(function() {
			if($(this).hasClass("requiredAz")) {
				if(!validations.requiredAz.test($(this).val())) {
					validationErrors.requiredAz = displayError(id, $(this).val(), validationMessages.requiredAz);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredAz09")) {
				if(!validations.requiredAz09.test($(this).val())) {
					validationErrors.requiredAz09 = displayError(id, $(this).val(), validationMessages.requiredAz);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("required09")) {
				if(!validations.required09.test($(this).val())) {
					validationErrors.required09 = displayError(id, $(this).val(), validationMessages.required09);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredPrice")) {
				if(!validations.requiredPrice.test($(this).val())) {
					validationErrors.requiredPrice = displayError(id, $(this).val(), validationMessages.requiredPrice);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);	
				} // if-else
			} // if
			
			if($(this).hasClass("requiredEmail")) {
				if(!validations.requiredEmail.test($(this).val())) {
					validationErrors.requiredEmail = displayError(id, $(this).val(), validationMessages.requiredEmail);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
			
			if ($(this).hasClass("validateUrl")) {
				if (!validations.requiredUrl.test($(this).val())) {
					validationErrors.requiredUrl = displayError(id, $(this).val(), validationMessages.requiredUrl);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
			
			if ($(this).hasClass("requiredMinLength")) {
				if ($(this).val().length < options.textareaMinLength) {
					validationErrors.requiredMinLength = displayError(id, $(this).val(), validationMessages.requiredMinLengthPrefix+options.textareaMinLength+validationMessages.requiredMinLengthSuffix);
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} else {
					displaySuccess(id);
				} // if-else
			} // if
		});	
		
	} // function
	
	function validateOnChange(id) {
		
		$("#"+id).change(function() {
			validationErrors.requiredOption = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if (val == -1) {
				validationErrors.requiredOption = displayError(el, val, validationMessages.requiredOption);
			} else {
				displaySuccess(el);
			} // if			
		});
		
	} // function
	
	function displaySuccess(id) {

		var requiredClass = $("#"+id).attr("class");
		if (options.displayErrorsWithSymbols) {
			// clear all error, success, edit icons
			if ($("#"+id).parent().next().hasClass(options.successDiv) || $("#"+id).parent().next().hasClass(options.errorDiv) || $("#"+id).parent().next().hasClass(options.editDiv)) {
				$("#"+id).parent().next().remove();
			} // if
		
			if(!$("#"+id).parent().next().hasClass(options.successDiv)) {
				$("#"+id).parent().after("<div class='"+options.successDiv+"'></div>");							
			} // if
		} // if	
		
		if (requiredClass == "requiredOption inputError") { // speziell für mit sSelect umformatierte Dropdowns
			if ($("#"+id).next().length) {
				$("#"+id).removeClass(options.errorClass).addClass(options.noErrorClass);
				$("#"+id).next().find('div').removeClass(options.errorClass).addClass(options.noErrorClass);
			} // if
		} // if
		
	} // function
	
	function displayError(id, val, valMessage) {
		var error = true;
		var requiredClass = $("#"+id).attr("class");
		
		if (options.displayErrorsWithSymbols) {
			if ($("#"+id).parent().next().attr("class") != options.errorDiv) {
				$("#"+id).parent().after("<div class='"+options.errorDiv+"'></div>");

				//alert($("#"+id).attr('id'));
				$("#"+id).parent().parent().find("."+options.successDiv).each(function() {
					$(this).remove();
				});
				$("#"+id).parent().parent().find("."+options.editDiv).each(function() {
					$(this).remove();
				});
				//$("#"+id).val('');
			} // if					
		} else { 
			if (options.errorMessageInInput) {
				$("#"+id).val(valMessage);
			} // if
							
			if ($("#"+id+"_prefilledValue").length) {
				$("#"+id).val($("#"+id+"_prefilledValue").val());
			} else {
				$("#"+id).val(valMessage);
			} // if-else
			
			// if input val equals the errorMessage
			if ($("#"+id+"_errorMessage").length) {
				$("#"+id).val($("#"+id+"_errorMessage").val());
			} else {
				$("#"+id).val(valMessage);
			} // if-else		
			
			$("#"+id).removeClass(options.noErrorClass).addClass(options.errorClass);
			if ($("#"+id).hasClass("requiredOption")) { // speziell für mit sSelect umformatierte Dropdowns
				if ($("#"+id).next().length) {
					$("#"+id).next().find('div').removeClass(options.noErrorClass).addClass(options.errorClass);
				} // if
			} // if
		} // if-else
		
		return error;
		
	} // function
	
	/*** CLEAR INPUT FIELDS ***/
	function clearInput(el) {
		$("#"+el).focus(function() {
			var cleared = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if ($("#"+el+"_prefilledValue").length) {
				if (val == $("#"+el+"_prefilledValue").val()) {
					$(this).val('');
					cleared = true;
				} // if
			} // if
			if ($("#"+el+"_errorMessage").length) {
				if (val == $("#"+el+"_errorMessage").val()) {
					$(this).val('');
					cleared = true;
				} // if
			} // if 
			if (val == validationMessages.requiredMinLengthPrefix+options.textareaMinLength+validationMessages.requiredMinLengthSuffix) {
				$(this).val('');
				cleared = true;
			} // if
			if (cleared) {
				$(this).removeClass(options.errorClass).addClass(options.noErrorClass);
			} // if
		});
	} // function 
	
	function showEditSymbol(id) {
		if ($("#"+id).parent().next().hasClass(options.errorDiv) || $("#"+id).parent().next().hasClass(options.successDiv)) {
			$("#"+id).parent().next().remove();
			$("#"+id).parent().after("<div class='"+options.editDiv+"'></div>");
		} // if
		if (!$("#"+id).parent().next().hasClass(options.editDiv)) {
			$("#"+id).parent().after("<div class='"+options.editDiv+"'></div>");
		} // if	
	} // function
	
	function hideEditSymbol(id) {
		if ($("#"+id).parent().next().hasClass(options.editDiv) || $("#"+id).parent().next().hasClass(options.errorDiv) || $("#"+id).parent().next().hasClass(options.successDiv)) {
			$("#"+id).parent().next().remove();
		} // if
	} // function
	
	function addReqStar(id) {
		var requiredClass = $("#"+id).attr("class");
		if (requiredClass.substring(0,8) == "required") {
			$("#"+id).parent().prev().append("<div class='reqStar'>*</div>");
		} // if
	} // function
		
    return this.submit(function(event) {
		
		// set all validationErrors to false at the beginning
		var validationErrors = {
			generalError			:	false,
			requiredAz			 	: 	false,
			requiredEmail			: 	false,
			requiredMinLength		: 	false,
			requiredAz09			: 	false,
			required09				:	false,
			requiredOption			: 	false,
			requiredUrl				:	false,
			requiredPrice			: 	false,
			requiredCheckbox		: 	false
		}
		
		form = $(this);
		
		// validate Checkboxes
		if (options.validateCheckboxes) {
			// zumindest eine Checkbox muss gecheckt sein
			if ($("input:checked").length < 1) {
				validationErrors.requiredCheckbox = true;
				if ($("#"+options.validateCheckboxErrorDiv).length) {
					$("#"+options.validateCheckboxErrorDiv).html("<div class='"+options.errorDiv+"'></div><div class='checkboxErrorMessage'>"+$("#"+options.validateCheckboxMessage).val()+"</div>").show();
				} else {
					// alert box	
				}
			} else {
				if ($("#"+options.validateCheckboxErrorDiv).length) {
					$("#"+options.validateCheckboxErrorDiv).hide();
				} // if
			} // if-else
		} // if	
		
		// validation for selects
		// fields validation - requiredAz09
		form.find('.requiredOption').each(function() {
			validationErrors.requiredOption = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if (val == -1) {
				validationErrors.requiredOption = displayError(el, val, validationMessages.requiredOption);
			} else {
				displaySuccess(el);
			} // if
		});
		
		// fields validation - requiredAz09
		form.find('.requiredAz09').each(function() {
			validationErrors.requiredAz09 = false;												   
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.requiredAz09.test(val)) {
				validationErrors.requiredAz09 = displayError(el, val, validationMessages.requiredAz09);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else { // no error
				displaySuccess(el);
			} // if-else
		}); // form.find
		
		// fields validation - required09
		form.find('.required09').each(function() {
			validationErrors.required09 = false;												   
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.required09.test(val)) {
				validationErrors.required09 = displayError(el, val, validationMessages.required09);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else { // no error
				displaySuccess(el);
			} // if-else
		}); // form.find
		
		// fields validation - required09
		form.find('.requiredPrice').each(function() {
			validationErrors.requiredPrice = false;												   
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.requiredPrice.test(val)) {
				validationErrors.requiredPrice = displayError(el, val, validationMessages.requiredPrice);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else { // no error
				displaySuccess(el);
			} // if-else
		}); // form.find
		
		// fields validation - requiredAz
		form.find('.requiredAz').each(function() {
			validationErrors.requiredAz = false;											   
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.requiredAz.test(val)) {
				validationErrors.requiredAz = displayError(el, val, validationMessages.requiredAz);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else {
				displaySuccess(el);	
			} // if-else
		}); // form.find
		
		//alert("after requiredAz="+error);
		
		// EMAIL VALIDATION
		form.find('.requiredEmail').each(function() {
			validationErrors.requiredEmail = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.requiredEmail.test(val)) {
				validationErrors.requiredEmail = displayError(el, val, validationMessages.requiredEmail);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else {
				displaySuccess(el);
			} // if-else
		}); // form.find
		
		// URL VALIDATION
		form.find('.requiredUrl').each(function() {
			validationErrors.requiredUrl = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if(!validations.requiredUrl.test(val)) {
				validationErrors.requiredUrl = displayError(el, val, validationMessages.requiredUrl);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else {
				displaySuccess(el);
			} // if-else
		}); // form.find
		
		//alert("after requiredEmail="+error);
		
		// MIN LENGTH VALIDATION
		form.find('.requiredMinLength').each(function() {
			validationErrors.requiredMinLength = false;
			var val = jQuery.trim($(this).val());
			var el = $(this).attr('id');
			if (val.length < options.textareaMinLength) {
				validationErrors.requiredMinLength = displayError(el, val, validationMessages.requiredMinLengthPrefix+options.textareaMinLength+validationMessages.requiredMinLengthSuffix);
				$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
			} else {
				displaySuccess(el);
			} // if-else
			// if the message is equal to the error message
			if ($("#"+el+"_errorMessage").length) {
				if (val == $("#"+el+"_errorMessage").val()) {
					$(this).val($("#"+el+"_errorMessage").val());
					validationErrors.requiredMinLength = true;
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
				} // if
			} // if
		});
		
		/*** GENERAL FORM VALIDATION ***/
		form.find('input:text').each(function() {
			var requiredClass = $(this).attr("class");
			if (!options.displayErrorsWithSymbols) { // nur für Errormessages im input Mail
				validationErrors.generalError = false;
				var val = jQuery.trim($(this).val());
				var el = $(this).attr('id');
				if (val.length <= 1) {
					if ($("#"+el+"_errorMessage").length) {
						$(this).val($("#"+el+"_errorMessage").val());
					} else {
						$(this).val(errorMessages.lengthMessage);
					} // if
					$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
					validationErrors.generalError = true;
					//return;
				} // if
				// when inputs val equals the prefilledValue
				if ($("#"+el+"_prefilledValue").length) {
					if (val == $("#"+el+"_prefilledValue").val()) {
						if ($("#"+el+"_errorMessage").length) {
							$(this).val($("#"+el+"_errorMessage").val());
						} else {
							$(this).val(errorMessages.lengthMessage);
						} // if
						$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
						validationErrors.generalError = true;
						//return;
					} // if					
				} // if
				// if input val equals the errorMessage
				if ($("#"+el+"_errorMessage").length) {
					if (val == $("#"+el+"_errorMessage").val()) {
						if ($("#"+el+"_errorMessage").length) {
							$(this).val($("#"+el+"_errorMessage").val());
						} else {
							$(this).val(errorMessages.lengthMessage);
						} // if
						$(this).removeClass(options.noErrorClass).addClass(options.errorClass);
						validationErrors.generalError = true;
						//return;
					} // if				
				} // if	
				//alert(el+" "+validationErrors.generalError);
			} else {
				//alert("here");
			} //-else if !options.displayErrorsWithSymbols
		}); // form.find
		
		error = false;
		for(key in validationErrors) {
			//alert(validationErrors[key]);
			if (validationErrors[key] == true) {
				error = true;
			} // if
		} // for
		//alert(form.attr("id"));
		/*** SUBMIT THE FORM IF THERE IS NO ERROR ***/
		//alert("***"+error+"***");
		
		if (error) {
			event.preventDefault();
		} else {
			var permitAjaxRequest = true;
			// if the inputAlreadySent hidden input is set to true the form cant be sent for a second time
			if($("#"+options.ajaxInputAlreadySent).val() == "true") {
				permitAjaxRequest = false;
			} // if
			
			if (options.ajaxUrl && permitAjaxRequest) {
				$.ajax({
					type: "POST",
					url: options.ajaxUrl,
					data: form.serialize(),
					beforeSend: function(e) {
						if (options.ajaxLoader) {
							$("#"+options.ajaxLoader).show();
						} // if
					},
					success: function(e) {
						if (options.ajaxLoader) {
							$("#"+options.ajaxLoader).hide();
						} // if
												
						// inject the success message
						if ($("#"+options.ajaxResponseDiv).length) {
							if ($("#"+options.ajaxSuccessMessage).length) {
								var successMessage = $("#"+options.ajaxSuccessMessage).val();
							} else { // take the default message
								var successMessage = errorMessages.generalSuccessMessage;
							}
							$("#"+options.ajaxResponseDiv).html(successMessage).show();
						} else {
							alert(e);
						} // if-else
						
						// set the inputAlreadySent hidden input to true so the form cant be sent another time
						if(options.ajaxInputAlreadySent) {
							$("#"+options.ajaxInputAlreadySent).val('true');
						} // if
						
						//$.getScript(domain+"/js/scripts.js");
						
						// if we have a ajax successImage -> display it
						if ($("#"+options.ajaxSuccessImage).length) {
							$("#"+options.ajaxSuccessImage).show();
						} // if
						
						// conversionTracking
						if ($("#"+options.conversionTrackingDiv).length) {
							if (options.conversionTrackingCode > 0) {
								$.getScript("http://www.googleadservices.com/pagead/conversion.js");
								if ($("#"+options.conversionParamsDiv).length) {
									var conversionParams = $("#"+options.conversionParamsDiv).val();
								} else {
									var conversionParams = $("#conversionParams").val();
								} // if-else
								var conversionCode = "<img src='http://www.googleadservices.com/pagead/conversion/"+options.conversionTrackingCode+"/imp.gif?"+conversionParams+"'>";
								$("#"+options.conversionTrackingDiv).html(conversionCode).show();
							} // if
						} // if
						
					},
					error: function(e) {
						if (options.ajaxLoader) {
							$("#"+options.ajaxLoader).hide();
						} // if
					}
				}); // ajax
				return false;
			} // if
			return false;
		}
		
			/*** CLEAR INPUT FIELDS ***/
			form.find('input:text').each(function() {
				$(this).focus(function() {
					var cleared = false;
					var el = $(this).attr('id');
					var val = jQuery.trim($(this).val());
					if ($("#"+el+"_prefilledValue").length) {
						if (val == $("#"+el+"_prefilledValue").val()) {
							$(this).val('');
							cleared = true;
						} // if
					} // if
					if ($("#"+el+"_errorMessage").length) {
						if (val == $("#"+el+"_errorMessage").val()) {
							$(this).val('');
							cleared = true;
						} // if
					} // if 
					for (var key in validationMessages) {
						if (val == validationMessages[key]) {
							$(this).val('');
							cleared = true;
						} // if
					} // if
					if (val == errorMessages.lengthMessage) {
						$(this).val('');
						cleared = true;
					} // if	
					if (cleared) {
						$(this).parent().after("<div class='"+options.successDiv+"'></div>");
						$(this).removeClass(options.errorClass).addClass(options.noErrorClass);
					} // if
				});									  
			});
			
			form.find('textarea').each(function() {
				$(this).focus(function() {
					var cleared = false;
					var val = jQuery.trim($(this).val());
					var el = $(this).attr('id');
					if ($("#"+el+"_prefilledValue").length) {
						if (val == $("#"+el+"_prefilledValue").val()) {
							$(this).val('');
							cleared = true;
						} // if
					} // if
					if ($("#"+el+"_errorMessage").length) {
						if (val == $("#"+el+"_errorMessage").val()) {
							$(this).val('');
							cleared = true;
						} // if
					} // if 
					if (val == validationMessages.requiredMinLengthPrefix+options.textareaMinLength+validationMessages.requiredMinLengthSuffix) {
						$(this).val('');
						cleared = true;
					} // if
					if (cleared) {
						$(this).removeClass(options.errorClass).addClass(options.noErrorClass);
					} // if
				}); // focus				
			}); // form.find - textarea
			
			function displayError(id, val, valMessage) {
				var error = true;
				var requiredClass = $("#"+id).attr("class");
				
				if (options.displayErrorsWithSymbols) {
					if ($("#"+id).parent().next().attr("class") != options.errorDiv) {
						$("#"+id).parent().after("<div class='"+options.errorDiv+"'></div>");
						$("#"+id).val('');
					} // if					
				} else { 
					if (options.errorMessageInInput) {
						$("#"+id).val(valMessage);
					} // if
									
					if ($("#"+id+"_prefilledValue").length) {
						$("#"+id).val($("#"+id+"_prefilledValue").val());
					} else {
						$("#"+id).val(valMessage);
					} // if-else
					
					// if input val equals the errorMessage
					if ($("#"+id+"_errorMessage").length) {
						$("#"+id).val($("#"+id+"_errorMessage").val());
					} else {
						$("#"+id).val(valMessage);
					} // if-else		
					
					$("#"+id).removeClass(options.noErrorClass).addClass(options.errorClass);
					if ($("#"+id).hasClass("requiredOption")) { // speziell für mit sSelect umformatierte Dropdowns
						if ($("#"+id).next().length) {
							$("#"+id).next().find('div').removeClass(options.noErrorClass).addClass(options.errorClass);
						} // if
					} // if
				} // if-else
				
				return error;
				
			} // function
			
			function displaySuccess(id) {

				var requiredClass = $("#"+id).attr("class");
				if (options.displayErrorsWithSymbols) {
					// clear all error, success, edit icons
					if ($("#"+id).parent().next().hasClass(options.successDiv) || $("#"+id).parent().next().hasClass(options.errorDiv) || $("#"+id).parent().next().hasClass(options.editDiv)) {
						$("#"+id).parent().next().remove();
					} // if
				
					if(!$("#"+id).parent().next().hasClass(options.successDiv)) {
						$("#"+id).parent().after("<div class='"+options.successDiv+"'></div>");							
					} // if
				} // if	
				
				if (requiredClass == "requiredOption inputError") { // speziell für mit sSelect umformatierte Dropdowns
					if ($("#"+id).next().length) {
						$("#"+id).removeClass(options.errorClass).addClass(options.noErrorClass);
						$("#"+id).next().find('div').removeClass(options.errorClass).addClass(options.noErrorClass);
					} // if
				} // if
				
			} // function
			
    });
	
 };
})(jQuery);


