(function(){function addListener(el,type,listener,useCapture){if(el.addEventListener){el.addEventListener(type,listener,useCapture);return{destroy:function(){el.removeEventListener(type,listener,useCapture);}};}else{var handler=function(e){listener.handleEvent(window.event,listener);};el.attachEvent('on'+type,handler);return{destroy:function(){el.detachEvent('on'+type,handler);}};}} var isTouch="ontouchstart"in window;this.FastButton=function(element,handler,useCapture){this.events=[];this.touchEvents=[];this.element=element;this.handler=handler;this.useCapture=useCapture;if(isTouch) this.events.push(addListener(element,'touchstart',this,this.useCapture));this.events.push(addListener(element,'click',this,this.useCapture));};this.FastButton.prototype.destroy=function(){for(i=this.events.length-1;i>=0;i-=1) this.events[i].destroy();this.events=this.touchEvents=this.element=this.handler=this.fastButton=null;};this.FastButton.prototype.handleEvent=function(event){switch(event.type){case 'touchstart':this.onTouchStart(event);break;case 'touchmove':this.onTouchMove(event);break;case 'touchend':this.onClick(event);break;case 'click':this.onClick(event);break;}};this.FastButton.prototype.onTouchStart=function(event){event.stopPropagation?event.stopPropagation():(event.cancelBubble=true);this.touchEvents.push(addListener(this.element,'touchend',this,this.useCapture));this.touchEvents.push(addListener(document.body,'touchmove',this,this.useCapture));this.startX=event.touches[0].clientX;this.startY=event.touches[0].clientY;};this.FastButton.prototype.onTouchMove=function(event){if(Math.abs(event.touches[0].clientX-this.startX)>10||Math.abs(event.touches[0].clientY-this.startY)>10){this.reset();}};this.FastButton.prototype.onClick=function(event){event.stopPropagation?event.stopPropagation():(event.cancelBubble=true);this.reset();var result=this.handler.call(this.element,event);if(event.type=='touchend') clickbuster.preventGhostClick(this.startX,this.startY);return result;};this.FastButton.prototype.reset=function(){for(i=this.touchEvents.length-1;i>=0;i-=1) this.touchEvents[i].destroy();this.touchEvents=[];};this.clickbuster=function(){};this.clickbuster.preventGhostClick=function(x,y){clickbuster.coordinates.push(x,y);window.setTimeout(clickbuster.pop,2500);};this.clickbuster.pop=function(){clickbuster.coordinates.splice(0,2);};this.clickbuster.onClick=function(event){for(var i=0;i