1 /*jslint 
  2 browser: true,
  3 nomen: false,
  4 debug: true,
  5 forin: true,
  6 undef: true,
  7 white: false,
  8 onevar: false 
  9  */
 10 var sc;
 11  
 12 
 13 /**
 14  * add an event listener to a target (element, window, etc). Uses target.addEventListener
 15  * 
 16  * @param {object} target
 17  * @param {string} event_type
 18  * @param {function} handler  a method that will take the event as a param, and "this" refers to target
 19  * @param {Object} [scope] the scope to execute the handler within (what "this" refers to)
 20  * @param {boolean} [use_capture]  defaults to false
 21  * @returns {function} the handler that was passed -- or created, if we passed a scope. You can use this to remove the listener later on
 22  * @member sc.helpers 
 23  */
 24 sc.helpers.addListener = function(target, event_type, handler, scope, use_capture) {
 25 	
 26 	if (scope) {
 27 		sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler');
 28 	}
 29 	if (use_capture) {
 30 		sch.warn('use_capture no longer supported!');
 31 	}
 32 	
 33 	sch.debug('listening for '+event_type);
 34 	sch.debug('on target nodeName:'+target.nodeName);
 35 	
 36 	jQuery(target).bind(event_type, handler);
 37 	
 38 };
 39 
 40 
 41 /**
 42  * removes an event listener on a target (element, window, etc). uses Uses target.removeEventListener
 43  * 
 44  * Note that you must match all of the parameters to successfully remove the listener
 45  * 
 46  * @param {object} target
 47  * @param {string} event_type
 48  * @param {function} handler  a method that will take the event as a param, and "this" refers to target
 49  * @param {Object} scope the scope to execute the handler
 50  * @param {boolean} use_capture  defaults to false
 51  * @member sc.helpers 
 52  */
 53 sc.helpers.removeListener = function(target, event_type, handler, use_capture) {
 54 
 55 	sch.debug('removing listener for '+event_type);
 56 	sch.debug('on target nodeName:'+target.nodeName);
 57 
 58 	if (use_capture) {
 59 		sch.warn('use_capture no longer supported!');
 60 	}
 61 	
 62 	jQuery(target).unbind(event_type, handler);
 63 };
 64 
 65 /**
 66  * @param {DOMElement} base_target The base target where the delegated listener will be set-up
 67  * @param {string} selector The CSS Selector that will be used to match incoming events. Matching is done with jQuery
 68  * @param {string} event_type The event type 
 69  * @param {Function} handler a method that will take the event as a param, and "this" refers to target
 70  * @param {Object} [scope] the scope to execute the handler
 71  * @param {Boolean} [use_capture] Describe this parameter
 72  */
 73 sc.helpers.addDelegatedListener = function(base_target, selector, event_type, handler, scope) {
 74 	
 75 	sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler');
 76 	
 77 	sch.debug('listening for '+event_type);
 78 	sch.debug('on target nodeName:'+target.nodeName);
 79 	sch.debug('for selector:'+selector);
 80 	
 81 	jQuery(base_target).delegate(selector, event_type, handler);
 82 
 83 	
 84 };
 85 
 86 /**
 87  * @param {DOMElement} base_target The base target where the delegated listener will be set-up
 88  * @param {string} selector The CSS Selector that will be used to match incoming events. Matching is done with jQuery
 89  * @param {string} event_type The event type 
 90  * @param {Function} handler a method that will take the event as a param, and "this" refers to target
 91  * @param {Object} [scope] the scope to execute the handler
 92  */
 93 sc.helpers.removeDelegatedListener = function(base_target, selector, event_type, handler, scope) {
 94 	sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler');
 95 	
 96 	jQuery(base_target).delegate(selector, event_type, handler);
 97 	
 98 };
 99 
100 /**
101  * This triggers a custom event using document.createEvent('Events') and target.dispatchEvent()
102  * 
103  * @param {string}  event_type
104  * @param {DOMElement}  target   the target for the event (element, window, etc)
105  * @param {object}  data     data to pass with event. it is always passed as the second parameter to the handler (after the event object)
106  * @param {boolean} bubble   whether the event should bubble or not. defaults to true
107  * @member sc.helpers 
108  */
109 sc.helpers.triggerCustomEvent = function(event_type, target, data, bubble) {
110 	
111 	sch.error('triggering '+event_type);
112 	sch.error('on target nodeName:'+target.nodeName);
113 	sch.error('event data:');
114 	// sch.error(sch.enJSON(data));
115 	
116 	if (bubble) {
117 		sch.warn('bubble is no longer supported!');
118 	}
119 	
120 	if (data) {
121 		data = [data];
122 	}
123 	
124 	jQuery(target).trigger(event_type, data);
125 	
126 };
127 
128 /**
129  * retrieves the data added to this event object
130  * @param {DOMEvent} event_obj 
131  * @deprecated
132  */
133 sc.helpers.getEventData = function(event_obj) {
134 	sch.error('getEventData is DEPRECATED. Use second param on event handler');
135 	return null;
136 };
137 
138 /**
139  * Alias for sc.helpers.addListener 
140  * @member sc.helpers 
141  * @function
142  */
143 sc.helpers.listen = sc.helpers.addListener;
144 
145 /**
146  * Alias for sc.helpers.removeListener
147  * @member sc.helpers 
148  * @function
149  */
150 sc.helpers.unlisten = sc.helpers.removeListener;
151 
152 /**
153  * Alias for sc.helpers.addDelegatedListener
154  * @member sc.helpers  
155  * @function
156  */
157 sc.helpers.delegate = sc.helpers.addDelegatedListener;
158 
159 /**
160  * Alias for sc.helpers.removeDelegatedListener
161  * @member sc.helpers  
162  * @function
163  */
164 sc.helpers.undelegate = sc.helpers.removeDelegatedListener;
165 
166 
167 /**
168  * Alias for sc.helpers.triggerCustomEvent 
169  * @member sc.helpers 
170  * @function
171  */
172 sc.helpers.trigger  = sc.helpers.triggerCustomEvent;