1 if (!window.RichFaces) {
  2     window.RichFaces = {};
  3 }
  4 
  5 (function($, rf) {
  6 
  7     rf.ui = rf.ui || {};
  8 
  9     var evaluate = function(selector) {
 10         var result = selector;
 11         try {
 12             result = eval(selector);
 13         } catch (e) {
 14             //do nothing
 15         }
 16         return result;
 17     };
 18 
 19     var evaluateJQuery = function(element, selector) {
 20         var result = element || evaluate(selector);
 21         if (!(result instanceof $)) {
 22             result = $(result || "");
 23         }
 24 
 25         return result;
 26     };
 27 
 28     var createEventHandlerFunction = function(opts) {
 29         var newFunction = new Function("event", opts.query);
 30         
 31         return function() {
 32             var selector = evaluateJQuery(null, opts.selector);
 33             if (opts.attachType != "live") {
 34                 selector[opts.attachType || "bind"](opts.event, null, newFunction);
 35             } else { // $.live is deprecated in jQuery 1.9+
 36                 $(document).on(opts.event, selector.selector, null, newFunction);
 37             }
 38         };
 39     };
 40 
 41     var createDirectQueryFunction = function(opts) {
 42         var queryFunction = new Function("options", "arguments[1]." + opts.query);
 43 
 44         return function() {
 45             var element;
 46             var options;
 47 
 48             if (arguments.length == 1) {             
 49     	        if (!opts.selector) {
 50 		        	//if selector is not present take selector as default
 51 		         	element = arguments[0];
 52 	        	}else{
 53 		        	//if selector is allready presen from rich jQuery component take options as default.
 54 			        options = arguments[0];	
 55 	        	}		     
 56 		
 57             } else {
 58                 //function(element, options) { ...query()... }
 59                 element = arguments[0];
 60                 options = arguments[1];
 61             }
 62 
 63             var selector = evaluateJQuery(element, opts.selector);
 64             queryFunction.call(this, options, selector);
 65         };
 66     };
 67 
 68     var createQueryFunction = function(options) {
 69         if (options.event) {
 70             return createEventHandlerFunction(options);
 71         } else {
 72             return createDirectQueryFunction(options);
 73         }
 74     };
 75 
 76     var query = function(options) {
 77         if (options.timing == 'immediate') {
 78             createQueryFunction(options).call(this);
 79         } else {
 80             $(document).ready(createQueryFunction(options));
 81         }
 82     };
 83 
 84     rf.ui.jQueryComponent = {
 85 
 86         createFunction: createQueryFunction,
 87 
 88         query: query
 89 
 90     };
 91 
 92 }(RichFaces.jQuery, RichFaces));
 93