+function liveHandler( event ) {
+ var stop = true, elems = [], args = arguments;
+
+ jQuery.each( jQuery.data( this, "events" ).live || [], function( i, fn ) {
+ if ( fn.live === event.type ) {
+ var elem = jQuery( event.target ).closest( fn.selector )[0];
+ if ( elem ) {
+ elems.push({ elem: elem, fn: fn });
+ }
+ }
+ });
+
+ elems.sort(function( a, b ) {
+ return jQuery.data( a.elem, "closest" ) - jQuery.data( b.elem, "closest" );
+ });
+
+ jQuery.each(elems, function() {
+ event.currentTarget = this.elem;
+ event.data = this.fn.data;
+ if ( this.fn.apply( this.elem, args ) === false ) {
+ return (stop = false);
+ }
+ });
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
+}
+