1 (function ($, rf) {
  2 
  3     rf.ui = rf.ui || {};
  4 
  5     var defaultOptions = {
  6         useNative: false
  7     };
  8 
  9     rf.ui.Placeholder = rf.BaseComponent.extendClass({
 10 
 11         name:"Placeholder",
 12 
 13         init: function (componentId, options) {
 14             $super.constructor.call(this, componentId);
 15             options = $.extend({}, defaultOptions, options);
 16             this.attachToDom(this.id);
 17             $(function() {
 18                 options.className = 'rf-plhdr ' + ((options.styleClass) ? options.styleClass : '');
 19                 var elements = (options.selector) ? $(options.selector) : $(document.getElementById(options.targetId));
 20                 // finds all inputs within the subtree of target elements
 21                 var inputs = elements.find('*').andSelf().filter(':editable');
 22                 inputs.watermark(options.text, options);
 23             });
 24         },
 25         // destructor definition
 26         destroy: function () {
 27             // define destructor if additional cleaning is needed but
 28             // in most cases its not nessesary.
 29             // call parent’s destructor
 30             $super.destroy.call(this);
 31         }
 32     });
 33     
 34     // once per all placeholders on a page
 35     $(function() {
 36         $(document).on('ajaxsubmit', 'form', $.watermark.hideAll);
 37         $(document).on('ajaxbegin', 'form', $.watermark.showAll);
 38             // need to use setTimeout to allow client's native reset to happen
 39         $(document).on('reset', 'form', function() {setTimeout( $.watermark.showAll, 0); });
 40     });
 41     
 42     // define super class reference - reference to the parent prototype
 43     var $super = rf.ui.Placeholder.$super;
 44 })(RichFaces.jQuery, RichFaces);