/**
 * Version 1.2
 * For Vesteda
 */ 
var o2mc = {};
o2mc.account = "314";
o2mc.cookieName = "o2mc";
o2mc.queryParam = "o2mc";
o2mc.events = [];
o2mc.isReady = false;
o2mc.requestSent = false;

o2mc.defineEvents = function() {

    if (document.URL.indexOf("o2mc=")>-1) {
        o2mc.setEvent({name:"m8"});
    }

    //Koopaanbod bekijken 
    if (document.URL.indexOf("/koopwoningen/algemeen/")>-1) {
  		  o2mc.setEvent({name:"m9"});
    }

    //Huuraanbod detailpagina bekijken
	//****the parameter "Project=" has to be added too***
    if (document.URL.indexOf("/woningaanbod.aspx#&&Project=")>-1) {
  		  o2mc.setEvent({name:"m10"});
    }

    //Huurwoning zoeken
    if (document.URL.indexOf("www.vesteda.com/nl/woningaanbod.aspx")>-1) {
  		  o2mc.setEvent({name:"m11"});
    }
};

o2mc.sendMetric = function(metric) {
  var pauseComp = function(millis) {
    var date = new Date();
    var curDate = null;
    
    do { curDate = new Date(); }
    while(curDate-date < millis);
  };
  
	if (typeof(metric)!="undefined" && metric!="") { 
		o2mc.setEvent({"name": metric});
    o2mc.requestSent = true;
    if(metric == "m14") {
      if(window.addEventListener){
        window.addEventListener((navigator.userAgent.indexOf("AppleWebKit")>-1?'before':'') + 'unload', function(){
          o2mc.process();
          pauseComp(500);
        }, false);
      } else if(window.attachEvent){
       window.attachEvent('onunload', function(){
          o2mc.process();
          pauseComp(500);
       });
      }
    } else {
      o2mc.process();
    }
	}
}

o2mc.process = function() {
  o2mc.referrer = document.referrer; 
  o2mc.response = o2mc.getResponse(o2mc.getParameter(o2mc.queryParam), o2mc.cookieName);
  o2mc.cookie.set(o2mc.cookieName, o2mc.response, 1);
  if(o2mc.response) {
    o2mc.response = o2mc.response.split('_')[1];
    o2mc.defineEvents();
    if(o2mc.events.length > 0) {
      o2mc.send();
    }
  }
};

o2mc.process = function() {
  o2mc.referrer = document.referrer; 
  o2mc.response = o2mc.getResponse(o2mc.getParameter(o2mc.queryParam), o2mc.cookieName);
  o2mc.cookie.set(o2mc.cookieName, o2mc.response, 1);
  if(o2mc.response) {
    o2mc.response = o2mc.response.split('_')[1];
    o2mc.defineEvents();
    if(o2mc.events.length > 0) {
      o2mc.send();
    }
  }
  o2mc.events = [];
};    

o2mc.send = function() {
  var protocol = document.location.protocol == "http:"?"http:":"https:";
  var random = o2mc.generateUniqueId(); 
  var url = protocol + "//" + "a.trusted-code.com/?r=" + random + "&a=" + o2mc.account + "&k=" + o2mc.response + '&t=Google&c=314';
  if(o2mc.getVisit(o2mc.response, o2mc.cookieName+"Rsp")) {
    url += "&m1=1";
  }
  for(var i=0; i<o2mc.events.length; i++) {
    url += "&" + o2mc.events[i].name + "=" + o2mc.events[i].value; 
  } 
  var myimg = document.createElement('img');
  myimg.onload = function(){};
  myimg.src = url;
};

o2mc.setEvent = function(event) {
  if(typeof(event)=="undefined" || !event.name) {
    return;
  }
  var index = o2mc.getEventIndex(o2mc.events, event.name);
  var newEvent = {name: event.name, value: event.value?event.value:1};
  if(index === false) {
    o2mc.events.push(newEvent);
  } else {
    o2mc.events[index] = newEvent; 
  }
};

o2mc.getEventIndex = function(events, name) {
  for(var i=0; i<events.length; i++) {
    if(events[i].name == name ) {
      return i; 
    }
  }
  return false;
};

