// $Id: jquery.overlabel.js,v 1.1.2.1 2010/02/14 06:44:15 sociotech Exp $ (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);