(function(b){b.listen=function(i,f,j,h){if(b.listen.illegal(i)){throw'jQuery.Listen > "'+i+"\" can't be handled because it doesn't bubble"}if(typeof f!="object"){h=j,j=f,f=document}var g=jQuery.data(f,"indexer-"+i)||jQuery.data(f,"indexer-"+i,new a(i,f));switch(j){case undefined:case false:g.stop();break;default:g.append(j,h);case true:g.start();break}};b.fn.listen=function(g,h,f){return this.each(function(){b.listen(g,this,h,f)})};b.extend(b.listen,{strict:true,bubbles:{},illegal:function(f){return this.strict&&!this.bubbles[f]}});b.each(("click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,keydown,keypress,keyup").split(","),function(f,g){b.listen.bubbles[g]=true});function a(g,f){this.ids={};this.names={};this.listener=f;this.event=g;a.instances.push(this)}a.instances=[];a.prototype={constructor:a,handler:function(g){var f=g.data;g.data=null;f.parse.apply(f,arguments)},running:false,start:function(){if(this.running){return}b.event.add(this.listener,this.event,this.handler,this);this.running=true},stop:function(){if(!this.running){return}b.event.remove(this.listener,this.event,this.handler);this.running=false},parse:function(g){var h=g.target,f=[];if(h.id&&this.ids[h.id]){c(f,this.ids[h.id])}e([h.nodeName,"*"],function(i){var j=this.names[i];if(j){e(c(h.className.split(" "),["*"]),function(k){if(j[k]){c(f,j[k])}})}},this);this.execute(h,f,arguments);h=f=g=null},append:function(h,g){var i=new d(h);if(i.id){(this.ids[i.id]||(this.ids[i.id]=[])).push(g)}else{if(i.nodeName){var f=this.names[i.nodeName]||(this.names[i.nodeName]={});(f[i.className]||(f[i.className]=[])).push(g)}else{throw'jQuery.Listen > "'+h+'" was not recognized as a valid selector.'}}},execute:function(h,f,g){if(f.length){e(f,function(i){i.apply(h,g)})}}};function d(g){var f=d.regex.exec(g)||[];if(f[1]){this.id=f[1]}else{if(f[2]||f[3]){this.nodeName=f[2]?f[2].toUpperCase():"*";this.className=f[3]?f[3].substring(1):"*"}}}d.regex=/#([\w\d_-]+)$|(\w*)(\.[\w_]+)?$/;function e(g,f,k){for(var j=0,h=g.length;j<h;j++){f.call(k,g[j],j)}}function c(f,g){Array.prototype.push.apply(f,g);return f}b.event.add(window,"unload",function(){if(a){b.each(a.instances,function(f,g){g.stop();g.listener=null})}})})(jQuery);