o2mc.cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    var domein = '';
    var path = '';
    var host = o2mc.cookie.getHost();
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    path = '; path=/';
    domein = '; domain='+host;
    
    return (document.cookie = name + '=' + (value || '') + path + domein + expire);
  },
  
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  
  erase: function(name) {
    var cookie = o2mc.cookie.get(name) || true;
    o2mc.cookie.set(name, '', -1);
    return cookie;
  },
  
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    o2mc.cookie.set('_test', '1');
    return (o2mc.cookie.erase('_test') === '1');
  },
  
  
  /**
   * Gets host suitable for inclusion in cookies<br>
   * www.google.com becomes .google.com, google.co.uk becomes .google.co.uk 
   * @returns domain without subdomains
   */                   
  getHost: function() {
    var newHost = "";
    try {
      var host = document.location.host;
      var values = host.split('.');
      if(!isNaN(values[(values.length-1)])) {
         return host;
      }
      if(values.length > 1) {
        if(values[values.length-2] == 'co' && values.length >= 3) {
          newHost = '.' + values[values.length-3] + '.' + values[values.length-2] + '.' + values[values.length-1];
        } else {
          newHost = '.' + values[values.length-2] + '.' + values[values.length-1];
        }
      }
    } catch(e) {}
    return newHost;
  }
};

o2mc.generateUniqueId = function() {
  var dateObject = new Date();
  var uniqueId =
        dateObject.getTime() + '' +
        Math.floor(1000000 * Math.random());

  return uniqueId;
};

o2mc.getParameter = function(parm, url) {
  if(typeof(url) == "undefined") {
    url = document.location.href;
  }
  if(url.indexOf("?") != -1) {
    var string = url.substring(url.indexOf("?")).substring(1).split('#')[0];
    var parameters = string.split("&");
    
    for(var i=0; i<parameters.length; i++) {
      var pair = parameters[i].split("=");
      if(pair.length > 0) {
        if(pair[0].toLowerCase() == parm) {
          return unescape(pair[1]);
        }
      }
    }
  }
  return '';
};

o2mc.getResponse = function(response, cookieName) {
  response = response?response:o2mc.cookie.get(cookieName);
  return response;
};

/**
 * Returns domain from url
 */
o2mc.getDomain = function(url) {
  if(typeof(url) == "undefined") {
    url = document.location.href;
  }
  if (url) {
    try {
      var d = url.match(/([^\/\/]+\.[^/.]+)\//);
      if(d && d.length>1) {
        d = d[1];
        if(d) {
          return d.replace(/www\./i, '').toLowerCase();
        }
      }
    } catch(err){}
  }
  return '';
};


o2mc.DOMReady = function(f) {
  if (/(?!.*?compatible|.*?webkit)^mozilla|opera/i.test(navigator.userAgent) || /(.*?webkit)/i.test(navigator.userAgent)){
    document.addEventListener("DOMContentLoaded", function(){
      o2mc.isReady = true;
      f();
    }, false);
  }  else {
    //window.setTimeout(f,0);
    var docReadyProcId = setInterval(function(){
        try{
            // throws errors until DOM is ready
            o2mc.isReady || (document.documentElement.doScroll('left'));
        }catch(e){
            return;
        }
        o2mc.isReady = true;
        if(docReadyProcId){
            clearInterval(docReadyProcId);
            docReadyProcId = null;
        }
        window.setTimeout(f, 100);  // no errors, fire
    }, 200);

		document.onreadystatechange = function(){
			if(document.readyState == 'complete' && o2mc.isReady == false){
				document.onreadystatechange = null;
				o2mc.isReady = true;
				if(docReadyProcId){
            clearInterval(docReadyProcId);
            docReadyProcId = null;
        }
				f();
			}
    }
  }
};

o2mc.getVisit = function(value, cookieName) {
  if(o2mc.cookie.get(cookieName) != value) {
    o2mc.cookie.set(cookieName, value);
    return true;
  }
  
  return false;
}

o2mc.DOMReady(function(){
  if(window.o2mc.requestSent == false) {
    o2mc.process();
  }
});
