



















var naMediaAd = {
	getVersion: function() {
		return "2012-01-23 16:14:50.939";
	},
	// AdType
AdType: {
	SUPERBANNER:"leaderboard",
	WIDE_SKYSCRAPER:"skyscraper",
	MEDIUM_RECTANGLE:"medium_rectangle",
	LAYER:"layer",
	WALLPAPER:"wallpaper",
	SKINNING:"skinning",
	BILLBOARD:"billboard",
	DSE_OPTOUT: "dse_optout",
	TEASER_H: "teaser_h",
	TEASER_V: "teaser_v"
},

	
	AdConfig: {
		selector: 	{
			WALLPAPER: "body.naMediaAd_WALLPAPER",
			SKINNING: "body.naMediaAd_SKINNING"
		},
		className: 	{
			WALLPAPER: "naMediaAd_WALLPAPER",
			SKINNING: "naMediaAd_SKINNING"
		},
		pattern: {
			reqParam: "^[a-zA-Z0-9_]+$"
		}
	},
	
	constants: {
		UNDEFINED: "undefined",
		PREFIX: "naMediaAd_"
	},
	
	includedAds: {},
	includeAds: [],
	
	includeAd: function(adType) {
		if (!this.isValidAdType(adType)) {
			return;
		}
		if (typeof(writeCapture) != "undefined" && this.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION).getValue("async") == "true") {
			this.addEventHandler("LOAD_ADTAG", 
				function() {
					naMediaAd.loadAd.call(naMediaAd, adType);
				},
				adType);
			this.addEventHandler("DOM_READY",
				function() {
					naMediaAd.triggerEvent("PRELOAD_ADTAG");
					naMediaAd.EventDispatcher.clearEventHandler(naMediaAd.EventName.PRELOAD_ADTAG);
					naMediaAd.EventDispatcher.triggerEvent(naMediaAd.EventName.LOAD_ADTAG, naMediaAd.AdType[adType]);
				});
		}
		else {
			naMediaAd.triggerEvent("PRELOAD_ADTAG");
			naMediaAd.EventDispatcher.clearEventHandler(naMediaAd.EventName.PRELOAD_ADTAG);
			naMediaAd.EventDispatcher.triggerEvent(naMediaAd.EventName.LOAD_ADTAG, naMediaAd.AdType[adType]);
			return this.loadAd(adType);
		}
	},
	
	excludeAd: function (adType) {
		if (!this.isValidAdType(adType)) {
			return;
		}
		delete this.AdType[adType];
	},
	
	loadAd: function() {
		var adType = arguments[0];
		var adPosition = this.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION);
		// the adType value as service name, but adType constant name as constructor parameter
		var ad = new (this.ServiceRegistry.getService(this.ServiceName.ADTAG, this.AdType[adType]))(adType, adPosition);
		ad.process();
		
		this.includedAds[ad.getTagId()] = ad;
		return ad.getTagId();
	},
	
	renderAd: function(adType, args) {
		if (!this.isValidAdType(adType)) {
			return;
		}
		
		var adPosition = this.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION);
		// the adType value as service name, but adType constant name as constructor parameter
		var ad = new (this.ServiceRegistry.getService(this.ServiceName.ADTAG, this.AdType[adType]))(adType, adPosition);
		if (!ad.validate(args)) {
			return;
		}
		ad.render(args);
	},
	
	setValue: function(key, value, adType) {
		return naMediaAd.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION).setValue(key, value, adType);
	},
	
	addStyle: function(id, propertyMap, adType) {
		var ad;
		if (this.isValidAdType(id)) {
			ad = new (this.ServiceRegistry.getService(this.ServiceName.ADTAG, this.AdType[id]))(id);
		}
		var theAdStyle = document.getElementById("naMediaAd_adStyle");
		if (theAdStyle == null) {
			theAdStyle = document.createElement("style");
			theAdStyle.setAttribute("id", "naMediaAd_adStyle");
			document.getElementsByTagName("head")[0].appendChild(theAdStyle);
		}
		var isIE = theAdStyle.styleSheet;
		var css = isIE ? theAdStyle.styleSheet.cssText : "";
		
		if (this.isValidAdType(adType)) {
			css += this.AdConfig.selector[adType] + " ";
		}
		
		if (ad) {
			css += ad.getTagClassSelector();
		}
		else {
			css += "#" + id;
		}
		
		css += "{";
		if (typeof(propertyMap) == "object") {
			for (var key in propertyMap) {
				css += key + ":" + propertyMap[key] + ";";
			}
		}
		css += "}";
		
		if (theAdStyle.styleSheet) { //IE
			theAdStyle.styleSheet.cssText = css;
		}
		else {
			theAdStyle.appendChild(document.createTextNode(css));
		}
	},
	
	addEventHandler: function(eventName, eventHandler, adType) {
		if (!this.isValidAdEvent(eventName)) {
			return;
		}
		var adEventHandlerService = this.ServiceRegistry.getService(this.ServiceName.ADEVENTHANDLER, this.AdType[adType]);
		var adEventHandler = new adEventHandlerService(eventName, eventHandler, adType);
		this.EventDispatcher.addEventHandler(this.EventName[eventName], adEventHandler, this.AdType[adType]);
	},
	
	triggerEvent: function(eventName, adType) {
		if (!this.isValidAdEvent(eventName) || adType && !this.isValidAdType(adType)) {
			return;
		}
		var adEventService = this.ServiceRegistry.getService(naMediaAd.ServiceName.ADEVENT, this.AdType[adType]);
		if (!adEventService) {
			return;
		}
		var adEvent = new adEventService(this.EventName[eventName], this.AdType[adType]);
		adEvent.trigger();
	},
	
	isValidAdType: function(adType) {
		if (!adType) {
			return false;
		}
		if (this.AdType[adType]) {
			return true;
		}
		return false;
	},
	
	isValidAdEvent: function(adEvent) {
		if (!adEvent) {
			return false;
		}
		if (this.EventName[adEvent]) {
			return true;
		}
		return false;
	},
	
	addClass: function(node, className) {
		if (this.hasClass(node, className)) {
			return;
		}
		var theClassName = node.className;
		if (!theClassName) {
			theClassName = "";
		}
		theClassName += (theClassName == "" ? "" : " ") + className;
		node.className = theClassName;
	},
	
	removeClass: function(node, className) {
		var theClassName = node.className;
		var regExp = new RegExp("\\b\\s?" + className + "\\b");
		theClassName = theClassName.replace(regExp, "");
		node.className = theClassName;
	},
	
	hasClass: function(node, value) {
		var regExp = new RegExp("\\b" + value + "\\b");
		var clazz = node.className;
		var isNull = clazz == null;
		return (!isNull && regExp.test(clazz));
	},
	
	getComputedStyle: function(elem) {
		if (!elem) {
			return null;
		}
		var computedStyle;
		if (typeof(elem.currentStyle) != "undefined") {
			computedStyle = elem.currentStyle;
		}
		else {
			computedStyle = document.defaultView.getComputedStyle(elem, null);
		}
		return computedStyle;
	},
	
	mergeComputedStyle: function(computedStyle, property, defaultValue) {
		if (!computedStyle) {
			return defaultValue;
		}
		if (typeof(defaultValue) != "undefined") {
			var num = naMediaAd.parseInt(computedStyle[property]);
			if (num != null) {
				return num;
			}
			if (property == "position" && computedStyle[property] != "static") {
				return computedStyle[property];
			}
			return defaultValue;
		}
		return computedStyle[property];
	},
	
	parseInt: function(text) {
		text = parseInt(text);
		if (isNaN(text)) {
			return null;
		}
		return text;
	},
	
	addScript: function(code) {
		var theScript = document.createElement("script");
		theScript.type = "text/javascript";
		theScript.text = code;
		document.getElementsByTagName("head")[0].appendChild(theScript);
	},
	
	getScript: function(url, callback) {
		if (typeof(writeCapture) != "undefined" && naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION).getValue("async") == "true") {
			naMediaAd.Utils.write("<script type=\"text/javascript\" src=\"" + url + "\"><\/script>", callback);
		}
		else {
			var done = false;
			var theScript = document.createElement("script");
			theScript.type = "text/javascript";
			if (callback) {
				theScript.onload = theScript.onreadystatechange = function() {
					if (!done && (!theScript.readyState || theScript.readyState == "loaded" || theScript.readyState == "complete")) {
						done = true;
						callback();
					}
				};
			}
			theScript.src = url;
			theScript.async = true;
			document.getElementsByTagName("head")[0].appendChild(theScript);
		}
	},
	
	parseRequestParameter: function() {
		var query = window.location.search.replace("?", "");
		var params = query.split("&");
		for (var i=0; i<params.length; i++) {
			var param = params[i].split("=");
			var reqParam = new RegExp(naMediaAd.AdConfig.pattern.reqParam);
			if (param[0].match(reqParam) && param[1].match(reqParam) && param[0].match(/\bnaMediaAd_/)) {
				param[0] = param[0].replace("naMediaAd_","");
				var adPosition = this.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION);
				if (!naMediaAd.setValue(param[0], param[1])) {
					if (!adPosition.keyword) {
						adPosition.keyword = {};
					}
					if (typeof(adPosition.keyword[param[0]]) == "undefined") {
						adPosition.keyword[param[0]] = [];
					}
					else if (!adPosition.isArray(adPosition.keyword[param[0]])) {
						adPosition.keyword[param[0]] = [adPosition.keyword[param[0]]];
					}
					if (adPosition.inArray(adPosition.keyword[param[0]], param[1]) < 0) {
						adPosition.keyword[param[0]].push(param[1]);
					}
					naMediaAd.setValue(param[0], param[1]);
				}
				if (typeof(adPosition[param[0]]) != "undefined") {
					adPosition[param[0]] = {};
				}
			}
		}
	},

	parseQuery: function() {
		var targeting = {
			ui: {
				schmuck: [["schmuck"], ["ring"], ["kette"], ["armband"], ["charm"]]			}
		};
		var adPosition = this.ServiceRegistry.getInstance(this.ServiceName.ADPOSITION);
		var parser = /^(?:([^:\/?\#]+):)?(?:\/\/([^\/?\#]*))?([^?\#]*)(?:\?([^\#]*))?(?:\#(.*))?/;
		if (parser.test(document.referrer) && adPosition.inArray(["www.google.de", "de.search.yahoo.com", "www.bing.com"], RegExp.$2) > -1) {
			if (/[?&]?q(?:=([^&]*))/.test(RegExp.$4)) {
				var q = decodeURI(RegExp.$1).match(/[^\s+]+/g);
				for (var target in targeting) {
					for (var key in targeting[target]) {
						var next = false;
						var valueArray = targeting[target][key];
						for (var m=0; m<valueArray.length; m++) {
							var match = true;
							for (var i=0; i<valueArray[m].length; i++) {
								if ((new RegExp("(" + valueArray[m][i] + ")")).test(q)) {
									continue;
								}
								match = false;
								break;
							}
							if (match) {
								if (adPosition.setValue(target, key)) {
									next = true;
								}
								else {
									if (!adPosition.keyword) {
										adPosition.keyword = {};
									}
									if (typeof(adPosition.keyword[target]) == "undefined") {
										adPosition.keyword[target] = [];
									}
									else if (!adPosition.isArray(adPosition.keyword[target])) {
										adPosition.keyword[target] = [adPosition.keyword[target]];
									}
									if (adPosition.inArray(adPosition.keyword[target], key) < 0) {
										adPosition.keyword[target].push(key);
									}
									next = typeof(naMediaAd.setValue(target, key)) != "undefined";
								}
								break;
							}
						}
						if (next)
							break;
					}
				}
			}
		}
	}
};

naMediaAd.Utils = {
	createDiv: function(id, parentNode) {
		return this.createTag("div", {"id":id}, parentNode);
	},

	createImg: function(src, parentNode) {
		return this.createTag("img", {"src":src, "border":"0 none"}, parentNode);
	},

	createA: function(url, parentNode) {
		return this.createTag("a", {"href":url, "target":"_blank"}, parentNode);
	},

	createTag: function(tagName, attributeMap, parentNode) {
		var theTag = document.createElement(tagName);
		for (var key in attributeMap) {
			if (key == "style" && theTag.style.setAttribute) {
				theTag.style.setAttribute("cssText", attributeMap[key]);
			}
			else {
				theTag.setAttribute(key, attributeMap[key]);
			}
		}
		if (parentNode) {
			parentNode.appendChild(theTag);
		}
		return theTag;
	},
	
	writeTag: function(tagName, attributeMap) {
		var html = "<" + tagName;
		for (var key in attributeMap) {
			html += " " + key + "=\"" + attributeMap[key] + "\"";
		}
		html += ">";
		document.write(html);
		document.write("<\/" + tagName + ">");
	},
	
	createSwf: function(attributeMap, paramMap, embedMap, parentNode) {
		var swf = "<object";
		for (var key in attributeMap) {
			swf += " " + key + "='" + attributeMap[key] + "'";
		}
		swf += ">";
		for (var key in paramMap) {
			swf += "<param name='" + key + "' value='" + paramMap[key] + "'/>";
		}
		swf += "<embed";
		for (var key in embedMap) {
			swf += " " + key + "='" + embedMap[key] + "'";
		}
		swf += "/>";
		
		swf += "</object>";
		if (parentNode) {
			var dummy = this.createTag("div", {}, parentNode);
			dummy.innerHTML= swf;
		}
		else {
			document.write(swf);
		}
	},
	
	write: function(script, selector, callback) {
		if (typeof(writeCapture) != "undefined" && naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION).getValue("async") == "true") {
			var options;
			
			if (typeof(selector) == "function") {
				callback = selector;
				selector = null;
			}
			
			if (!selector) {
				var random_id="dummy" + Math.round(Math.random()*1000),
				dummy = naMediaAd.Utils.createDiv(random_id, document.head),
				selector = dummy,
				fn = function() {
					dummy.parentNode.removeChild(dummy);
				},
				options = callback ? function() {
					callback();
					fn();
				} : fn;
			}
			writeCapture.html(selector, script, options);
		}
		else {
			document.write(script);
		}
	},
	
	createTrackingPixel: function(urls) {
		if (!urls) {
			return;
		}
		if (typeof(urls) == "string") {
			urls = [urls];
		}
		var nRandom = Math.random();
		for (var i=0; i<urls.length; i++) {
			var url = this.addParam(urls[i], "ts", nRandom);
			naMediaAd.getScript(url);
		}
	},
	
	addParam: function(url, name, value) {
		return url + (url.indexOf("?") > -1 ? "&" : "?") + name + "=" + value;
	},
	
	getAncestor: function(node, clazz) {
		var parent = node.parentNode;
		while (parent && !naMediaAd.hasClass(parent, clazz)) {
			parent = parent.parentNode;
		}
		return parent;
	},
	
	getWidth: function() {
		var innerWidth = window.innerWidth;
		var docClientWidth = document.documentElement && document.documentElement.clientWidth;
		var bodyClientWidth = document.body.clientWidth;
		var width;
		if (innerWidth) {
			width = bodyClientWidth && bodyClientWidth <= innerWidth ?
					docClientWidth && docClientWidth <= innerWidth ? 
							Math.max(bodyClientWidth, docClientWidth)
							: bodyClientWidth
					: docClientWidth && docClientWidth <= innerWidth ? 
							docClientWidth
							: innerWidth;
		}
		else if (!docClientWidth) {
			width = bodyClientWidth;
		}
		else {
			width = docClientWidth;
		}
		return width;
	},
	
	getHeight: function() {
		var innerHeight = window.innerHeight;
		var docClientHeight = document.documentElement && document.documentElement.clientHeight;
		var bodyClientHeight = document.body.clientHeight;
		var height;
		if (innerHeight) {
			height = bodyClientHeight && bodyClientHeight <= innerHeight ?
					docClientHeight && docClientHeight <= innerHeight ? 
							Math.max(bodyClientHeight, docClientHeight)
							: bodyClientHeight
					: docClientHeight && docClientHeight <= innerHeight ? 
							docClientHeight
							: innerHeight;
		}
		else if (!docClientHeight) {
			height = bodyClientHeight;
		}
		else {
			height = docClientHeight;
		}
		return height;
	},
	
	getScrollX: function() {
		var offsetX = window.pageXOffset;
		var bodyScrollLeft = document.body.scrollLeft;
		var docScrollLeft = document.documentElement && document.documentElement.scrollLeft;
		return offsetX || bodyScrollLeft || docScrollLeft;
	},
	
	getScrollY: function() {
		var offsetY = window.pageYOffset;
		var bodyScrollTop = document.body.scrollTop;
		var docScrollTop = document.documentElement && document.documentElement.scrollTop;
		return offsetY || bodyScrollTop || docScrollTop;
	},
	
	getOffsetXY: function(id) {
		var elem = document.getElementById(id);
		if (!elem) return;
		if (elem.style.display == "none") return [-1,-1];
		var offsetX = elem.offsetLeft;
		var offsetY = elem.offsetTop;
		if (elem.offsetParent) {
			while (elem = elem.offsetParent) {
				offsetX += elem.offsetLeft;
				offsetY += elem.offsetTop;
			}
		}
		return [offsetX, offsetY];
	},
	
	addOnHandler: function(name, handler, obj) {
		var ad = this;
		if (!obj) {
			obj = window;
		}
		var currentHandler = obj["on" + name];
		var newHandler;
		if (!currentHandler) {
			newHandler = function() {
				handler.call(ad);
			}
		}
		else {
			newHandler = function() {
				currentHandler();
				handler.call(ad);
			}
		}
		obj["on" + name] = newHandler;
	},
	
	track: function(args) {
		var tracking = {};
		for (var i=0; i<args.length; i++) {
			var data = args[i];
			var ad = data[0], name = data[1], propertyMap = data[2];
			if (!tracking[name]) {
				tracking[name] = [];
			}
			tracking[name].push(propertyMap);
		}
		for (var name in tracking) {
			var trackingPath = [];

			var trackingInfo = ["vcn", "channel", "site"];
			var adPosition = naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION);
			for (var i=0; i<trackingInfo.length; i++) {
				var key = trackingInfo[i];
				var value = adPosition.getValue(key);
				if (typeof(value) != "undefined") {
					trackingPath.push(key + "," + value);
				}
			}
			var info;
			var path = [];
			for (var i=0; i<tracking[name].length; i++) {
				var properties = tracking[name][i];
				var info = [];
				for (var key in properties) {
					info.push(key + "," + properties[key]);
				}
				path.push(info.join(";"));
			}
			var url = path.join["/"];
			url = "http://tracking.netzathleten-media.de/API-1.2/" + name + "/" + trackingPath.join("/") + "/" + path.join("/") + "/pxl.js";
			this.createTrackingPixel(url);
		}
	},
	
	visible: function() {
		for (var i=0; i<this.length; i++) {
			var ad = this[i];
			var status = ad && typeof(ad.visible) != "undefined" ? ad.visible + 0 : -1;
			if (status == 1) {
				continue;
			}
			var offsetXY = naMediaAd.Utils.getOffsetXY(ad.getTagId());
			if (!offsetXY) {
				var fn = arguments.callee;
				window.setTimeout(function() {
					fn.call(this);
				}, 100);
				return;
			}
			if (offsetXY[0] == -1) {
				return;
			}
			var isVisible = naMediaAd.Utils.getWidth() + naMediaAd.Utils.getScrollX() - offsetXY[0] > 0 &&
			naMediaAd.Utils.getHeight() + naMediaAd.Utils.getScrollY() - offsetXY[1] > 0;
			switch(status) {
				case -1:
					status = isVisible + 0;
					break;
				case 0:
					status = isVisible ? 2 : -1;
					break;
				case 1:
					status = -1;
					break;
			}
			if (typeof(visible) == "undefined") {
				var adType = naMediaAd.AdType[ad.adType];
				if (!ad.adPosition[adType]) {
					ad.adPosition[adType] = {};
				}
				if (!ad.adPosition[adType]._default) {
					ad.adPosition[adType]._default = {};
				}
				ad.adPosition[adType]._default.visible = isVisible;
			}
			ad.visible = ad.visible || isVisible, ad.adType;
			ad.adPosition.setValue("visible", ad.visible);
			if (status > -1 && (ad.adPosition.getValue("trackVisibility", ad.adType) == "_true")) {
				naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADTRACKING).push(
						ad, "naMediaAd_visible", {"adtype": adType, tile: ad.tile, status: status});
			}
		}
	},
	
	getProperty: function(object, path) {
		if (!object || !path) {
			return;
		}
		var properties = path.split(".");
		var property = properties[0];
		if (property == "") {
			return object;
		}
		property = object[property];
		properties.shift();
		if (typeof(property) == "object" && typeof(property.length) == "undefined" && properties.length > 0) {
			property = this.getProperty(property, properties.join("."));
		}
		return property;
	},
	
	extend: function() {
		var i = 0,
			target = arguments[i++] || {},
			length = arguments.length, 
			deep = false, 
			options;

		if (typeof(target) == "boolean" ) {
			deep = target;
			target = arguments[i++] || {};
		}
		if (typeof(target) != "object")
			target = {};

		if (length == i) {
			target = this;
			--i;
		}

		for (; i<length; i++)
			if ((options = arguments[i]) != null)
				for (var key in options) {
					var src = target[key],
						copy = options[key];

					if (target === copy)
						continue;
					
					if (deep && copy && typeof(copy) == "object")
						target[key] = naMediaAd.Utils.extend(deep,
							src || (copy.length != null ? [] : {}),
							copy);
					else if (copy !== undefined)
						target[key] = copy;
				}
		return target;
	},
	
	isEmpty: function(object) {
		if (typeof(object) == "undefined") {
			return true;
		}
		else if (typeof(object) == "string") {
			return object == "";
		}
		else if (typeof(object) == "object") {
			for (var key in object) {
				return false;
			}
			return true;
		}
		return false; 
	}
};

