(function($) {
	jQuery.fn.fz = function() {
		// password fields
		jQuery(this)
			.find('input[type=password]')
				.each(function() {
					var e = jQuery(this);
					var x = jQuery(jQuery('<div>').append(e.clone()).remove().html().replace(/type="password"/i, 'type="text"').replace(/type=password/i, 'type=text'));
					if (e.attr('id') != '')
						x.attr('id', e.attr('id') + '_fakefzfield');
					if (e.attr('name') != '')
						x.attr('name', e.attr('name') + '_fakefzfield');
					x.addClass('blank').val(x.attr('title')).insertAfter(e);
					if (e.val() == '')
						e.hide();
					else
						x.hide();
					e.blur(function(event) {
						event.preventDefault();
						var e = jQuery(this);
						var x = e.parent().find('input[name=' + e.attr('name') + '_fakefzfield]');
						if (e.val() == '') {
							e.hide();
							x.show();
						}
					});
					x.focus(function(event) {
						event.preventDefault();
						var x = jQuery(this);
						var e = x.parent().find('input[name=' + x.attr('name').replace('_fakefzfield', '') + ']');
						x.hide();
						e.show().focus();
					});
					// just in case :P
					x.keypress(function(event) {
						event.preventDefault();
						x.val('');
					});
				});
		// text fields
		jQuery(this)
			.find('input[type=text],textarea')
				.each(function() {
					var e = jQuery(this);
					if (e.val() == '' || e.val() == e.attr('title')) {
						e.addClass('blank');
						e.val(e.attr('title'));
					}
				})
				.blur(function() {
					var e = jQuery(this);
					if (e.attr('name').match(/_fakefzfield$/))
						return;
					if (e.val() == '') {
						e.addClass('blank');
						e.val(e.attr('title'));
					}
				})
				.focus(function() {
					var e = jQuery(this);
					if (e.attr('name').match(/_fakefzfield$/))
						return;
					if (e.val() == e.attr('title')) {
						e.removeClass('blank');
						e.val('');
					}
				});
		// form events
		jQuery(this)
			// submit
			.submit(function() {
				jQuery(this)
					.find('input[type=text],textarea')
						.each(function(event) {
							var e = jQuery(this);
							if (e.attr('name').match(/_fakefzfield$/))
								e.attr('name', '');
							if (e.val() == e.attr('title')) {
								e.removeClass('blank');
								e.val('');
							}
						});
			})
			// reset
			.bind("reset", function(event) {
				event.preventDefault();
				// temporary: just set all SELECTs to their first options
				jQuery(this)
					.find('select')
						.val(jQuery('option:first').val());
				jQuery(this)
					.find('input,textarea')
						.each(function() {
							var e = jQuery(this);
							var x;
							e.removeClass('blank');
							switch (this.type) {
								case 'password':
									e.val(e.attr('defaultValue'));
									x = e.parent().find('input[name=' + e.attr('name') + '_fakefzfield]');
									if (e.val() == '') {
										e.hide();
										x.show();
									}
									else {
										e.show();
										x.hide();
									}
									break;
								case 'checkbox':
								case 'radio':
									e.attr('checked', e.attr('defaultValue'));
									break;
								case 'text':
								case 'textarea':
									e.val(e.attr('defaultValue'));
									if (e.val() == '') {
										e.addClass('blank');
										e.val(e.attr('title'));
									}
									break;
								default:
									e.val(e.attr('defaultValue'));
									break;
							}
						});
			});
	};	
})(jQuery);
