$.fn.extend({
	displayError: function(options) {
		this.each(function() {
			options = $.extend({
				ajaxData: [],
				errorImage: false,
				errorMessage: 'Er is een fout opgetreden bij het verwerken van het formulier. <br />Je kunt de fout inzien door met de muis op het icoon <img src="/media/gfx/form/exclaimation.gif" alt="fout" style="vertical-align:-4px;" /> te gaan staan.',
				onSuccess: function() {},
				onError: function() {}
			}, options);

			if ($('#error-msg').length == 0) {
				var oDiv = $('<div/>')
					.hide()
					.attr('id', 'error-msg')
					.insertBefore(this);
			}
			else {
				var oDiv = $('#error-msg');
			}

			if (options.errorImage) {
				var oErrorImage = new Image();
				oErrorImage.src = options.errorImage;
			}

			oDiv.removeAttr('class');
			
			var ajaxData = options.ajaxData;
			if (typeof ajaxData != 'object') {
				ajaxData = eval('(' + ajaxData + ')');
			}

			if (typeof ajaxData == 'object' && $(ajaxData).length > 0) {
				$(oDiv).addClass('msg-error');
				$(this).find('img.error').remove();

				for (i in ajaxData) {
					var
						msg = [],
						a = ajaxData[i];

					for (j in a) {
						msg.push(a[j]);
					};
					
					// find array portion.
					var el = $(this).find('#' + i);
					if (el.length == 0) {
						$(this).find(':input:visible').each(function() {
							if ($(this).attr('name').indexOf(i) >= 0) {
								el = $(this);
								return;
							}
						});
					}

					$(oErrorImage).clone().css({
						marginLeft: '5px',
						marginBottom: '-2px'
					}).attr('title', msg.join(' - '))
					.addClass('error')
					.insertAfter(el);
				}

				$(oDiv)
					.html(options.errorMessage)
					.slideDown();

				options.onError();
			}
			else {
				options.onSuccess();
			}
		});
	}
})