//http://code.google.com/p/domready/
(function(){

  naMediaAd.DomReady = {};

	// Everything that has to do with properly supporting our document ready event. Brought over from the most awesome jQuery. 

  var userAgent = navigator.userAgent.toLowerCase();

  // Figure out what browser is being used
  var browser = {
  	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
  	opera: /opera/.test(userAgent),
  	msie: (/msie/.test(userAgent)) && (!/opera/.test( userAgent )),
  	mozilla: (/mozilla/.test(userAgent)) && (!/(compatible|webkit)/.test(userAgent))
  };    

var readyBound = false;	
var isReady = false;
var readyList = [];

// Handle when the DOM is ready
function domReady() {
	// Make sure that the DOM is not already loaded
	if(!isReady) {
		// Remember that the DOM is ready
		isReady = true;
      
        if(readyList) {
            for(var fn = 0; fn < readyList.length; fn++) {
                readyList[fn].call(window, []);
            }
          
            readyList = [];
        }
	}
};

// From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
};

// does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
function bindReady() {
	if (readyBound) {
		return;
	}
	
	readyBound = true;

	// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
	if (document.addEventListener && !browser.opera) {
		// Use the handy event callback
		document.addEventListener("DOMContentLoaded", domReady, false);
	}

	// If IE is used and is not in a frame
	// Continually check to see if the document is ready
	if (browser.msie && window == top) (function(){
		if (isReady) return;
		try {
			// If IE is used, use the trick by Diego Perini
			// http://javascript.nwbox.com/IEContentLoaded/
			document.documentElement.doScroll("left");
		} catch(error) {
			setTimeout(arguments.callee, 0);
			return;
		}
		// and execute any waiting functions
		domReady();
	})();

	if(browser.opera) {
		document.addEventListener( "DOMContentLoaded", function () {
			if (isReady) return;
			for (var i = 0; i < document.styleSheets.length; i++)
				if (document.styleSheets[i].disabled) {
					setTimeout( arguments.callee, 0 );
					return;
				}
			// and execute any waiting functions
			domReady();
		}, false);
	}

	// A fallback to window.onload, that will always work
    addLoadEvent(domReady);
};

// This is the public function that people can use to hook up ready.
naMediaAd.DomReady.ready = function(fn, args) {
	// Attach the listeners
	bindReady();
  
	// If the DOM is already ready
	if (isReady) {
		// Execute the function immediately
		fn.call(window, []);
	} else {
		// Add the function to the wait list
		readyList.push( function() { return fn.call(window, []); } );
	}
};
  
bindReady();

})();

