/** * jQuery.labelify - Display in-textbox hints * Stuart Langridge, http://www.kryogenix.org/ * Released into the public domain * Date: 25th June 2008 * @author Stuart Langridge * @version 1.3 * * * Basic calling syntax: $("input").labelify(); * Defaults to taking the in-field label from the field's title attribute * * You can also pass an options object with the following keys: *   text *     "title" to get the in-field label from the field's title attribute  *      (this is the default) *     "label" to get the in-field label from the inner text of the field's label *      (note that the label must be attached to the field with for="fieldid") *     a function which takes one parameter, the input field, and returns *      whatever text it likes * *   labelledClass *     a class that will be applied to the input field when it contains the *      label and removed when it contains user input. Defaults to blank. *   */jQuery.fn.labelify = function(settings) {  settings = jQuery.extend({    text: "title",    labelledClass: ""  }, settings);  var lookups = {    title: function(input) {      return $(input).attr("title");    },    label: function(input) {      return $("label[for=" + input.id +"]").text();    }  };  var lookup;  var jQuery_labellified_elements = $(this);  return $(this).each(function() {    if (typeof settings.text === "string") {      lookup = lookups[settings.text]; // what if not there?    } else {      lookup = settings.text; // what if not a fn?    };    // bail if lookup isn't a function or if it returns undefined    if (typeof lookup !== "function") { return; }    var lookupval = lookup(this);    if (!lookupval) { return; }    // need to strip newlines because the browser strips them    // if you set textbox.value to a string containing them        $(this).data("label",lookup(this).replace(/\n/g,''));    $(this).focus(function() {      if (this.value === $(this).data("label")) {        this.value = this.defaultValue;        $(this).removeClass(settings.labelledClass);      }    }).blur(function(){      if (this.value === this.defaultValue) {        this.value = $(this).data("label");        $(this).addClass(settings.labelledClass);      }    });        var removeValuesOnExit = function() {      jQuery_labellified_elements.each(function(){        if (this.value === $(this).data("label")) {          this.value = this.defaultValue;          $(this).removeClass(settings.labelledClass);        }      })    };        $(this).parents("form").submit(removeValuesOnExit);    $(window).unload(removeValuesOnExit);        if (this.value !== this.defaultValue) {      // user already started typing; don't overwrite their work!      return;    }    // actually set the value    this.value = $(this).data("label");    $(this).addClass(settings.labelledClass);  });};