1 /** cross browser event handling and tracking
  2 * Not instanciable. 
  3 *@constructor
  4 */
  5 var YEvt = {	listeners:[],
  6 	// eventFunk(event,datas)
  7 	/** add event listener
  8 	*	@param {DomElement} trigger element triggering the event.
  9 	*	@param {string} eventDesc event name (ex:'mouseup').
 10 	*	@param {function} Function function called when event is fired.<br/>of type : Function(event,datas);
 11 	*	@param {mixed} [datas] miscalenous datas that could be used by <b>Function</b>.
 12 	*	@return {int} event listener index.
 13 	*/
 14 	"add":function(trigger,eventDesc,eventFunk,datas) {
 15 		trigger=YDom.get(trigger);
 16 		var evitm = { tr:trigger , de:eventDesc , fu:eventFunk , da:datas};
 17 		var evst = "this.funk = function(e){var ls =YEvt.listeners["+(YEvt.listeners.length)+"];"+
 18 					" if(ls){ls.fu(browserIsIe?event:e,ls.da);}	};";
 19 		eval(evst);
 20 		if( navigator.userAgent.toLowerCase().indexOf("firefox") && eventDesc=="mousewheel" )eventDesc = 'DOMMouseScroll';
 21 		try{	if(trigger.addEventListener)	trigger.addEventListener(eventDesc,this.funk,false);
 22 				else							trigger.attachEvent("on"+eventDesc,this.funk);
 23 		}catch(e){
 24 			throw("Error YEvt.add :\n"+e);
 25 		};
 26 		YEvt.listeners.push(evitm);
 27 		this.funk = null;
 28 		return YEvt.listeners.lengt - 1;
 29 	},
 30 	/** add events listener
 31 	*	@param {DomElement} trigger element triggering the event.
 32 	*	@param {string[]} eventDescList events names (ex:['mouseup','mousedown']).
 33 	*	@param {function} Function function called when event is fired.<br/>of type : Function(event,eventDesc,datas);
 34 	*	@param {mixed} [datas] miscalenous datas that could be used by <b>Function</b>.
 35 	*	@return {int[]} events listener index list.
 36 	*/
 37 	addCollection:function(trigger,eventDescList,onEvt,datas) {
 38 		var indexes=[];
 39 		for(var i in eventDescList){
 40 			var obj={
 41 				onEvt	: onEvt,
 42 				datas	: datas,
 43 				desc	: eventDescList[i]
 44 			};
 45 			indexes.push(
 46 				YEvt.add(trigger,obj.desc,function(evt,dat){
 47 					dat.onEvt(evt,dat.desc,dat.datas);
 48 				},obj)
 49 			);
 50 		}
 51 		return indexes;
 52 	},
 53 	/** remove event listener by it's index. */
 54 	"remove":function(evindx) {
 55 		if(evindx>-1 && evindx<YEvt.pile.length)YEvt.listeners[evindx]=null;
 56 		return evindx;
 57 	}
 58 };