naMediaAd.ServiceName = {
	ADTAG: "adtag",
	ADPOSITION: "adposition",
	ADTARGETING: "adtargeting",
	ADEVENT: "adevent",
	ADEVENTHANDLER: "adeventhandler",
	ADTRACKING: "adtracking"
};
naMediaAd.ServiceRegistry = {
	service: {},
	instance: {},
	registerService: function(name, service, adType) {
		if (!adType) {
			this.service[name] = service;
		}
		else if (typeof(adType) == "boolean" && adType) {
			if (!this.service[name]) {
				this.service[name] = [];
			}
			if (typeof(this.service[name]) != "object") {
				this.service[name] = [this.service[name]];
			}
			this.service[name].push(service);
		}
		else {
			if (!this.service[adType]) {
				this.service[adType] = {};
			}
			this.service[adType][name] = service;
		}
	},
	getService: function(name, adType) {
		if (adType && this.service[adType] && this.service[adType][name]) {
			return (this.service[adType][name]);
		}
		if (!adType || name != naMediaAd.ServiceName.ADEVENT) {
			return this.service[name];
		}
	},
	getInstance: function(name) {
		if (name && !this.instance[name]) {
			this.instance[name] = new (this.getService(name))();
		}
		return this.instance[name];
	}
};

naMediaAd.EventName = {
	LOAD_ADTAG: "load_adtag",
	ADTAG_LOADED: "adtag_loaded",
	DOM_READY: "dom_ready",
	ONLOAD: "onload",
	INIT: "init",
	PRELOAD_ADTAG: "preload_adtag"
};
naMediaAd.EventDispatcher = {
	adEventHandler: {},
	addEventHandler: function(name, adEventHandler, adType) {
		if (!adType) {
			if (!this.adEventHandler[name]) {
				this.adEventHandler[name] = [];
			}
			this.adEventHandler[name].push(adEventHandler);
		}
		else {
			if (!this.adEventHandler[adType]) {
				this.adEventHandler[adType] = {};
			}
			if (!this.adEventHandler[adType][name]) {
				this.adEventHandler[adType][name] = [];
			}
			this.adEventHandler[adType][name].push(adEventHandler);
		}
	},
	clearEventHandler: function(name, adType) {
		if (!adType) {
			if (this.adEventHandler[name]) {
				this.adEventHandler[name] = [];
			}
		}
		else {
			if (this.adEventHandler[adType] && this.adEventHandler[adType][name]) {
				this.adEventHandler[adType][name] = [];
			}
		}
	},
	triggerEvent: function(name, adType) {
		if (adType && this.adEventHandler[adType] && this.adEventHandler[adType][name]) {
			for (var i=0; i<this.adEventHandler[adType][name].length; i++) {
				this.adEventHandler[adType][name][i].callEventHandler();
			}
		}
		if (this.adEventHandler[name]) {
			for (var i=0; i<this.adEventHandler[name].length; i++) {
				this.adEventHandler[name][i].callEventHandler();
			}
		}
	}
};

