﻿(function ($) {

	// plugin definition
	$.fn.overlabel = function (options) {

		// build main options before element iteration
		var opts = $.extend({}, $.fn.overlabel.defaults, options);

		var selection = this.filter('label[for]').map(function () {

			var label = $(this);
			var id = label.attr('for');
			var field = document.getElementById(id);

			if (!field) return;

			// build element specific options
			var o = $.meta ? $.extend({}, opts, label.data()) : opts;

			label.addClass(o.label_class);

			var hide_label = function () { label.css(o.hide_css) };
			var show_label = function () { this.value || label.css(o.show_css) };

			$(field)
                 .parent().addClass(o.wrapper_class).end()
                 .focus(hide_label).blur(show_label).each(hide_label).each(show_label);

			return this;

		});

		return opts.filter ? selection : selection.end();
	};

	// publicly accessible defaults
	$.fn.overlabel.defaults = {

		label_class: 'overlabel-apply',
		wrapper_class: 'overlabel-wrapper',
		hide_css: { 'text-indent': '-10000px' },
		show_css: { 'text-indent': '0px', 'cursor': 'text' },
		filter: false

	};

})(jQuery);


