text: var hasTouch = 'ontouchend' in window, eventTimer;
  var moveDirection = 'undefined', startX, startY, deltaX, deltaY, mouseDown = false;
  
  function addTouchEvents(element){
      if (hasTouch) {
          element.addEventListener("touchstart", touch2Mouse, true);
          element.addEventListener("touchmove", touch2Mouse, true);
          element.addEventListener("touchend", touch2Mouse, true);
      }
  }
  
  function touch2Mouse(e)
  {
      var theTouch = e.changedTouches[0];
      var mouseEv;
  
      switch(e.type)
      {
          case "touchstart": mouseEv="mousedown"; break;
          case "touchend":   mouseEv="mouseup"; break;
          case "touchmove":  mouseEv="mousemove"; break;
          default: return;
      }
  
  
      if (mouseEv == "mousedown") {
          eventTimer = (new Date()).getTime();
          startX = theTouch.clientX;
          startY = theTouch.clientY;
          mouseDown = true;
      }
  
      if (mouseEv == "mouseup") {
          if ((new Date()).getTime() - eventTimer <= 500) {
              mouseEv = "click";
          } else if ((new Date()).getTime() - eventTimer > 1000) {
              mouseEv = "longclick";
          }
          eventTimer = 0;
          mouseDown = false;
      }
  
      if (mouseEv == "mousemove") {
          if (mouseDown) {
              deltaX = theTouch.clientX - startX;
              deltaY = theTouch.clientY - startY;
              moveDirection = deltaX > deltaY ? 'horizontal' : 'vertical';
          }
      }
  
      var mouseEvent = document.createEvent("MouseEvent");
      mouseEvent.initMouseEvent(mouseEv, true, true, window, 1, theTouch.screenX, theTouch.screenY, theTouch.clientX, theTouch.clientY, false, false, false, false, 0, null);
      theTouch.target.dispatchEvent(mouseEvent);
  
      e.preventDefault();
  }
  