// abstract AdEvent
naMediaAd.AbstractAdEvent = function(eventName, adType) {
	this.eventName = eventName || "";
	this.adType = adType || "";
	this.trigger = function() {
		if (this.isTrigger()) {
			naMediaAd.EventDispatcher.triggerEvent(eventName, adType);
		}
	};
	this.isTrigger = function() {
		return true;
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADEVENT, naMediaAd.AbstractAdEvent);
// abstract AdEventHandler
naMediaAd.AbstractAdEventHandler = function(eventName, eventHandler, adType) {
	this.eventName = eventName;
	this.eventHandler = eventHandler;
	this.adType = adType || "";
	this.callEventHandler = function() {
		if (!this.done && typeof(this.eventHandler) == "function") {
			this.eventHandler();
			this.done = true;
		}
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADEVENTHANDLER, naMediaAd.AbstractAdEventHandler);

naMediaAd.addEventHandler("DOM_READY",
	function() {
		if (window.attachEvent) window.attachEvent('onload', function() {naMediaAd.triggerEvent("ONLOAD");});
		else window.addEventListener('load', function() {naMediaAd.triggerEvent("ONLOAD");}, false);
	});

naMediaAd.addEventHandler("ADTAG_LOADED",
	function() {
		naMediaAd.addClass(document.body, naMediaAd.AdConfig.className.WALLPAPER);
	},
	"WALLPAPER");

naMediaAd.addEventHandler("INIT",
	function() {
		naMediaAd.parseQuery();
		naMediaAd.parseRequestParameter();
		
		if (naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION).getValue("async") == "true") {
			naMediaAd.getScript("http://utils.adadapter.netzathleten-media.de/API-1.0/utils/nolib-support.js",
				function() {
					naMediaAd.getScript("http://utils.adadapter.netzathleten-media.de/API-1.0/utils/writeCapture.js");
				}
			);
		}
		
		naMediaAd.EventDispatcher.clearEventHandler(naMediaAd.EventName.INIT);
	});

naMediaAd.addEventHandler("PRELOAD_ADTAG",
	function() {
		var adTargeting = naMediaAd.ServiceRegistry.getService(naMediaAd.ServiceName.ADTARGETING);
		if (typeof(adTargeting) == "function") {
			adTargeting = [adTargeting];
		}
		for (var i=0; i<adTargeting.length; i++) {
			new adTargeting[i]().process();
		}
	});
naMediaAd.DomReady.ready(
	function() {
		naMediaAd.triggerEvent("DOM_READY");
	});

// abstract AdPosition
naMediaAd.AbstractAdPosition = function() {
	this._default = {
		vcn: "entertainweb",
		channel: "movies",
		site: "wulfmansworld.com",
		keyword: "",
		preview: "",
		tile: 0,
		trackVisibility: true,
		async: false
	};
	this.vcn = {"entertainweb":"ew"};
	
	this.channel = {"movies":"movies"};
	

	this.medium_rectangle = {
	_default: {
		sz: "300x250"
		}
	};
	this.teaser_v = {
	_default: {
		sz: "500x600"
		}
	};
	this.skyscraper = {
	_default: {
		sz: "120x600"
		}
	};
	this.billboard = {
	_default: {
		sz: "800x225"
		}
	};
	this.layer = {
	_default: {
		sz: "200x300"
		}
	};
	this.leaderboard = {
	_default: {
		sz: "468x60"
		}
	};
	this.teaser_h = {
	_default: {
		sz: "594x184"
		}
	};
	this.preview = {
		wallpaper: "wallpaper_2",
		wallpaper_bg: "wallpaper_3",
		wallpaper_bb: "wallpaper_bb",
		superbanner: "test",
		wide_skyscraper: "test",
		mr: "test",
		halfpage: "halfpage",
		pushdown: "pushdown",
		skinning: "skinning",
		pop_under: "pop_under",
		layer: "layer",
		interstitial: "interstitial",
		microspecial: "microspecial",
		anchor_ad: "anchorad",
		billboard: "billboard",
		teaser_h: "teaser_h",
		teaser_v: "teaser_v"
	};

	this.async = {
		_true: "true",
		_false: "false"
	};

	this.getValue = function(name, adPosition) {
		// global default
		var value = this._default[name];
		if (typeof(value) == "boolean") {
			value = "_" + value.toString();
		}
		// adposition default
		if (naMediaAd.isValidAdType(adPosition)) {
			adPosition = naMediaAd.AdType[adPosition];
			if (this[adPosition] && this[adPosition]["_default"]) {
				var adPositionDefault = this[adPosition]["_default"][name];
				if (typeof(adPositionDefault) == "boolean") {
					adPositionDefault = "_" + adPositionDefault.toString();
				}
				if (name == "keyword") {
					value = (adPositionDefault || "") + value;
				}
				else {
					value = adPositionDefault || value;
				}
			}
		}
		// property value map
		if (this[name] && this[name][value]) {
			value = this[name][value];
		}
		/* no general key value pairs
		else if (this[value]) {
			value = this[value];
		}*/
		return value;
	};
	
	this.setValue = function(name, value, adType) {
		/* only key value pairs
		if (!adType) {
			if (typeof(value) == "undefined" || typeof(value) == "string" && naMediaAd.isValidAdType(value)) {
				adType = value || adType;
				value = name;
				name = "keywords";
			}
		}*/
		if (typeof(value) == "boolean" || value == "true" || value == "false") {
			value = "_" + value.toString();
		}
		// valid name
		if (typeof(this._default[name]) != "undefined") {
			if (this[name] && this[name][value]) {
				value = this[name][value];
			}
			else if (this[name] && this.isArray(this[name]) && this.inArray(this[name], value) > -1) {
				// valid value
			}
			/* no general key value pairs
			else if (this[value]) {
				value = this[value];
			}*/
			// invalid value
			else {
				return;
			}
			if (naMediaAd.isValidAdType(adType)) {
				adType = naMediaAd.AdType[adType];
				if (typeof(this[adType]) == "undefined") {
					this[adType] = {
						_default: {}
					}
				}
				this[adType]["_default"][name] = value;
			}
			else if (!adType){
				this._default[name] = value;
			}
			else {
				return;
			}
			return true;
		}
		// valid keyword name
		else {
			if (this.keyword && typeof(this.keyword[name]) != "undefined" && this.keyword[name][value] && isNaN(value)) {
				value = this.keyword[name][value];
			}
			else if (this.keyword && this.isArray(this.keyword[name]) && this.inArray(this.keyword[name], value) > -1) {
				// valid value
			}
			else if (this.keyword && this.isArray(this.keyword.keywords) && this.inArray(this.keyword.keywords, name) > -1) {
				// valid keyword with arbitrary value
			}
			// invalid keyword value
			else {
				return;
			}

			if (name == "pop_under") {
				adType = "WIDE_SKYSCRAPER";
			}
			var regExp = new RegExp("\\b.+=.+\\b");
			if (naMediaAd.isValidAdType(adType)) {
				adType = naMediaAd.AdType[adType];
				this[adType]["_default"]["keyword"] = (this[adType]["_default"]["keyword"] || "") + 
					(name == "keywords" || regExp.test(value) ? "" : name + "=") + value + ";";
			}
			else {
				this._default["keyword"] += (name == "keywords" || regExp.test(value) ? "" : name + "=") + 
					value + ";";
			}
			return true;
		}
		return;
	};
	
	this.isArray = function(obj) {
		return (typeof(obj) == "object" && obj.length != "undefined");
	};
	
	this.inArray = function(arr, value)  {
		for (var i=0; i<arr.length; i++) {
			if (arr[i] === value) {
				return i;
			}
		}
		return -1;
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADPOSITION, naMediaAd.AbstractAdPosition);

// abstract AdTag
naMediaAd.AbstractAdTag = function (adType, adPosition, template) {
	this.template = template || "";
	this.adType = adType || "";
	this.adPosition = adPosition;
	
	this.validate = function() {
		return true;
	};
	
	this.process = function() {
		this.validate();
		var wrapper = document.getElementById("naMediaAd_" + adType);
		if (!wrapper) {
			return;
		}
		this.tile = ++this.adPosition._default.tile;
		wrapper.setAttribute("id", this.getTagId());
		naMediaAd.addClass(wrapper, this.getTagClass());
		naMediaAd.addClass(wrapper, "naMediaAd");
		
		naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADTRACKING).init(this);
		
		this.render();
		naMediaAd.EventDispatcher.triggerEvent(naMediaAd.EventName.ADTAG_LOADED, naMediaAd.AdType[this.adType]);
	};
	this.render = function() {
		this.write();
	};
	
	this.write = function() {
		naMediaAd.Utils.write(this.template || "", "#" + this.getTagId());
	};
	
	this.getId = function() {
		if (!this.id) {
			var cnt = 1;
			for (var ad in naMediaAd.includedAds) {
				if (naMediaAd.AdType[naMediaAd.includedAds[ad].adType] == naMediaAd.AdType[this.adType]) {
					cnt++;
				}
			}
			this.id = this.adType + "_" + cnt; 
		}
		return this.id; 
	};
	this.getTagId = function() {
		return naMediaAd.constants.PREFIX + this.getId();
	};
	this.getTagClass = function() {
		return naMediaAd.constants.PREFIX + this.adType;
	};
	this.getTagClassSelector = function() {
		return "." + this.getTagClass();
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AbstractAdTag);
// AdTag Optout
naMediaAd.AdTagOptoutImpl = function(adType, adPosition) {
	this._super = naMediaAd.AbstractAdTag;
	this._super(adType, adPosition,
		"<ul>" +
		"<li>Google - <a target=\"_blank\" href=\"http://www.google.com/intl/de/privacy/ads/\">Zum deaktivieren bitte hier klicken<\/a><\/li>" +
		"<li>Nuggad - <a target=\"_blank\" href=\"http://www.nugg.ad/de/datenschutz\">http://www.nugg.ad/de/datenschutz<\/a><\/li>" +
		"<li>Criteo - <a target=\"_blank\" href=\"http://info.criteo.com/pvx/privacy/de\">http://info.criteo.com/pvx/privacy/de<\/a><\/li>" +
		"<li>IVW/Agof - <a target=\"_blank\" href=\"http://optout.ivwbox.de/\">http://optout.ivwbox.de/<\/a><\/li>" +
		"<\/ul>");
	
	this.getId = function() {
		return this.adType; 
	};
};
naMediaAd.AdTagOptoutImpl.prototype = new naMediaAd.AbstractAdTag
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagOptoutImpl, naMediaAd.AdType.DSE_OPTOUT);
//AdTag Wallpaper
naMediaAd.AdTagWallpaperImpl = function(adType, adPosition) {
	this._super = naMediaAd.AbstractAdTag;
	this._super(adType, adPosition);

	this.render = function(wpConfig) {
		if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "lb.redirect"))) {
			this.createWallpaperFunctionLb = this.createRedirectWallpaperFunction;
		}
		else if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "lb.iframe"))) {
			this.createWallpaperFunctionLb = this.createWallpaperFunctionSky = this.createIframeWallpaperFunction;
		}
		else {
			var src = naMediaAd.Utils.getProperty(wpConfig, "lb.src");
			var swfSrc = naMediaAd.Utils.getProperty(wpConfig, "lb.swf.src");
			this.createWallpaperFunctionLb = 
				!naMediaAd.Utils.isEmpty(src) && src.indexOf(".swf") > -1 || !naMediaAd.Utils.isEmpty(swfSrc) ?
				this.createFlashWallpaperFunction : this.createImageWallpaperFunction;
		}

		if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "sky.redirect"))) {
			this.createWallpaperFunctionSky = this.createRedirectWallpaperFunction;
		}
		else if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "sky.iframe"))) {
			this.createWallpaperFunctionSky = this.createIframeWallpaperFunction;
		}
		else {
			var src = naMediaAd.Utils.getProperty(wpConfig, "sky.src");
			var swfSrc = naMediaAd.Utils.getProperty(wpConfig, "sky.swf.src");
			this.createWallpaperFunctionSky = 
				!naMediaAd.Utils.isEmpty(src) && src.indexOf(".swf") > -1 || !naMediaAd.Utils.isEmpty(swfSrc) ?
						this.createFlashWallpaperFunction : this.createImageWallpaperFunction;
		}
		
		var theParentNode;
		if (typeof(wpConfig.skinning) == "boolean" && wpConfig.skinning) {
			theParentNode = document.getElementById("ip_page_wrapper");
		}
		
		if (!naMediaAd.Utils.getProperty(wpConfig, "sky.style")) {
			wpConfig.sky.style = {};
		}
		wpConfig.sky.style.position = "absolute";
		wpConfig.sky.style.top= 0;
		
		if (theParentNode) {
			naMediaAd.addStyle("ip_content_wrapper", {position: "relative", top: wpConfig.lb.height + "px"});
			if (!wpConfig.lb.style) {
				wpConfig.lb.style = {}
			}
			wpConfig.lb.style.position = "absolute";
			wpConfig.lb.style.top = 0;
			wpConfig.lb.style.left = wpConfig.lb.style.left || ((theParentNode.offsetWidth - wpConfig.lb.width) + "px");
			
			wpConfig.sky.style.left = wpConfig.sky.style.left || (theParentNode.offsetWidth + "px");
		}
		else {
			wpConfig.sky.style.left = wpConfig.lb.width + "px";
			
			document.write("<div id=\"naMediaAd_dummy\"></div>");
			var theDummy = document.getElementById("naMediaAd_dummy");
			var theParentNode = naMediaAd.Utils.getAncestor(theDummy, "naMediaAd_(BILLBOARD|SUPERBANNER)");
			theDummy.parentNode.removeChild(theDummy);
		}

		theParentNode = this.createWallpaperLb(wpConfig, theParentNode) || theParentNode;
		var theWallpaperSky = this.createWallpaperSky(wpConfig, theParentNode);
		
		if (wpConfig.background) {
			document.body.style.background = wpConfig.background;
		}
		
		delete naMediaAd.AdType.WIDE_SKYSCRAPER;
		naMediaAd.EventDispatcher.triggerEvent(naMediaAd.EventName.ADTAG_LOADED, naMediaAd.AdType.WALLPAPER);
	};

	this.createWallpaperLb = function(wpConfig, parentNode) {
		if (naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "lb.id"))) {
			wpConfig.lb.id = "naMediaAd_WALLPAPER_LB";
		}
		naMediaAd.addStyle(wpConfig.lb.id, wpConfig.lb.style);
		naMediaAd.Utils.createTrackingPixel(wpConfig.lb.pixel, parentNode);
		return this.createWallpaperFunctionLb(wpConfig.lb, parentNode);
	};

	this.createWallpaperSky = function(wpConfig, parentNode) {
		if (naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(wpConfig, "sky.id"))) {
			wpConfig.sky.id = "naMediaAd_WALLPAPER_SKY";
		}
		
		var computedStyle = naMediaAd.getComputedStyle(parentNode);
		naMediaAd.addStyle(parentNode.id, {"position": naMediaAd.mergeComputedStyle(computedStyle, "position", "relative")});
		
		naMediaAd.addStyle(wpConfig.sky.id, wpConfig.sky.style);
		naMediaAd.Utils.createTrackingPixel(wpConfig.sky.pixel, parentNode);
		return this.createWallpaperFunctionSky(wpConfig.sky, parentNode);
	};

	this.createImageWallpaperFunction = function(bannerConfig, parentNode) {
		if (bannerConfig.clickTag && bannerConfig.clickTag != "") {
			parentNode = naMediaAd.Utils.createA(bannerConfig.clickTag, parentNode);
		}
		var theImage = naMediaAd.Utils.createImg(bannerConfig.src, parentNode);
		theImage.id = bannerConfig.id;
	};
	this.createFlashWallpaperFunction = function(bannerConfig, parentNode) {
		var swfAttribute = {
			codebase: "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0",
			classid: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
			id: bannerConfig.id,
			width: bannerConfig.width,
			height: bannerConfig.height
		};
		var swfEmbed = {
			pluginspage: "http://www.macromedia.com/go/getflashplayer",
			type: "application/x-shockwave-flash",
			width: swfAttribute.width,
			height: swfAttribute.height
		};
		var swfParam = {
			AllowScriptAccess: "always",
			swLiveConnect: "true",
			quality: "high",
			wmode: "window"
		};
		if (bannerConfig.swf) {
			for (var key in bannerConfig.swf) {
				swfParam[key] = bannerConfig.swf[key];
			}
		}
		// defaults
		if (bannerConfig.clickTag && naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(bannerConfig, "swf.flashvars"))) {
			swfAttribute.flashvars = "clickTag=" + bannerConfig.clickTag;
		}
		swfParam.src = swfParam.src || bannerConfig.src;
		swfParam.movie = swfParam.movie || swfParam.src;
		
		for (var param in swfParam) {
			swfEmbed[param] = swfParam[param];
		}
		delete swfEmbed.movie;
		delete swfParam.src;
		
		naMediaAd.Utils.createSwf(swfAttribute, swfParam, swfEmbed, parentNode);
	};
	this.createIframeWallpaperFunction = function(bannerConfig, parentNode) {
		var style = {id: bannerConfig.id, src: bannerConfig.iframe, border: 0, 
			frameborder: 0, scrolling: "no", width: bannerConfig.width + "px", height: bannerConfig.height + "px"};
		naMediaAd.Utils.createTag("iframe", style, parentNode);
	};
	this.createRedirectWallpaperFunction = function(bannerConfig, parentNode) {
		document.write("<div id=\"" + bannerConfig.id + "\">");
		naMediaAd.Utils.writeTag("script", {src: bannerConfig.redirect, type: "text/javascript"});
		document.write("<script src=\"http://adadapter.netzathleten-media.de/API-1.0/utils/close.js\"><\/script>");
	};
};
naMediaAd.AdTagWallpaperImpl.prototype = new naMediaAd.AbstractAdTag;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagWallpaperImpl, naMediaAd.AdType.WALLPAPER);

