String.prototype.trim = function() {
	return (this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''));
}
// conf
var PSTCONF = new Object();
PSTCONF["fcName"] = "NVI_FC";
PSTCONF["lcName"] = "NVI_LC";
PSTCONF["fcLifeTime"] = 93312000; // in sec, -1=Session-Cookie
PSTCONF["lcLifeTime"] = -1; // in sec, -1=Session-Cookie
PSTCONF["searchEngines"] = new Array(
"search.live.com:q",
"suche.gmx.at:q",
"www.google.de:q",
"www.google.at:q",
"www.google.co.uk:q",
"www.google.ie:q",
"www.google.fr:q",
"www.google.se:q",
"www.google.nl:q",
"www.google.ch:q",
"www.google.no:q",
"www.google.fi:q",
"www.google.be:q",
"www.google.it:q",
"www.google.es:q",
"www.google.dk:q",
"www.google.com:q",
"uk.search.yahoo.com:p",
"at.search.yahoo.com:p",
"de.search.yahoo.com:p",
"ch.search.yahoo.com:p",
"fr.search.yahoo.com:p",
"nl.search.yahoo.com:p",
"se.search.yahoo.com:p",
"ie.search.yahoo.com:p",
"fi.search.yahoo.com:p",
"be.search.yahoo.com:p",
"es.search.yahoo.com:p",
"it.search.yahoo.com:p",
"dk.search.yahoo.com:p",
"www.ask.com:q",
"de.ask.com:q",
"uk.ask.com:q",
"at.ask.com:q",
"ch.ask.com:q",
"fr.ask.com:q",
"nl.ask.com:q",
"se.ask.com:q",
"ie.ask.com:q",
"fi.ask.com:q",
"be.ask.com:q",
"es.ask.com:q",
"it.ask.com:q",
"search.msn.at:q",
"search.msn.co.uk:q",
"search.msn.de:q",
"search.msn.ch:q",
"search.msn.fr:q",
"search.msn.nl:q",
"search.msn.se:q",
"search.msn.ie:q",
"search.msn.fi:q",
"search.msn.be:q",
"search.msn.es:q",
"search.msn.it:q",
"search.msn.com:q",
"search.msn.dk:q",
"search1.sky.com:term");

// call this function on page
function setCookiesAndVariables(ownerid, memberstatus, domain) {
	var pscode = getGetParamFromUrl(document.URL, "pscode");
	var trackingCode = getTrackingCode(pscode, document.referrer, ownerid);
	var pscodeParts = parsePscode(trackingCode);
	var isCookieSet = setTrackingCookies(trackingCode);
	setTrackingVariables(isCookieSet, trackingCode, pscode, pscodeParts, memberstatus, domain);
}

function setTrackingVariables(isCookieSet,trackingCode, pscode, pscodeParts, memberstatus, domain) {
	if (isCookieSet["fc"]) {
		s.eVar26=trackingCode; //$pscode;
		s.events="event2";
		s.eVar2=memberstatus; //$memberstatus
	}
	if (isCookieSet["lc"]) {
		s.eVar30=trackingCode; //$pscode;
		s.campaign=pscodeParts["pscodeShort"];
		s.prop21=pscodeParts["pscodeShort"];
		s.eVar18=domain; //$subdomain
		if (pscode) {
			s.eVar24=pscodeParts["pscodeBlock6"];
			s.eVar25=pscodeParts["pscodeBlock7"];
		}
	}
}

function setTrackingCookies(trackingCode) {
	var isCookieSet = new Object;
	isCookieSet["fc"] = false;
	isCookieSet["lc"] = false;
	var firstVisitCookie = getCookie(PSTCONF["fcName"]);
	var jetzt = new Date();
	var timestamp = Math.floor(jetzt.getTime() / 1000); // timestamp in seconds
	trackingCode = encodeURIComponent(trackingCode + "_TS:" + timestamp);
	var isAlreadyRegisterd = false;
	if (firstVisitCookie == null) {
		setCookie(PSTCONF["fcName"], trackingCode, PSTCONF["fcLifeTime"], getMainDomain(window.location.hostname));
		isCookieSet["fc"] = true;
	} else {
		if (firstVisitCookie.indexOf("_registered") != -1) {
			isAlreadyRegisterd = true;
		}
	}

	var lastVisitCookie = getCookie(PSTCONF["lcName"]);
	if (!isAlreadyRegisterd && lastVisitCookie == null) {
		setCookie(PSTCONF["lcName"], trackingCode, PSTCONF["lcLifeTime"]);
		isCookieSet["lc"] = true;
	}
	return isCookieSet;
}

