if ( !types ) 
if ( types == undefined ) 
	remove: function(elem, types, handler) {		// don't do events on text and comment nodes		if ( elem.nodeType == 3 || elem.nodeType == 8 )			return;		var events = jQuery.data(elem, "events"), ret, index;		if ( events ) {			// Unbind all events for the element			if ( !types )				for ( var type in events )					this.remove( elem, type );			else {				// types is actually an event object here				if ( types.type ) {					handler = types.handler;					types = types.type;				}								// Handle multiple events seperated by a space				// jQuery(...).unbind("mouseover mouseout", fn);				jQuery.each(types.split(/\s+/), function(index, type){					// Namespaced event handlers					var parts = type.split(".");					type = parts[0];										if ( events[type] ) {						// remove the given handler for the given type						if ( handler )							delete events[type][handler.guid];									// remove all handlers for the given type						else							for ( handler in events[type] )								// Handle the removal of namespaced events								if ( !parts[1] || events[type][handler].type == parts[1] )									delete events[type][handler];						// remove generic event handler if no more handlers exist						for ( ret in events[type] ) break;						if ( !ret ) {							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {								if (elem.removeEventListener)									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);								else if (elem.detachEvent)									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));							}							ret = null;							delete events[type];						}					}				});			}			// Remove the expando if it's no longer used			for ( ret in events ) break;			if ( !ret ) {				jQuery.removeData( elem, "events" );				jQuery.removeData( elem, "handle" );			}		}	},
6056	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/6056/3bb82a34de18b8b8e80893571d65080bf5a4702b/event.js/buggy/src/event.js