function(type, fn) {
			var self = this, list, i;

			type = type.toLowerCase();

			if (/\s/.test(type)) {
				// multiple event types were passed for one handler
				Basic.each(type.split(/\s+/), function(type) {
					self.removeEventListener(type, fn);
				});
				return;
			}

			list = eventpool[this.uid] && eventpool[this.uid][type];

			if (list) {
				if (fn) {
					for (i = list.length - 1; i >= 0; i--) {
						if (list[i].fn === fn) {
							list.splice(i, 1);
							break;
						}
					}
				} else {
					list = [];
				}

				// delete event list if it has become empty
				if (!list.length) {
					delete eventpool[this.uid][type];

					// and object specific entry in a hash if it has no more listeners attached
					if (Basic.isEmptyObj(eventpool[this.uid])) {
						delete eventpool[this.uid];
					}
				}
			}
		}
function(type, fn) {
			var self = this, list, i;

			type = type.toLowerCase();

			if (/\s/.test(type)) {
				// multiple event types were passed for one handler
				Basic.each(type.split(/\s+/), function(type) {
					self.removeEventListener(type, fn);
				});
				return;
			}

			list = eventpool[this.uid] && eventpool[this.uid][type];

			if (list) {
				if (fn) {
					for (i = list.length - 1; i >= 0; i--) {
						if (list[i].fn === fn) {
							list.splice(i, 1);
							break;
						}
					}
				} else {
					list = [];
				}

				// delete event list if it has become empty
				if (!list.length) {
					delete eventpool[this.uid][type];

					// and object specific entry in a hash if it has no more listeners attached
					if (Basic.isEmptyObj(eventpool[this.uid])) {
						delete eventpool[this.uid];
					}
				}
			}
		}
function ( type , fn ) { var self = this , list , i ; type = type . toLowerCase ( ) ; if ( / \s / . test ( type ) ) { // multiple event types were passed for one handler Basic . each ( type . split ( / \s+ / ) , function ( type ) { self . removeEventListener ( type , fn ) ; } ) ; return ; } list = eventpool [ this . uid ] && eventpool [ this . uid ] [ type ] ; if ( list ) { if ( fn ) { for ( i = list . length - 1 ; i >= 0 ; i -- ) { if ( list [ i ] . fn === fn ) { list . splice ( i , 1 ) ; break ; } } } else { list = [ ] ; } // delete event list if it has become empty if ( ! list . length ) { delete eventpool [ this . uid ] [ type ] ; // and object specific entry in a hash if it has no more listeners attached if ( Basic . isEmptyObj ( eventpool [ this . uid ] ) ) { delete eventpool [ this . uid ] ; } } } }
Unregister the handler from the event, or if former was not specified - unregister all handlers

@method removeEventListener
@param {String} type Type or basically a name of the event
@param {Function} [fn] Handler to unregister
Unregister the handler from the event or if former was not specified - unregister all handlers