var saReceiver = "http://sa-receiver.sematext.com/receiver/v1/receive";

function track(trackUrl) {
  try {
    performRequest(trackUrl);
  } catch(err) {
    // TODO
  }
}

function performRequest(trackUrl) {
  var head = document.getElementsByTagName("head").item(0);
  var script = document.createElement("script");
  script.setAttribute("type", "text/javascript");
  script.setAttribute("src", trackUrl);
  head.appendChild(script);
}

function trackAndRedirect(link, trackUrl) {
  track(trackUrl);
  setTimeout('document.location = "' + link + '"', 250)
}

function trackClick(stats, link) {
  var trackUrl = getTrackUrl(stats) +
      (stats.position == null ? "" : "&position=" + stats.position) +
      (stats.cDocId == null ? "" : "&cDocId=" + stats.cDocId);
  trackAndRedirect(link, trackUrl);
}

function trackSearch(stats) {
  var trackUrl = getTrackUrl(stats);
  track(trackUrl);
}

function getTrackUrl(stats) {
  var docIds = "";
  if (stats.docIds != null) {
    for (i = 0; i < stats.docIds.length; i++) {
      docIds += "&docId=" + stats.docIds[i];
    }
  }

  var trackUrl = saReceiver + "?tok=" + stats.token +
      "&mcv=v1" + // version of mcjs
      (stats.session == null ? "" : "&session=" + stats.session) +
      (stats.query == null ? "" : "&query=" + stats.query) +
      (stats.sort == null ? "" : "&sort=" + stats.sort) +
      (stats.latency == null ? "" : "&latency=" + stats.latency) +
      (stats.hitsTotal == null ? "" : "&hitsTotal=" + stats.hitsTotal) +
      (stats.version == null ? "" : "&version=" + stats.version) +
      (stats.type == null ? "" : "&type=" + stats.type) +
      (stats.rsType == null ? "" : "&rsType=" + stats.rsType) +
      (stats.user == null ? "" : "&user=" + stats.user) +
      (stats.custom1 == null ? "" : "&custom1=" + stats.custom1) +
      (stats.custom2 == null ? "" : "&custom2=" + stats.custom2) +
      (stats.ref == null ? "" : "&ref=" + stats.ref) +
      (stats.refInfo == null ? "" : "&refInfo=" + stats.refInfo) +
      (stats.itemQType == null ? "" : "&itemQType=" + stats.itemQType) +
      (stats.page == null ? "" : "&page=" + stats.page) +
      docIds +
      (stats.hitsShown == null ? "" : "&hitsShown=" + stats.hitsShown) +
      "&pageUrl=" + document.URL +
      "&tt=" + (new Date().getTime()); // this is needed so that we have each time new url and every click/search is logged

  return trackUrl;
}