// abstract AdTargeting
naMediaAd.AbstractAdTargeting = function(template) {
	this.template = template || "";
	this.process = function() {
		naMediaAd.Utils.write(this.template);
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTARGETING, naMediaAd.AbstractAdTargeting);

naMediaAd.AdTracking = function() {
	this.track = [];
	this.trigger = false;
	this.init = function(ad) {
		if (ad.adPosition && ad.adPosition.getValue("trackVisibility", ad.adType) == "_true") {
			naMediaAd.Utils.addOnHandler.call([ad], "scroll", naMediaAd.Utils.visible);
		}
		naMediaAd.Utils.visible.call([ad]);
	};
	this.push = function() {
		this.track.push(arguments);
		if (this.trigger) {
			this.process();
		}
	};
	this.process = function() {
		naMediaAd.Utils.track(this.track);
		this.track = [];
		this.trigger = true;
	};
};
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTRACKING, naMediaAd.AdTracking);
naMediaAd.addEventHandler("ONLOAD",
	function() {
		naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADTRACKING).process();
	});


// AdEvent Wallpaper
naMediaAd.AdEventWallpaperImpl = function(eventName, adType) {
	this._super = naMediaAd.AbstractAdEvent;
	this._super(eventName, adType);
	naMediaAd.wp_event_cnt = naMediaAd.wp_event_cnt || 0;
	this.trigger = function() {
		if (this.isTrigger()) {
			naMediaAd.EventDispatcher.triggerEvent(eventName, adType);
		}
		else if (naMediaAd.wp_event_cnt++ < 100) {
			var _this = this;

			window.setTimeout(function() {
				naMediaAd.triggerEvent(eventName.toUpperCase(), adType.toUpperCase());
			}, 100);
		}
	};
	this.isTrigger = function() {
		return naMediaAd.hasClass(document.body, "ip_wallpaper");
	};
};
naMediaAd.AdEventWallpaperImpl.prototype = new naMediaAd.AbstractAdEvent;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADEVENT, naMediaAd.AdEventWallpaperImpl, naMediaAd.AdType.WALLPAPER);
naMediaAd.addEventHandler("ADTAG_LOADED",
	function() {
		naMediaAd.triggerEvent("ADTAG_LOADED", "WALLPAPER");
	},
	"WIDE_SKYSCRAPER");

