window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(n){window.setTimeout(n,42)}}(),function(n){"use strict";var i={},t={};t.topics={"*":n.Callbacks("unique memory")};i.publish=function(){var n=[].slice.call(arguments);n.unshift(window);i.publishWith.apply(this,n)};i.publishWith=function(i,r){var u,s,e,o,f;for(f=[].slice.call(arguments),f.shift(),f.shift(),r=t.parse_topics(r),s=r.length,u=0;u<s;u++){for(e=r[u].split(".");e.length;)o=e.join("."),e.pop(),t.topics[o]||(t.topics[o]=n.Callbacks("unique memory")),t.publish(i,o,r[u],f);t.publish(i,"*",r[u],f)}};i.subscribe=function(i,r){n.isFunction(r)||console.error("You must subscribe with a function",arguments);var u,e,f;for(i=t.parse_topics(i),e=i.length,u=0;u<e;u++)f=i[u],t.topics[f]||(t.topics[f]=n.Callbacks("unique memory")),t.topics[f].add(r)};i.unsubscribe=function(i,r){n.isFunction(r)||console.error("You must unsubscribe with a function");var u,e,f;for(i=t.parse_topics(i),e=i.length,u=0;u<e;u++)f=i[u],t.topics[f]&&t.topics[f].remove(r)};i.clear=function(i){t.topics[i]=n.Callbacks("unique memory")};i.purge=function(){for(var n in t.topics)t.topics.hasOwnProperty(n)&&i.clear(n)};t.parse_topics=function(n){return n.split(" ")};t.publish=function(n,i,r,u){u=u.slice();t.topics[i]&&r&&(u.unshift(r),window.requestAnimFrame(function(){t.topics[i].fireWith(n,u)}))};n.pubsub=i}(jQuery)