﻿function subscribeEvent(event, listener, useCapture) {
  if (document.addEventListener) {
    document.addEventListener(event, listener, useCapture);
  } else if (document.attachEvent) {
    document.attachEvent(event, listener, useCapture);
  }
}

function unsubscribeEvent(event, listener, useCapture) {
  if (document.removeEventListener) {
    document.removeEventListener(event, listener, useCapture);
  } else if (document.detachEvent) {
    document.detachEvent(event, listener, useCapture);
  }
}

function startActivityHandler(e) {
  unsubscribeEvent("touchstart", arguments.callee, false);
  document.documentElement.onmousemove = null; // We need it here to turn off mouse move too.

  if (true) {
    timeoutSleep(0, placeCssAspxRequest);
  }
};

document.documentElement.onmousemove = startActivityHandler;
subscribeEvent("touchstart", startActivityHandler, false);

function placeCheckerRequest() {
  var stt1 = getVirtualFolder();
  var stt2 = "layouts/system/VIChecker.aspx";
  var stt3 = addTstampAndSiteToQueryString(getMetatagContent("VIcurrentDateTime"));

  var fileref = document.createElement('link');
  fileref.setAttribute('rel', 'stylesheet');
  fileref.setAttribute('type', 'text/css');
  fileref.setAttribute('href', stt1 + stt2 + stt3);
  document.getElementsByTagName("head")[0].appendChild(fileref);
}

function placeCssAspxRequest() {
  var st1 = getVirtualFolder();
  var st2 = "layouts/system/VisitorIdentificationCSS.aspx";
  var st3 = addTstampAndSiteToQueryString(new Date().getTime());

  var fileref = document.createElement('link');
  fileref.setAttribute('rel', 'stylesheet');
  fileref.setAttribute('type', 'text/css');
  fileref.setAttribute('href', st1 + st2 + st3);
  document.getElementsByTagName("head")[0].appendChild(fileref);

  timeoutSleep(30000, placeCheckerRequest);
}

function timeoutSleep(milliseconds, callbackFunction) {
  window.setTimeout(
    function() {
      callbackFunction();
    },
    milliseconds);
}

function getMetatagContent(metatagName) {
  var metas = document.getElementsByTagName('meta');
  var metaContent;

  for (var i = 0; i < metas.length; i++) {
    if (metas[i].getAttribute("name") === metatagName) {
      metaContent = metas[i].getAttribute("content");
      break;
    }
  }
  if (!metaContent) {
    metaContent = "";
    console.log("Metatag '" + metatagName + "' content is expected to be rendered in document and not to be empty");
  }

  return metaContent;
}

function addTstampAndSiteToQueryString(tstamp) {
  var qsParams = window.location.search;
  var timestampParam = "tstamp=" + tstamp;
  var siteNameParam = qsParams.match(/sc_site=.*?&|sc_site=.*$/);

  var queryString = "?" + timestampParam;
  if (siteNameParam !== null) {
    queryString = queryString + "&" + siteNameParam;
  }

  return queryString;
}

function getVirtualFolder() {
  var virtualFolder = getMetatagContent("VirtualFolder");
  if (virtualFolder === "") {
    virtualFolder = "/";
  }

  return virtualFolder;
}