naMediaAd.addEventHandler("LOAD_ADTAG", function() {
	window.adscale_wallpaper_position = function() {
		naMediaAd.EventDispatcher.triggerEvent(naMediaAd.EventName.ADTAG_LOADED, naMediaAd.AdType.WALLPAPER);
		var node = document.getElementById("nab_top");
		var computedStyle = naMediaAd.getComputedStyle(node);
		var value = naMediaAd.mergeComputedStyle(computedStyle, "position", "relative");
		naMediaAd.addStyle("SUPERBANNER", {"position":value}, "WALLPAPER");
		delete naMediaAd.AdType.WIDE_SKYSCRAPER;
	};
	window.adscale_wallpaper_false = function() {
		naMediaAd.removeClass(document.body, naMediaAd.AdConfig.className.WALLPAPER);
		naMediaAd.AdType.WIDE_SKYSCRAPER = "skyscraper";
	};
}, "SUPERBANNER");

// AdTag
naMediaAd.AdTagImpl = function (adType, adPosition, template) {
	this._super = naMediaAd.AbstractAdTag;
	this._super(adType, adPosition,
		template ||
		"<script type=\"text/javascript\">\n" +
		"if(typeof(ip_network)==\"undefined\" || ip_network==\"\") var ip_network=\"www.netzathleten.de\";\n" +
	  "if(typeof(n_pbt)==\"undefined\") var n_pbt=\"\";\n" +
	  "document.write('<scr'+'ipt type=\"text/javascript\" src=\"http://ad.de.doubleclick.net/adj/#{site}/'+(\"#{zone}\"||\"#{homesite}\")" + 
	  	"+';pack=#{channel};theme=#{homesite};zustand=#{login};forum=#{forum};sz=#{sz};ip_v=#{visible};#{keyword}" +
	  	"tile=#{tile};'+n_pbt+'ord=#{ord}?\"><\\/script>');\n" +
	  "<\/script>"
	);
	this.render = function() {
		this.replacePlaceholder();
		this.write();
	};
	this.replacePlaceholder = function() {
		if (!naMediaAd.AdType.WIDE_SKYSCRAPER) {
			this.adPosition._default.homesite = ""; 
		}
		var preview = this.adPosition.getValue("preview", this.adType);
		if (preview != "") {
			if (this.adType && this.adPosition[naMediaAd.AdType[this.adType]]) {
				this.adPosition[naMediaAd.AdType[this.adType]]._default.channel = preview;
			}
			else {
				this.adPosition._default.channel = preview;
			}
		}
		for (var key in this.adPosition["_default"]) {
			var pattern = new RegExp("\\#{" + key + "}", "g");
			var value = this.adPosition.getValue(key, this.adType);
			this.template = this.template.replace(pattern, value);
		}
	};
};
naMediaAd.AdTagImpl.prototype = new naMediaAd.AbstractAdTag;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagImpl);
// AdTag Wide Skyscraper
naMediaAd.AdTagWideSkyscraperImpl = function(adType, adPosition) {
	this._super = naMediaAd.AdTagImpl;
	this._super(adType, adPosition);
	this.getTagId = new RegExp("WIDE_SKYSCRAPER_1").test(this.getId()) ? 
		function() {
			return "nab_side";
		} : this.getTagId;
};
naMediaAd.AdTagWideSkyscraperImpl.prototype = new naMediaAd.AdTagImpl;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagWideSkyscraperImpl, naMediaAd.AdType.WIDE_SKYSCRAPER);
//AdTag Superbanner
naMediaAd.AdTagSuperbannerImpl = function(adType, adPosition) {
	this._super = naMediaAd.AdTagImpl;
	this._super(adType, adPosition);
	this.getTagId = new RegExp("SUPERBANNER_1").test(this.getId()) ? 
		function() {
			return "nab_top";
		} : this.getTagId;
	this.write = function() {
		this.createPositionVars();
		naMediaAd.Utils.write(this.template || "", "#" + this.getTagId());
	};
	this.createPositionVars = function () {
		if (naMediaAd.hasClass(document.body, naMediaAd.AdConfig.className.WALLPAPER) || this.getTagId() != "nab_top") return;
		naMediaAd.addClass(document.body, naMediaAd.AdConfig.className.WALLPAPER)
		var positionVariables = {};
		positionVariables[naMediaAd.AdType.SUPERBANNER] = ["ip_wp_b_l", "ip_wp_b_t", "ip_wp_b_pos"];
		positionVariables[naMediaAd.AdType.WIDE_SKYSCRAPER] = ["ip_wp_s_l", "ip_wp_s_t", "ip_wp_s_pos"];

		var positionId = {};
		positionId[naMediaAd.AdType.SUPERBANNER] = "nab_top";

		var adPosition = naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION);
		var vars = "";
		for (var adType in positionVariables) {
			var computedStyle = naMediaAd.getComputedStyle(document.getElementById(positionId[adType]));
			var posVars = positionVariables[adType];
			for (var i=0; i<posVars.length; i++) {
				if (typeof(window[posVars[i]]) == "undefined") {
					var obj = naMediaAd.Utils.getProperty(adPosition, adType + "._default." + posVars[i]);
					if (obj) {
						for (var key in obj) {
							var value = obj[key];
							value = naMediaAd.mergeComputedStyle(computedStyle, key, value);
							vars += "var " + posVars[i] + "=\"" + value + "\";";
						}
					}
				}
			}
		}
		naMediaAd.removeClass(document.body, naMediaAd.AdConfig.className.WALLPAPER);
		naMediaAd.Utils.write("<script type=\"text/javascript\">" + vars + "<\/script>", "#nab_top");
	};
};
naMediaAd.AdTagSuperbannerImpl.prototype = new naMediaAd.AdTagImpl;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagSuperbannerImpl, naMediaAd.AdType.SUPERBANNER);
// AdTag Medium Rectangle
naMediaAd.AdTagMediumRectangleImpl = function(adType, adPosition) {
	this._super = naMediaAd.AdTagImpl;
	this._super(adType, adPosition);
	this.getTagId = new RegExp(this.adType + "_1").test(this.getId()) ? 
		function() {
			return "nab_text";
		} : this.getTagId;
};
naMediaAd.AdTagMediumRectangleImpl.prototype = new naMediaAd.AdTagImpl;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagMediumRectangleImpl, naMediaAd.AdType.MEDIUM_RECTANGLE);
naMediaAd.AdTagSkinningImpl = function(adType, adPosition) {
	this._super = naMediaAd.AbstractAdTag;
	this._super(adType, adPosition);
	
	this.validate = function(config) {
		if (!config) return false;
		var banner = ["left", "top", "right"];
		for (var i=0; i<banner.length; i++) {
			if (!this.validateSkinningPart(config[banner[i]])) return false;
		}
		return true;
	};
	
	this.validateSkinningPart = function(bannerConfig) {
		return bannerConfig.width && bannerConfig.height &&
			(bannerConfig.src || bannerConfig.iframe || bannerConfig.redirect || naMediaAd.Utils.getProperty(bannerConfig, "swf.src"));
	};
	
	this.render = function(config) {
		var skinning = this;
		var fn = function() {
			skinning.createSkinning.call(skinning, config);
		};
		if (typeof(writeCapture) != "undefined" && naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION).getValue("async") == "true") {
			fn();
		}
		else {
			naMediaAd.addEventHandler("DOM_READY", fn);
		}
	};
	this.createSkinning = function(skinningConfig) {
		naMediaAd.Utils.adlayerExp = function(delay) {
			if (typeof(delay) == "undefined") {
				delay = 500;
			}
			window.setTimeout(function() {
				var skinning = document.getElementById("naMediaAd_skinning_top");
				var content = document.getElementById("ip_content_wrapper");
				if (typeof(naMediaAd.Utils.ip_expand) == "function" && skinning && content) {
					naMediaAd.Utils.ip_expand(naMediaAd.Utils.getProperty(skinningConfig, "top.height"), 
							naMediaAd.Utils.getProperty(skinningConfig, "top.height_exp"), skinning, content);
				}
				else {
					naMediaAd.Utils.adlayerExp(100);
				}
			}, delay);
		};
		naMediaAd.Utils.adlayerCol = function(delay) {
			if (typeof(delay) == "undefined") {
				delay = 500;
			}
			window.setTimeout(function() {
				var skinning = document.getElementById("naMediaAd_skinning_top");
				var content = document.getElementById("ip_content_wrapper");
				if (typeof(naMediaAd.Utils.ip_collapse) == "function" && skinning && content) {
					naMediaAd.Utils.ip_collapse(naMediaAd.Utils.getProperty(skinningConfig, "top.height"), 
							naMediaAd.Utils.getProperty(skinningConfig, "top.height_exp"), skinning, content);
				}
				else {
					naMediaAd.Utils.adlayerCol(100);
				}
			}, delay);
		};
		naMediaAd.Utils.ip_expand = function(minHeight, maxHeight, skinning, content, currentHeight) {
			if (currentHeight == null) {
				currentHeight = minHeight;
			}
			
			window.setTimeout(function() {
				currentHeight += 6;
				if (currentHeight < maxHeight) {
					skinning.style.height = currentHeight + "px";
					content.style.top = currentHeight + "px";
					naMediaAd.Utils.ip_expand(minHeight, maxHeight, skinning, content, currentHeight);
				}
				else {
					skinning.style.height = maxHeight + "px";
					content.style.top = maxHeight + "px";
				}
			}, 10);
		};
		naMediaAd.Utils.ip_collapse = function(minHeight, maxHeight, skinning, content, currentHeight) {
			if (currentHeight == null) {
				currentHeight = maxHeight;
			}
			
			window.setTimeout(function() {
				currentHeight -= 6;
				if (currentHeight > minHeight) {
					skinning.style.height = currentHeight + "px";
					content.style.top = currentHeight + "px";
					naMediaAd.Utils.ip_collapse(minHeight, maxHeight, skinning, content, currentHeight);
				}
				else {
					skinning.style.height = minHeight + "px";
					content.style.top = minHeight + "px";
				}
			}, 10);
		};
		if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "left.redirect"))) {
			this.createSkinningFunctionLeft = this.createRedirectSkinningFunction;
		}
		else if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "left.iframe"))) {
			this.createSkinningFunctionLeft = this.createIframeSkinningFunction;
		}
		else {
			var src = naMediaAd.Utils.getProperty(skinningConfig, "left.src");
			var swfSrc = naMediaAd.Utils.getProperty(skinningConfig, "left.swf.src");
			this.createSkinningFunctionLeft = 
				!naMediaAd.Utils.isEmpty(src) && src.indexOf(".swf") > -1 || !naMediaAd.Utils.isEmpty(swfSrc) ?
				this.createFlashSkinningFunction : this.createImageSkinningFunction;
		}
		
		if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "top.redirect"))) {
			this.createSkinningFunctionTop = this.createRedirectSkinningFunction;
		}
		else if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "top.iframe"))) {
			this.createSkinningFunctionTop = this.createIframeSkinningFunction;
		}
		else {
			var src = naMediaAd.Utils.getProperty(skinningConfig, "top.src");
			var swfSrc = naMediaAd.Utils.getProperty(skinningConfig, "top.swf.src");
			this.createSkinningFunctionTop = 
				!naMediaAd.Utils.isEmpty(src) && src.indexOf(".swf") > -1 || !naMediaAd.Utils.isEmpty(swfSrc) ?
				this.createFlashSkinningFunction : this.createImageSkinningFunction;
		}
		
		if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "right.redirect"))) {
			this.createSkinningFunctionRight = this.createRedirectSkinningFunction;
		}
		else if (!naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(skinningConfig, "right.iframe"))) {
			this.createSkinningFunctionRight = this.createIframeSkinningFunction;
		}
		else {
			var src = naMediaAd.Utils.getProperty(skinningConfig, "right.src");
			var swfSrc = naMediaAd.Utils.getProperty(skinningConfig, "right.swf.src");
			this.createSkinningFunctionRight = 
				!naMediaAd.Utils.isEmpty(src) && src.indexOf(".swf") > -1 || !naMediaAd.Utils.isEmpty(swfSrc) ?
				this.createFlashSkinningFunction : this.createImageSkinningFunction;
		}
		
		naMediaAd.addStyle("ip_page_wrapper", {"position":"relative", 
			"width":naMediaAd.Utils.getProperty(skinningConfig, "left.width") + 
			naMediaAd.Utils.getProperty(skinningConfig, "top.width") + 
			naMediaAd.Utils.getProperty(skinningConfig, "right.width")+ "px"});
		
		naMediaAd.addStyle("ip_content_wrapper", {"position":"relative", 
			"top": naMediaAd.Utils.getProperty(skinningConfig, "top.height") + "px", 
			"left": naMediaAd.Utils.getProperty(skinningConfig, "left.width") + "px", 
			"width":naMediaAd.Utils.getProperty(skinningConfig, "top.width") + "px",
			"z-index":"1"});
		
		var background = naMediaAd.Utils.getProperty(skinningConfig, "background");
		if (background) {
			document.body.style.background = background;
		}
		
		naMediaAd.addStyle("nab_top", {"display":"none"});
		naMediaAd.Utils.createTrackingPixel(naMediaAd.Utils.getProperty(skinningConfig, "pixel"), 
				document.getElementById("nab_top"));
		
		naMediaAd.addClass(document.body, naMediaAd.AdConfig.className.SKINNING);
		
		var theContentWrapper = this.wrap(document.body, "ip_content_wrapper");
		var thePageWrapper = this.wrap(document.body, "ip_page_wrapper", theContentWrapper);
		
		this.createSkinningLeft(skinningConfig, thePageWrapper);
		this.createSkinningTop(skinningConfig, thePageWrapper);
		this.createSkinningRight(skinningConfig, thePageWrapper);
		
		this.toggle("naMediaAd_skinning_left");
		this.toggle("naMediaAd_skinning_top");
		this.toggle("naMediaAd_skinning_right");
	};
	
	this.createSkinningLeft = function(skinningConfig, parentNode) {
		naMediaAd.addStyle("naMediaAd_skinning_left", {"position":"absolute", "top":"0px", "left":"0px", "z-index":"3"});
		
		var theTag = naMediaAd.Utils.createDiv("naMediaAd_skinning_left", parentNode);
		theTag.style.display = "none";
		this.createSkinningFunctionLeft(skinningConfig.left, theTag);
	};
	this.createSkinningTop = function(skinningConfig, parentNode) {
		var topWidth = naMediaAd.Utils.getProperty(skinningConfig, "top.width")
		var topMaxWidth = naMediaAd.Utils.getProperty(skinningConfig, "top.width_max");
		var positionLeft = naMediaAd.Utils.getProperty(skinningConfig, "left.width") - (topMaxWidth ? Math.floor((topMaxWidth - topWidth) / 2) : 0);
		naMediaAd.addStyle("naMediaAd_skinning_top", {"position":"absolute", "top":"0px", 
			"left":positionLeft + "px", "overflow":"hidden", 
			"height":naMediaAd.Utils.getProperty(skinningConfig, "top.height") + "px",
			"width":(topMaxWidth || topWidth) + "px", "z-index":"2"});
		
		var theTag = naMediaAd.Utils.createDiv("naMediaAd_skinning_top", parentNode);
		theTag.style.display = "none";
		this.createSkinningFunctionTop(skinningConfig.top, theTag);
	};
	this.createSkinningRight = function(skinningConfig, parentNode) {
		naMediaAd.addStyle("naMediaAd_skinning_right", {"position":"absolute", "top":"0px", "z-index":"3", 
			"left":naMediaAd.Utils.getProperty(skinningConfig, "left.width") + naMediaAd.Utils.getProperty(skinningConfig, "top.width") + "px"});
		
		var theTag = naMediaAd.Utils.createDiv("naMediaAd_skinning_right", parentNode);
		theTag.style.display = "none";
		this.createSkinningFunctionRight(skinningConfig.right, theTag);
	};
	
	this.createImageSkinningFunction = function(bannerConfig, parentNode) {
		var href = naMediaAd.Utils.getProperty(bannerConfig, "clickTag");
		var theLink;
		if (href) {
			theLink = naMediaAd.Utils.createA(href, parentNode);
		}
		var theImg = naMediaAd.Utils.createImg(naMediaAd.Utils.getProperty(bannerConfig, "src"), 
				theLink || parentNode);
	};
	this.createFlashSkinningFunction = function(bannerConfig, parentNode) {
		var swfAttribute = {
			codebase: "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0",
			classid: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
			width: bannerConfig.width,
			height: bannerConfig.height
		};
		var swfEmbed = {
			pluginspage: "http://www.macromedia.com/go/getflashplayer",
			type: "application/x-shockwave-flash",
			width: swfAttribute.width,
			height: swfAttribute.height
		};
		var swfParam = {
			AllowScriptAccess: "always",
			swLiveConnect: "true",
			quality: "high",
			wmode: "window"
		};
		// clickTag
		if (bannerConfig.clickTag && !naMediaAd.Utils.isEmpty(naMediaAd.Utils.getProperty(bannerConfig, "swf.flashvars"))) {
			var pattern = new RegExp("#{clickTag}");
			bannerConfig.swf.flashvars = bannerConfig.swf.flashvars.replace(pattern, bannerConfig.clickTag);
		}
		if (bannerConfig.swf) {
			for (var key in bannerConfig.swf) {
				swfParam[key] = bannerConfig.swf[key];
			}
		}
		swfParam.src = swfParam.src || bannerConfig.src;
		swfParam.movie = swfParam.movie || swfParam.src;
		
		for (var param in swfParam) {
			swfEmbed[param] = swfParam[param];
		}
		delete swfEmbed.movie;
		delete swfParam.src;
		
		naMediaAd.Utils.createSwf(swfAttribute, swfParam, swfEmbed, parentNode);
	};
	
	this.createIframeSkinningFunction = function(bannerConfig, parentNode) {
		var style = {id: bannerConfig.id, src: bannerConfig.iframe, border: 0, vspace: 0, hspace: 0,
			frameBorder: 0, scrolling: "no", marginWidth:"0", marginHeight:"0", width: (bannerConfig.width_max || bannerConfig.width) + "px", height: bannerConfig.height + "px"};
		naMediaAd.Utils.createTag("iframe", style, parentNode);
	};
	
	this.createRedirectSkinningFunction = function(bannerConfig, parentNode) {
		var theScript = document.createElement("script");
		theScript.type = "text/javascript";
		theScript.src = bannerConfig.redirect;
		parentNode.appendChild(theScript);
	};
	
	this.wrap = function(parentNode, wrapperId, childNode) {
		var wrap = document.getElementById(wrapperId);
		if (!wrap) {
			wrap = naMediaAd.Utils.createDiv(wrapperId, parentNode);
			if (childNode) {
				wrap.appendChild(childNode);
				return wrap;
			}
			var theNextSibling = parentNode.firstChild;
			while (theNextSibling) {
				var currentNode = theNextSibling;
				theNextSibling = theNextSibling.nextSibling;
				if (typeof(currentNode.id) == "undefined" || currentNode.id != wrapperId) {
					wrap.appendChild(currentNode);
				}
			}
		}
		if (childNode && childNode.parentNode != wrap) {
			wrap.appendChild(childNode);
		}
		return wrap;
	};
	
	this.toggle = function(id) {
		var style = document.getElementById(id).style;
		if (style.display == "block") {
			style.display = "none";
		}
		else {
			style.display = "block";
		}
	};
};
naMediaAd.AdTagSkinningImpl.prototype = new naMediaAd.AdTagImpl;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagSkinningImpl, naMediaAd.AdType.SKINNING);
// AdTag Adconion
naMediaAd.AdType.ADCONION = "adconion";
naMediaAd.AdTagAdconionImpl = function() {
	this._super = naMediaAd.AbstractAdTag;
	this._super();
	
	this.render = function(config) {
		if (!config) {
			return;
		}
		if (typeof(naMediaAd) != "undefined" && typeof(n_pbt) != "undefined") {
			var genders = {
				"1": "m",
				"2": "f"
			};
			var ages = {
				"0": "97",
				"1": "93",
				"2": "91",
				"3": "81",
				"4": "71",
				"5": "61",
				"6": "51",
				"9": "1" 
			}
			var gender;
			if (/(j4=\d{1})/.test(n_pbt)) {
				gender = genders[RegExp.$1.split("=")[1]];
			}
			var age;
			if (/(j5=\d{1})/.test(n_pbt)) {
				age = ages[RegExp.$1.split("=")[1]];
			}
			
			var amgdgt = {
				"p": config.amgdgt_p || "7829",
				"pl": config.amgdgt_pl,
				"t": config.amgdgt_t || "i"
			}
			
			var variables = "";
			for (var key in amgdgt) {
				variables += "var amgdgt_" + key + "=\"" + amgdgt[key] + "\";";
			}
			
			amgdgt.g = gender || "u";
			amgdgt.yb = age || "1";
			amgdgt.c = config.c;
			amgdgt.rnd = Math.floor(Math.random()*99999999999)
			
			var template = "<script type=\"text/javascript\">" + variables + "<\/script>\n" +
				"<script type=\"text/javascript\" src=\"http://cdn.amgdgt.com/base/js/v1/amgdgt.js\"><\/script>" +
				"<noscript>" +
				"<a href=\"http://ad.amgdgt.com/ads/?t=c&c=" + amgdgt.c + "\" target=\"_blank\">" +
				"<img src=\"http://ad.amgdgt.com/ads/?t=i&f=h&" +
				"p=" + amgdgt.p + "&pl=" + amgdgt.pl + "&c=" + amgdgt.c + "&g=" + amgdgt.g + "&yb=" + amgdgt.yb + "&rnd=" + amgdgt.rnd + "\"" +
				" width=\"728\" height=\"90\" border=\"0\"/>" +
				"<\/a>" +
				"<\/noscript>";
			
			document.write(template);
		}
	}
};
naMediaAd.AdTagAdconionImpl.prototype = new naMediaAd.AbstractAdTag;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTAG, naMediaAd.AdTagAdconionImpl, naMediaAd.AdType.ADCONION);

