  }
        }
        node[gn] = node[gn] ? (node[gn] - 1) : 0;
        node.removeEventListener(evType, handler);
      }
    },

    register: function(recog) {
      this.gestures[recog.name] = recog;
    },

    // touch will make synthetic mouse events
    // preventDefault on touchend will cancel them,
    // but this breaks <input> focus and link clicks
    // Disabling "mouse" handlers for 500ms is enough

    _cancelFunction: null,

    cancelNextClick: function(timeout) {
      