
// Name des Tracking Servers
var RFA_TRACKING_HOSTNAME = 'r.refinedads.com';

// Wird der Tracking Server über HTTP oder HTTPS aufgerufen
if (window.location && window.location.protocol && window.location.protocol == 'https:')
{
	var RFA_TRACKING_URL = 'https://' + RFA_TRACKING_HOSTNAME;
}
else
{
	var RFA_TRACKING_URL = 'http://' + RFA_TRACKING_HOSTNAME;
}

// Parser für die Splittung der URLs (Ebenen c1, c2, c3). Domains als Kleinbuchstaben normalisiert und ggf. vorhandene Punkte am Ende entfernt.
RFA_Url_Parser = function(url){ this.url = url; this.parseUrl(url); }
RFA_Url_Parser.prototype.regexp = /(https?:\/\/)([a-zA-Z0-9_\-\.]+[a-zA-Z]+)\.?(:[0-9]+)?\/?(.*)?/
RFA_Url_Parser.prototype.parseUrl = function(url){ result = this.url.match(this.regexp); if (!result){ result = []; } this.scheme = result[1] || ""; this.host = result[2] || ""; this.port = result[3] || ""; this.path = result[4] || ""; return this; }
RFA_Url_Parser.prototype.getQueryValue = function(key){ key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regexS = "[\\?&]"+key+"=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(this.url); if( results == null ){ return ""; } else { return decodeURIComponent(results[1]); }}
RFA_Url_Parser.prototype.getHost = function(){ if (this.host){ return this.host.toLowerCase(); } return "" }
RFA_Url_Parser.prototype.getPath = function(){ if (this.path){ var testPath = "/" + this.path; if (testPath.indexOf("#") != -1){ testPath = testPath.substr(0, testPath.indexOf("#")); } if (testPath.indexOf("?") != -1){ return testPath.substr(0, testPath.indexOf("?")); } return testPath; } return "/" }
RFA_Url_Parser.prototype.getTLD = function(){ if (!this.host){ return ""; } var hostParts = this.host.toLowerCase().split(".").reverse(); var tldParts = [hostParts[0]]; if (hostParts[1]){ tldParts.push(hostParts[1]); } if (tldParts.join(".").length <= 5 && hostParts[2]){ tldParts.push(hostParts[2]); } return tldParts.reverse().join(".");}
function RFA_Cookie_Get(key){var i,j,c,all=document.cookie.split(";");for (i=0;i<all.length;i++){c=all[i];j=c.indexOf("=");if (c.substr(0,j).replace(/^\s+|\s+$/g,"")==key){return unescape(c.substr(j+1));}}}
function RFA_Cookie_Set(key, value, minutes, domain){var cookieParts = [key + "=" + escape(value)];if (minutes != null && minutes != undefined){var d = new Date();d.setMinutes(d.getMinutes() + minutes);cookieParts.push("Expires="+d.toUTCString());}if (domain != null && domain != ""){cookieParts.push("Domain="+domain);}document.cookie=cookieParts.join("; ");}


// Die Funktion, um den eigentlichen Trackingpixel (anyChannel Redirect) im Browser zu erstellen
RFA_SEO_GENERIC_Tracking = function() 
{
	if (RFA_Cookie_Get(RFA_COOKIE_NAME))
	{
		RFA_Cookie_Set(RFA_COOKIE_NAME, 1, RFA_COOKIE_LIFETIME, RFA_COOKIE_DOMAIN);
    		return;
	}
	RFA_Cookie_Set(RFA_COOKIE_NAME, 1, RFA_COOKIE_LIFETIME, RFA_COOKIE_DOMAIN);

	var trackUrl = function(aid, oid, level1, level2, level3)
	{
		document.write('<img src="' + RFA_TRACKING_URL + "/r.rfa?aid=" + aid + "&oid=" + oid + "&c1=" + encodeURIComponent(level1) + "&c2=" + encodeURIComponent(level2) + "&c3=" + encodeURIComponent(level3) + "&url=" + encodeURIComponent(RFA_TRACKING_URL) + "%2Fpixel.gif" + '" width="1" height="1">');
	}
	//
	var siteParser = new RFA_Url_Parser(document.location.href);
	
	var referrerUrl = document.referrer;

	// Wenn es einen Referer gibt
	if (referrerUrl)
	{
		// Referer URL splitten
		var referrerParser = new RFA_Url_Parser(referrerUrl);
		
		// Traffic vom selben Hostname. Wenn der Traffic vom selben Host kommt, nicht auslösen. 
		// Beispiel:User navigiert innerhalb verschiedener Seiten von "shop.beispiel.de" und das Pixel ist auf allen Seiten eingebaut. Wechselt er auf "test.beispiel.de" (SEO/Generic-Pixel ist hier eingebaut), ist "shop.beispiel.de" der Referer, der gezählt wird. 
		// Es kann hier per Definition auch die TLD (Top Level Domain) eingetragen werden, wenn dies gewünscht ist. (ACHTUNG: Domains mit co.uk) Beipiel: User kommt auf "shop.beispiel.de" navigiert innerhalb und wechselt dann auf "test.beispiel.de" (SEO/Generic-Pixel ist hier eingebaut). Es wird kein Referer gezählt, da beides "beispiel.de".
		if (siteParser.getHost() == referrerParser.getHost())
		{
			return;
		}

		// Überprüfe ob: Bazahlter Traffic und nicht in Referer Acknowledge Liste
		if (!(window.RFA_ACKNOWLEDGE_REFERRER_HOSTNAMES && RFA_ACKNOWLEDGE_REFERRER_HOSTNAMES.length > 0 && RFA_ACKNOWLEDGE_REFERRER_HOSTNAMES.join(" ").indexOf(referrerParser.getHost()) != -1) &&
			window.RFA_IGNORE_CGI_PARAMETER && RFA_IGNORE_CGI_PARAMETER.length > 0)
		{
			for (var i = 0; i < RFA_IGNORE_CGI_PARAMETER.length; i++)
			{
				if (siteParser.getQueryValue(RFA_IGNORE_CGI_PARAMETER[i]) != "")
				{
					// Bezahlter Traffic
					return;
				}
			}
		}
		
		// Traffic von (Sub)Domains aus der Referer Ignore Liste. Traffic aus der Referer Ignore Liste löst den Pixel nicht aus.
		if (window.RFA_IGNORE_REFERRER_HOSTNAMES && RFA_IGNORE_REFERRER_HOSTNAMES.length > 0 && RFA_IGNORE_REFERRER_HOSTNAMES.join(" ").indexOf(referrerParser.getHost()) != -1)
		{
			return;
		}
		//Hier beginnt der eigentliche Trackingteil: Ist der Hostname zu kurz, wird der Pixel nicht ausgelöst. Stellt sicher, dass nur sinnvolle Referer ausgewertet werden.
		var hostName = referrerParser.getHost();
		var hostParts = hostName.split(".").reverse();
		
		// Hostname zu kurz
		if (hostParts.length < 2) { return; }
		// Wenn der Referer einer der drei genannten Suchmaschinen ist, löst der Pixel aus und die Ebenen c1, c2 und c3 werden in Refined Ads erstellt.
		var searchEngines = ['Google', 'Yahoo', 'Bing'];
		
		for (var i = 0; i < searchEngines.length; i++)
		{
			// Überprüft, ob der Hostname den Namen der Suchmaschine an zweitletzter Stelle enthält (wenn co.uk an drittletzter). 
			if (hostParts[1] == searchEngines[i].toLowerCase() || (hostParts.length > 2 && hostParts[2] == searchEngines[i] && hostParts[0] == "uk" && hostParts[1] == "co"))
			{
				// Trackt den Referer Host und die Suchanfrage
				trackUrl(RFA_SEO_AID, RFA_OID, searchEngines[i], hostName, referrerParser.getQueryValue("q"));
				return;
			}
		}
		
		// Die aufgelisteten Suchmaschinen wurden nicht gefunden:
		
		// Struktur für Referer, die nicht die drei Suchmaschinen sind
		trackUrl(RFA_GENERIC_AID, RFA_OID, referrerParser.getTLD(), referrerParser.getHost(), referrerParser.getPath());
		return;
	}
};

RFA_SEO_GENERIC_Tracking();
