Function.prototype.method=function(name,func) {this.prototype[name]=func;return this;};Function.method('inherits',function(parent) {var d={}, p=(this.prototype=new parent());this.method('uber',function uber(name) {if(!(name in d)){d[name]=0;}var f, r, t=d[name], v=parent.prototype;if(t){while(t){v=v.constructor.prototype;t-=1;}f=v[name];} else {f=p[name];if(f==this[name]){ f=v[name];}}d[name]+=1;r=f.apply(this,Array.prototype.slice.apply(arguments,[1]));d[name]-=1;return r;});return this;});var WM3 = (function($,WM3){WM3.config={log:true};WM3.namespace=function(name){var ns=name.split('.'),root=window,i,il,n;for(i=0,il=ns.length;i<il;i++){n=ns[i];if(typeof root[n]==='undefined'){root[n]={};}root=root[n];}};WM3.log=function(message){if(WM3.config.log===true){if(typeof console!=='undefined' && typeof console.log==='function'){WM3.log=function(){console.log.apply(console,arguments);};console.log.apply(console,arguments);}}else{WM3.log=function(){};}};return WM3;}(jQuery,WM3||{}));(function($){WM3.namespace('WM3.Event');WM3.Event = function(name){ this.name=name;this.listeners=[];};WM3.Event.method('attach', function (name,listener) {if(typeof listener==='function'){this.listeners.push({name:name,listener:listener});}});WM3.Event.method('notify',function () {var i,il=this.listeners.length,args=arguments||{};WM3.log('[%d] %d.triggered: %o, %o','e+','event',this.name,args);for(i=0;i<il;i++){WM3.log('[%d] %d.notifying: %o','e-',this.name,this.listeners[i].name);this.listeners[i].listener.apply(this,args);}});}(jQuery));
