(function($) {
  
  $.fn.extend({
    hint: function() {
      return this.each(function() {
        // Find the element this hint is for
        var element = $(this).attr("for");
      
        // Find the value of the label
        var hintText = $(this).html();
      
        new Hint("#" + element, hintText);
      });
    }
  });

  var Hint = function(element, hintText) {
    this.element = $(element);
    this.element.data("hintText", hintText);
  
    var me = this;
    this.element
      .bind("blur", function(event) {
        me.showHint();
      })
      .bind("focus", function(event) {
        me.hideHint();
      });
  
    $(function() {
      me.showHint();
    });
  };

  $.extend(Hint.prototype, {
    showHint: function() {
      var hintText = this.element.data("hintText");
      
      if (this.element.val() == "" || this.element.val() == hintText) {
        this.element.val(hintText);
        this.element.addClass("hint")
      }
    },
  
    hideHint: function() {
      var hintText = this.element.data("hintText");
      
      if (this.element.val() == hintText) {
        this.element.val("");
        this.element.removeClass("hint");
      }
    }
  });
  
}) (jQuery);