text: /**
   * Prevent click events after a touchend.
   * 
   * Inspired/copy-paste from this article of Google by Ryan Fioravanti
   * https://developers.google.com/mobile/articles/fast_buttons#ghost
   * 
   * USAGE: 
   * Prevent the click event for an certain element
   * ````
   *  PreventGhostClick(myElement);
   * ````
   * 
   * Prevent clicks on the whole document (not recommended!!) * 
   * ````
   *  PreventGhostClick(document);
   * ````
   * 
   */
  (function(window, document, exportName) {
      var coordinates = [];
      var threshold = 25;
      var timeout = 2500;
  
      // no touch support
      if(!("ontouchstart" in window)) {
          window[exportName] = function(){};
          return;
      }
  
      /**
       * prevent clicks if they're in a registered XY region
       * @param {MouseEvent} ev
       */
      function preventGhostClick(ev) {
          for (var i = 0; i < coordinates.length; i++) {
              var x = coordinates[i][0];
              var y = coordinates[i][1];
  
              // within the range, so prevent the click
              if (Math.abs(ev.clientX - x) < threshold && Math.abs(ev.clientY - y) < threshold) {
                  ev.stopPropagation();
                  ev.preventDefault();
                  break;
              }
          }
      }
  
      /**
       * reset the coordinates array
       */
      function resetCoordinates() {
          coordinates = [];
      }
  
      /**
       * remove the first coordinates set from the array
       */
      function popCoordinates() {
          coordinates.splice(0, 1);
      }
  
      /**
       * if it is an final touchend, we want to register it's place
       * @param {TouchEvent} ev
       */
      function registerCoordinates(ev) {
          // touchend is triggered on every releasing finger
          // changed touches always contain the removed touches on a touchend
          // the touches object might contain these also at some browsers (firefox os)
          // so touches - changedTouches will be 0 or lower, like -1, on the final touchend
          if(ev.touches.length - ev.changedTouches.length <= 0) {
              var touch = ev.changedTouches[0];
              coordinates.push([touch.clientX, touch.clientY]);
  
              setTimeout(popCoordinates, timeout);
          }
      }
  
      /**
       * prevent click events for the given element
       * @param {EventTarget} el
       */
      window[exportName] = function(el) {
          el.addEventListener("touchstart", resetCoordinates, true);
          el.addEventListener("touchend", registerCoordinates, true);
      };
  
      document.addEventListener("click", preventGhostClick, true);
  })(window, document, 'PreventGhostClick');
  