// AdPosition
naMediaAd.AdPositionImpl = function() {
	this._super = naMediaAd.AbstractAdPosition;
	this._super();
	
	this._default.zone = "";
	this._default.homesite = false;
	this._default.login = false;
	this._default.forum = false;
	this._default.visible = true;
	this._default.sz = "1x1";
	this._default.ord = Math.round(Math.random()*10000000);
	
	this.keyword = {
		subject: ["e9c3871624c950b3f9343877b7c09abf"],
		pop_under: {
			_true: "dcopt=ist"
		},
		umfeld: ["ticketing", "reisen", "wellness_regener", "ernaehrung", "ergebnisse", "games", "equipment", "tipps_voting"],
		disziplin: ["klettern", "wandern", "touren", "radtour"],
		"3d": {
			_true: "ja",
			_false: "nein"
		},
		ksl: ["ps", "psp", "wii", "ds", "apple", "pc", "xbox"],
		keywords: ["pz"]
	};
	
	this.channel.preview = "preview";

	this.zone = {"horrormov":"horrormov","familymov":"familymov","actionmov":"actionmov","comicmov":"comicmov"};

	this.homesite = {
		_true: "home",
		_false: "subsite",
		preview: "preview"
	};
	this.login = {
		_true: "login",
		_false: "public"
	};
	this.forum = {
		_true: "ja",
		_false: "nein"
	};
	this.visible = {
		_true: "1",
		_false: "0"
	};


	naMediaAd.Utils.extend(true, this, {leaderboard: {_default: {ip_wp_b_pos: {position:"relative"}, ip_wp_b_t: {top:"0"}, ip_wp_b_l: {left:"0"}}}});
	naMediaAd.Utils.extend(true, this, {skyscraper: {_default: {ip_wp_s_pos: {position:"relative"}, ip_wp_s_t: {top:"0"}, ip_wp_s_l: {left:"0"}}}});
	naMediaAd.Utils.extend(true, this, {layer: {_default: {trackVisibility: "false"}}});
	naMediaAd.Utils.extend(true, this, {dse_optout: {_default: {trackVisibility: "false"}}});
};
naMediaAd.AdPositionImpl.prototype = new naMediaAd.AbstractAdPosition;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADPOSITION, naMediaAd.AdPositionImpl);

