
(function($) {

  $.fn.example = function(text, args) {

   
    var isCallback = $.isFunction(text);

   
    var options = $.extend({}, args, {example: text});

    return this.each(function() {

      var $this = $(this);

    
      if ($.metadata) {
        var o = $.extend({}, $.fn.example.defaults, $this.metadata(), options);
      } else {
        var o = $.extend({}, $.fn.example.defaults, options);
      }

     
      if (!$.fn.example.boundClassNames[o.className]) {

      
        $(window).unload(function() {
          $('.' + o.className).val('');
        });

        $('form').submit(function() {

          
          $(this).find('.' + o.className).val('');
        });

        
        $.fn.example.boundClassNames[o.className] = true;
      }

     
      if (!$this.attr('defaultValue') && (isCallback || $this.val() == o.example))
        $this.val('');

     
      if ($this.val() == '' && this != document.activeElement) {
        $this.addClass(o.className);

       
        $this.val(isCallback ? o.example.call(this) : o.example);
      }

   
      $this.focus(function() {

       
        if ($(this).is('.' + o.className)) {
          $(this).val('');
          $(this).removeClass(o.className);
        }
      });

      
      $this.change(function() {
        if ($(this).is('.' + o.className)) {
          $(this).removeClass(o.className);
        }
      });

     
      $this.blur(function() {
        if ($(this).val() == '') {
          $(this).addClass(o.className);

         
          $(this).val(isCallback ? o.example.call(this) : o.example);
        }
      });
    });
  };

 
  $.fn.example.defaults = {
    className: 'example'
  };

 
  $.fn.example.boundClassNames = [];

})(jQuery);