function getTrackingCode(psCode, referer, ownerid) {
	if (psCode != null) {
		return psCode;
	}
	if (referer != null) {
		for (i=0; i<PSTCONF["searchEngines"].length; i++) {
			var parts = PSTCONF["searchEngines"][i].split(":");
			if (parts.length == 2) {
				var searchEngineDomain = parts[0];
				var keywordParamName = parts[1];
				var seDomainPattern = new RegExp(searchEngineDomain);
				if (seDomainPattern.test(referer)) {
					var keyword = getGetParamFromUrl(referer, keywordParamName);
					keyword = (keyword==null) ? "null" : keyword;
					return "SEO:" + searchEngineDomain + ":" + keyword;
				}
			}
		}
	}
	return "ownerID:" + ownerid;
}

function parsePscode(trackingCode) {
	var pattern = /^([^_]*?_[^_]*?_[^_]*?_[^_]*?_[^_]*?)_([^_]*?)_([^_]*?)$/;
	var pscodeParts = new Object();
	pscodeParts["pscodeShort"] = trackingCode;
	pscodeParts["pscodeBlock6"] = "";
	pscodeParts["pscodeBlock7"] = "";

	var result = pattern.exec(trackingCode);
	if (result) {
		pscodeParts["pscodeShort"] = result[1];
		pscodeParts["pscodeBlock6"] = result[2];
		pscodeParts["pscodeBlock7"] = result[3];
	} else if (trackingCode.substr(0,3) == "SEO") {
		//handle search engine referrer
		var posSecondColon = trackingCode.indexOf(":", 4);
		if (posSecondColon > -1) {
			pscodeParts["pscodeShort"] = trackingCode.substring(0, posSecondColon);
		}
	}
	return pscodeParts;
}

function getGetParamFromUrl(url, paramName) {
	if (url == null || paramName == null || url.indexOf("?") == -1) {
		return null;
	}
	var urlParts = url.split("?",2);
	var paramStr = urlParts[1];
	
	var params = paramStr.split("&");
	for (i=0; i<params.length; i++) {
		var param = params[i];
		var paramKeyVal = param.split("=",2);
		if (paramKeyVal[0] == paramName) {
			return paramKeyVal[1];
		}
	}
	return null;
}

function getCookie(cookieName) {
	if (!document.cookie) {
		return null;
	}
	var cookieStr = document.cookie;
	var cookies = cookieStr.split(";");
	for (i=0; i<cookies.length; i++) {
		var cookie = cookies[i];
		var cookieKeyVal = cookie.split("=",2);
		if (cookieKeyVal[0].trim() == cookieName) {
			return cookieKeyVal[1];
		}
	}
	return null;
}

function setCookie(cookieName, cookieVal) {
	var lifetime = null; // optionaler 3. Parameter, cookie lifetime in sec
	var domain = null; // optionaler 4. Parameter
	var parameters;
	var arglength = 2;
	if (typeof setCookie.arguments === "undefined") {
		parameters = arguments
	} else {
		parameters = setCookie.arguments;
	}
	if (parameters.length > 2) {
		lifetime = parameters[2];
	}
	if (parameters.length > 3) {
		domain = parameters[3];
	}
	
	var cookieStr = cookieName+"="+cookieVal+"; path=/";
	if (lifetime != null) {
		var expires = lifetime;
		if (lifetime != -1){
			var ablauf = new Date();
			ablauf.setTime(ablauf.getTime() + lifetime*1000);
			expires = ablauf.toGMTString();
			cookieStr += "; expires=" + expires;
		}
	}
	if (domain != null) {
		cookieStr += "; domain=" + domain;
	}
	document.cookie = cookieStr;
}

function getMainDomain(fullDomain) {
	var pattern = /^.*?((\.?[^.]+?)(\.([^.]+?)\.[^.]+?))$/;
	var result = pattern.exec(fullDomain);
	if (result) {
		var secondleveldomainPart = result[4];
		var secondleveldomain = result[3];
		if (secondleveldomainPart == "co" || secondleveldomainPart == "com") {
			secondleveldomain = result[1];
		}
		return secondleveldomain;
	}
	return fullDomain;
}