// AdTargeting
naMediaAd.AdTargetingImpl = function() {
	this._super = naMediaAd.AbstractAdTargeting;
	this._super(
			"<script type=\"text/javascript\">\n" +
			"document.write('<scr'+'ipt type=\"text/javascript\" src=\"http://ip.nuggad.net/rc?nuggn=2059506885&nuggsid=963375572&nuggtg=encodeteWerte\"><\\/script>');\n" +
		  "<\/script>");
};
naMediaAd.AdTargetingImpl.prototype = new naMediaAd.AbstractAdTargeting;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTARGETING, naMediaAd.AdTargetingImpl);
// AdTargeting Criteo
naMediaAd.AdTargetingCriteoImpl = function() {
	this._super = naMediaAd.AbstractAdTargeting;
	this._super();
	
	this.process = function() {
		var crtg_nid="1190";
		var crtg_cookiename="criteonetz";
		var crtg_content=this.crtg_getCookie(crtg_cookiename);
		var crtg_rnd=Math.floor(Math.random()*99999999999);
		
		var crtg_url='http://dis.eu.criteo.com/dis/rtt.js?networkId='+escape(crtg_nid);
		crtg_url+='&cookieName='+escape(crtg_cookiename);
		crtg_url+='&rnd='+crtg_rnd;
		crtg_url+='&varName=crtg_content';
		
		naMediaAd.getScript(crtg_url, 
			function() {
				var adPosition = naMediaAd.ServiceRegistry.getInstance(naMediaAd.ServiceName.ADPOSITION);
				var keyValues = crtg_content.split(";");
				for (var i=0; i<keyValues.length; i++) {
					var keyValue = keyValues[i].split("=");
					if (keyValue.length == 2) {
						var key = keyValue[0];
						var value = keyValue[1];
						if (!naMediaAd.setValue(key, value)) {
							if (!adPosition.keyword) {
								adPosition.keyword = {};
							}
							if (typeof(adPosition.keyword[key]) == "undefined") {
								adPosition.keyword[key] = [];
							}
							else if (!adPosition.isArray(adPosition.keyword[key])) {
								adPosition.keyword[key] = [adPosition.keyword[key]];
							}
							if (adPosition.inArray(adPosition.keyword[key], value) < 0) {
								adPosition.keyword[key].push(value);
							}
							naMediaAd.setValue(key, value);
						}
					}
				}
			}
		);
	};
	
	this.crtg_getCookie = function(c_name) {
		var i,x,y,ARRcookies=document.cookie.split(";");
		for(i=0;i<ARRcookies.length;i++){
			x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
			y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
			x=x.replace(/^\s+|\s+$/g,"");
			if(x==c_name){
				return unescape(y);
			}
		}
		return'';
	};
};
naMediaAd.AdTargetingCriteoImpl.prototype = new naMediaAd.AbstractAdTargeting;
naMediaAd.ServiceRegistry.registerService(naMediaAd.ServiceName.ADTARGETING, naMediaAd.AdTargetingCriteoImpl, true);


naMediaAd.triggerEvent("INIT");

