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         return function() {
 30             var selector = evaluateJQuery(null, opts.selector);
 31             selector[opts.attachType || "bind"](opts.event, null, new Function("event", opts.query));
 32         };
 33     };
 34 
 35     var createDirectQueryFunction = function(opts) {
 36         var queryFunction = new Function("options", "arguments[1]." + opts.query);
 37 
 38         return function() {
 39             var element;
 40             var options;
 41 
 42             if (arguments.length == 1) {             
 43     	        if (!opts.selector) {
 44 		        	//if selector is not present take selector as default
 45 		         	element = arguments[0];
 46 	        	}else{
 47 		        	//if selector is allready presen from rich jQuery component take options as default.
 48 			        options = arguments[0];	
 49 	        	}		     
 50 		
 51             } else {
 52                 //function(element, options) { ...query()... }
 53                 element = arguments[0];
 54                 options = arguments[1];
 55             }
 56 
 57             var selector = evaluateJQuery(element, opts.selector);
 58             queryFunction.call(this, options, selector);
 59         };
 60     };
 61 
 62     var createQueryFunction = function(options) {
 63         if (options.event) {
 64             return createEventHandlerFunction(options);
 65         } else {
 66             return createDirectQueryFunction(options);
 67         }
 68     };
 69 
 70     var query = function(options) {
 71         if (options.timing == 'immediate') {
 72             createQueryFunction(options).call(this);
 73         } else {
 74             $(document).ready(createQueryFunction(options));
 75         }
 76     };
 77 
 78     rf.ui.jQueryComponent = {
 79 
 80         createFunction: createQueryFunction,
 81 
 82         query: query
 83 
 84     };
 85 
 86 }(RichFaces.jQuery, RichFaces));
 87