// Link tracking code

// Change this for each site
var siteName = "ept";

function linkTrack() {
  var instance;
  
  if ( this.constructor == linkTrack ) instance = this;
  else instance = arguments[ arguments.length-1 ];
  
  instance.listeners = [];
  
  instance.startTracking = function() {
    if ( !document.getElementsByTagName ) return false;
    
    var links = document.getElementsByTagName( 'a' );
    
    // Add event listener to all 'A' elements
    for ( var i = 0; i < links.length; i++ ) {
      instance.addEvent( links[ i ], 'mousedown', instance.clicked, false );
    }
  }
  
  // Event handler for link clicked
  instance.clicked = function( e ) {
    if ( !e ) var e = window.event;
    if ( e.target ) target = e.target;
    else if ( e.srcElement ) target = e.srcElement;
    if ( target.nodeType == 3 ) target = target.parentNode;
    
    // If this is not the A element, track back in tree until we find it
    while ( target.nodeName != "A" && target.nodeName != "a" ) {
      target = target.parentNode;
    }
    
    var href = target.href;
    var owner = target.rel ? target.rel.substr(target.rel.indexOf(":")+1) : ""; // Owner is content of rel attribute in form ("owner:XXX")
    
    // Ignore non-http(s) links
    if ( href.substr(0,7) == "http://" ) {
			href = href.substr(7);
		} else if ( href.substr(0,8) == "https://" ) {
			href = href.substr(8);
		} else return true;
    href = href.substr(0,href.indexOf("/"));
    
    // Check that we are not a local link
    if ( href == "localhost" ||
         href == "localhost:84" ||
         href == "193.238.165.198" ||
         href == "www.electronic-payments.co.uk" ||
         href == "electronic-payments.co.uk" ||
         href == "193.238.165.191" ||
         href == "www.ecommerce-comparison.com" ||
         href == "ecommerce-comparison.com" ||
         href == "paymentstool.electronic-payments.co.uk" ||
         href == "paymentstool.electronic-payments.co.uk:8080" ||
         href == "212.100.244.16" ) return true;

    // Make AJAX request
    var ajaxReq = new Ajax.Request( '/trackclicks.php', {
      method: 'get',
      parameters: { dest: encodeURIComponent( target.href ), site: siteName, cookie_id: cookieID, ectID: userID, owner: owner, rand: Math.random() }
    } );
    
    return true;
  }
  
  // Add event handler (cross browser)
  instance.addEvent = function( elm, evType, fn, useCapture ) {
    if (elm.AddEventListener)
    {
      elm.AddEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      instance.listeners[instance.listeners.length] = [ elm, evType, fn ];
      return r;
    } else {
      var xEventFn = elm['on' + evType];
      if (typeof elm['on' + evType] != 'function')
      {
        elm['on' + evType] = fn;
      } else {
        elm['on' + evType] = function(e) { xEventFn(e); fn(e); };
      }
    }
    return true;
  }
}

// Create a cookie
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

// Read a cookie
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

// Erase a cookie
function eraseCookie(name) {
	createCookie(name,"",-1);
}

// Perform AJAX request to get MD5 hash of IP address
// if not successful, try again
function hashedIPAJAXrequest() {
  hashedIPfetchAttempts--;
  var ajaxReq = new Ajax.Request( '/hashedip.php', {
    method: 'get',
    onSuccess: function(transport) {
      var response = transport.responseText || "";
      cookieID = response;
      if ( reg.exec(cookieID) ) {
        createCookie( 'hashedIP', cookieID, 365 );
      } else {
        if ( hashedIPfetchAttempts ) hashedIPAJAXrequest();
      }
    },
    parameters: { rand: Math.random() }
  } );
}

// Default user name
var userID = '';

// Read cookie, and if not set fetch MD5 hash of IP address with AJAX request
var cookieID = readCookie( 'hashedIP' );
var reg = new RegExp("[a-f0-9]{32}"); // RegExp to check that we are receiving an MD5 hash and not some nonsense
var hashedIPfetchAttempts = 3; // Max number of attempts to set cookie before giving up

if ( !cookieID || reg.exec(cookieID) == null ) {
  hashedIPAJAXrequest();
}

var linkTrack = new linkTrack();
