(function($){
$.extend($.fn,{
livequery:function(type,fn,fn2){
var self=this,q;
if($.isFunction(type))
fn2=fn,fn=type,type=undefined;
$.each($.livequery.queries,function(i,query){
if(self.selector==query.selector&&self.context==query.context&&
type==query.type&&(!fn||fn.$lqguid==query.fn.$lqguid)&&(!fn2||fn2.$lqguid==query.fn2.$lqguid))
return(q=query)&&false;
});
q=q||new $.livequery(this.selector,this.context,type,fn,fn2);
q.stopped=false;
q.run();
return this;
},
expire:function(type,fn,fn2){
var self=this;
if($.isFunction(type))
fn2=fn,fn=type,type=undefined;
$.each($.livequery.queries,function(i,query){
if(self.selector==query.selector&&self.context==query.context&&
(!type||type==query.type)&&(!fn||fn.$lqguid==query.fn.$lqguid)&&(!fn2||fn2.$lqguid==query.fn2.$lqguid)&&!this.stopped)
$.livequery.stop(query.id);
});
return this;
}
});
$.livequery=function(selector,context,type,fn,fn2){
this.selector=selector;
this.context=context||document;
this.type=type;
this.fn=fn;
this.fn2=fn2;
this.elements=[];
this.stopped=false;
this.id=$.livequery.queries.push(this)-1;
fn.$lqguid=fn.$lqguid||$.livequery.guid++;
if(fn2)fn2.$lqguid=fn2.$lqguid||$.livequery.guid++;
return this;
};
$.livequery.prototype={
stop:function(){
var query=this;
if(this.type)
this.elements.unbind(this.type,this.fn);
else if(this.fn2)
this.elements.each(function(i,el){
query.fn2.apply(el);
});
this.elements=[];
this.stopped=true;
},
run:function(){
if(this.stopped)return;
var query=this;
var oEls=this.elements,
els=$(this.selector,this.context),
nEls=els.not(oEls);
this.elements=els;
if(this.type){
nEls.bind(this.type,this.fn);
if(oEls.length>0)
$.each(oEls,function(i,el){
if($.inArray(el,els)<0)
$.event.remove(el,query.type,query.fn);
});
}
else{
nEls.each(function(){
query.fn.apply(this);
});
if(this.fn2&&oEls.length>0)
$.each(oEls,function(i,el){
if($.inArray(el,els)<0)
query.fn2.apply(el);
});
}
}
};
$.extend($.livequery,{
guid:0,
queries:[],
queue:[],
running:false,
timeout:null,
checkQueue:function(){
if($.livequery.running&&$.livequery.queue.length){
var length=$.livequery.queue.length;
while(length--)
$.livequery.queries[$.livequery.queue.shift()].run();
}
},
pause:function(){
$.livequery.running=false;
},
play:function(){
$.livequery.running=true;
$.livequery.run();
},
registerPlugin:function(){
$.each(arguments,function(i,n){
if(!$.fn[n])return;
var old=$.fn[n];
$.fn[n]=function(){
var r=old.apply(this,arguments);
$.livequery.run();
return r;
}
});
},
run:function(id){
if(id!=undefined){
if($.inArray(id,$.livequery.queue)<0)
$.livequery.queue.push(id);
}
else
$.each($.livequery.queries,function(id){
if($.inArray(id,$.livequery.queue)<0)
$.livequery.queue.push(id);
});
if($.livequery.timeout)clearTimeout($.livequery.timeout);
$.livequery.timeout=setTimeout($.livequery.checkQueue,20);
},
stop:function(id){
if(id!=undefined)
$.livequery.queries[id].stop();
else
$.each($.livequery.queries,function(id){
$.livequery.queries[id].stop();
});
}
});
$.livequery.registerPlugin('append','prepend','after','before','wrap','attr','removeAttr','addClass','removeClass','toggleClass','empty','remove');
$(function(){$.livequery.play();});
var init=$.prototype.init;
$.prototype.init=function(a,c){
var r=init.apply(this,arguments);
if(a&&a.selector)
r.context=a.context,r.selector=a.selector;
if(typeof a=='string')
r.context=c||document,r.selector=a;
return r;
};
$.prototype.init.prototype=$.prototype;
})(jQuery);