var __zHolosfindAnalyzer = {
  start: function(cid) {
    this.domain = "analyzer.holosfind.com";
    this.cid = cid;
    this.loadedOn = new Date();
    __zHolosfindAnalyzer.process();
    //this.addEvent(window, 'unload', __zHolosfindAnalyzer.onUnload);
  },
  process: function() {
    __zHolosBrowser.start();
    var nav_version = __zHolosBrowser.fullVersion;
    var nav_name = __zHolosBrowser.browserName;
    var language = __zHolosfindAnalyzer.returnLanguage();
    var referrer = __zHolosfindAnalyzer.returnReferrer();
    var new_visitor = __zHolosfindAnalyzer.getVisitorCookie();
    var new_visit = __zHolosfindAnalyzer.getVisitCookie();
    if (window['__zhf_id_cookie_from_request'] != "" && window['__zhf_id_cookie_from_request'] != undefined) {
      var parts = window['__zhf_id_cookie_from_request'].split(',');
      if (parts.length == 2) {
        new_visitor = parts[0];
        new_visit = parts[1];
      }
    }
    var _protocol = 'http' + (window.location.protocol.toLowerCase() == 'https:' ? 's' : '');

    if (window['__zhf_conv_id'] != undefined) {
      var hf_go_conversion_url = _protocol + "://" + __zHolosfindAnalyzer.domain + "/start_tracking.php"
        + "?cid=" + encodeURIComponent(__zHolosfindAnalyzer.cid)
        + "&conv_id=" + encodeURI(window['__zhf_conv_id'])
        + "&conv_devise=" + encodeURI(window['__zhf_conv_devise'])
        + "&conv_valeur=" + encodeURI(window['__zhf_conv_valeur'])
        + "&conv_ref=" + encodeURI(window['__zhf_conv_ref'])
        + "&conv_autre=" + encodeURI(window['__zhf_conv_autre'])
        + "&conv_nom=" + encodeURI(window['__zhf_conv_nom'])
        + "&conv_prenom=" + encodeURI(window['__zhf_conv_prenom'])
        + "&conv_email=" + encodeURI(window['__zhf_conv_email'])
        + "&new_visitor=" + new_visitor
        + "&new_visit=" + new_visit;

      __zHolosfindAnalyzer.buildScript(hf_go_conversion_url);
    } else {
      var resolution = screen.width=='undefined' ? 'n.c.' : screen.width + "x" + screen.height;
      var hf_go_service_url = _protocol + "://" + __zHolosfindAnalyzer.domain + "/start_tracking.php"
        + "?cid=" + encodeURIComponent(__zHolosfindAnalyzer.cid)
        + "&nav=" + encodeURIComponent(nav_name)
        + "&navv=" + encodeURIComponent(nav_version)
        + "&scwh=" + encodeURIComponent(resolution)
        + "&lan=" + encodeURIComponent(language)
        + "&os=" + encodeURIComponent(navigator.platform)
        + "&uri=" + encodeURIComponent(location.href)
        + "&referrer=" + encodeURIComponent(referrer)
        + "&new_visitor=" + new_visitor
        + "&new_visit=" + new_visit;
      __zHolosfindAnalyzer.buildScript(hf_go_service_url);
    }
  },
  onUnload: function() {
    var now = new Date();
    var href = _protocol + "://" + __zHolosfindAnalyzer.domain + "/finish_tracking.php?cid=" + __zHolosfindAnalyzer.cid + "&duration=" + (now - __zHolosfindAnalyzer.loadedOn) +
               "&new_visitor=" + __zHolosfindAnalyzer.getVisitorCookie() + "&new_visit=" + encodeURIComponent(__zHolosfindAnalyzer.getVisitCookie());
    var start = new Date();
    __zHolosfindAnalyzer.buildScript(href);
    while ((new Date() - start) < 500);
    return true;
  },
  returnLanguage: function() {
    return (navigator.browserLanguage == null) ? navigator.language : navigator.browserLanguage;
  },
  returnReferrer: function() {
    var ref;
    try {
      ref = __zHolosfindAnalyzer.getReferrer(window);
    } catch (ex) {
      ref = 'Err:' + ex;
    }
    if (ref == null || ref == "null") ref = "";
    return ref;
  },
  getVisitCookie: function() {
    return __zHolosfindAnalyzer.getCookie("_nvit");
  },
  getVisitorCookie: function() {
    return __zHolosfindAnalyzer.getCookie("_nvtor") || __zHolosfindAnalyzer.getCookie("_nvtort");
  },
  setNewVisit: function(newVisitor, newVisit) {
    var expirationDate = new Date();
    expirationDate.setTime(expirationDate.getTime() + (60 * 24 * 60 * 60 * 1000));
    __zHolosfindAnalyzer.setCookie('_nvtor', newVisitor, expirationDate, '/');
    __zHolosfindAnalyzer.setCookie('_nvtort', newVisitor, null, '/');
    __zHolosfindAnalyzer.setCookie('_nvit', newVisit, null, '/');

  },
  getHolosFindCookie: function() {
    return __zHolosfindAnalyzer.getVisitorCookie() + "," + __zHolosfindAnalyzer.getVisitCookie();
  },
  createCookie: function(name, value, days) {
    var expires;
    if (days) {
      var date = new Date();
      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
      expires = "; expires=" + date.toGMTString();
    } else {
      expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
  },
  setCookie: function(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
                      ((expires) ? "; expires=" + expires.toGMTString() : "") +
                      ((path) ? "; path=" + path : "") +
                      ((domain) ? "; domain=" + domain : "") +
                      ((secure) ? "; secure" : "");
  },
  getCookie: function(name) {
    var dc = document.cookie;
    var entries = dc.split("; ");
    var suffixes = ["", "_temp"];
    for (var suffix in suffixes) {
      var nameToFind = name + suffixes[suffix] + "=";
      for (var i = entries.length; --i >= 0;) {
        if (entries[i].indexOf(nameToFind) == 0) {
          return unescape(entries[i].substring(nameToFind.length));
        }
      }
    }
    return "";
  },
  buildScript: function(href) {
    var element = document.createElement('script');
    element.type = 'text/javascript';
    element.src = href;
    document.getElementsByTagName('head')[0].appendChild(element);
  },
  getReferrer: function(curWindow) {
    var parent = curWindow.parent, location = curWindow.location;
    if (parent && parent.location != location && parent.location.host == location.host) {
      return __zHolosfindAnalyzer.getReferrer(parent);
    }
    return curWindow.document.referrer;
  },
  rep: function(str) {
    if (str && str != "undefined" && str != "" && str.length && str.length > 0) {
      return str.replace(/\+/g, " ");
    } else {
      return "";
    }
  },
  addEvent: function (obj, type, fn) {
    if (obj.addEventListener) {
      obj.addEventListener(type, fn, false);
    } else if (obj.attachEvent) {
      obj["e" + type + fn] = fn;
      obj[type + fn] = function() {
        obj["e" + type + fn](window.event);
      }
      obj.attachEvent("on" + type, obj[type + fn]);
    } else {
      obj["on" + type] = obj["e" + type + fn];
    }
  }
}

//--------------------------- __zHolosBrowser --------------------------------//
var __zHolosBrowser = {
  start:function() {
    this.nVer = navigator.appVersion;
    this.nAgt = navigator.userAgent;
    this.browserName = '';
    this.fullVersion = 0;
    this.majorVersion = 0;
    this.verOffset = '';
    this.nameOffset = '';

    // In Internet Explorer, the true version is after "MSIE" in userAgent
    if ((__zHolosBrowser.verOffset = __zHolosBrowser.nAgt.indexOf("MSIE")) != -1) {
      __zHolosBrowser.browserName = "Microsoft Internet Explorer";
      __zHolosBrowser.fullVersion = parseFloat(__zHolosBrowser.nAgt.substring(__zHolosBrowser.verOffset + 5));
      __zHolosBrowser.majorVersion = parseInt('' + __zHolosBrowser.fullVersion);
    }

    // In Opera, the true version is after "Opera"
    else if ((__zHolosBrowser.verOffset = __zHolosBrowser.nAgt.indexOf("Opera")) != -1) {
      __zHolosBrowser.browserName = "Opera";
      __zHolosBrowser.fullVersion = parseFloat(__zHolosBrowser.nAgt.substring(__zHolosBrowser.verOffset + 6));
      __zHolosBrowser.majorVersion = parseInt('' + __zHolosBrowser.fullVersion);
    }

    // In Firefox, the true version is after "Firefox"
    else if ((__zHolosBrowser.verOffset = __zHolosBrowser.nAgt.indexOf("Firefox")) != -1) {
      __zHolosBrowser.browserName = "Firefox";
      __zHolosBrowser.fullVersion = parseFloat(__zHolosBrowser.nAgt.substring(__zHolosBrowser.verOffset + 8));
      __zHolosBrowser.majorVersion = parseInt('' + __zHolosBrowser.fullVersion);
    }

    // In most other browsers, "name/version" is at the end of userAgent
    else if ((__zHolosBrowser.nameOffset = __zHolosBrowser.nAgt.lastIndexOf(' ') + 1) < (__zHolosBrowser.verOffset = __zHolosBrowser.nAgt.lastIndexOf('/')))
    {
      __zHolosBrowser.browserName = __zHolosBrowser.nAgt.substring(__zHolosBrowser.nameOffset, __zHolosBrowser.verOffset);
      __zHolosBrowser.fullVersion = parseFloat(__zHolosBrowser.nAgt.substring(__zHolosBrowser.verOffset + 1));
      if (!isNaN(__zHolosBrowser.fullVersion)) __zHolosBrowser.majorVersion = parseInt('' + __zHolosBrowser.fullVersion);
      else {
        __zHolosBrowser.fullVersion = 0;
        __zHolosBrowser.majorVersion = 0;
      }
    }

    // Finally, if no name and/or no version detected from userAgent...
    if (__zHolosBrowser.browserName.toLowerCase() == __zHolosBrowser.browserName.toUpperCase()
      || __zHolosBrowser.fullVersion == 0 || __zHolosBrowser.majorVersion == 0)
    {
      __zHolosBrowser.browserName = navigator.appName;
      __zHolosBrowser.fullVersion = parseFloat(__zHolosBrowser.nVer);
      __zHolosBrowser.majorVersion = parseInt(__zHolosBrowser.nVer);
    }
  }
}

