// JavaScript Document

function DARTIFrameUtil_24_12(globalTemplate) {
	this.globalTemplate = globalTemplate;

	this.getSiteHost = function(pageUrl) {
		var siteHost = "";
		if((pageUrl.length >= 7) && (pageUrl.substr(0, 7) == "http://"))
			siteHost = pageUrl.substr(7);
		else if((pageUrl.length >= 8) && (pageUrl.substr(0, 8) == "https://"))
			siteHost = pageUrl.substr(8);
		else
			siteHost = pageUrl;

		var index = siteHost.indexOf("/");
		if(index > 0)
			siteHost = siteHost.substr(0, index);
		return siteHost;
	}

	this.getSiteProtocol = function(pageUrl) {
		var siteProtocol = "";
		if((pageUrl.length >= 5) && (pageUrl.substr(0, 5) == "http:"))
			siteProtocol = "http:";
		else if((pageUrl.length >= 6) && (pageUrl.substr(0, 6) == "https:"))
			siteProtocol = "https:";
		else
			siteProtocol = "http:";
		return siteProtocol;
	}

	this.writeIFrame = function(adParameters, gtVersion, mediaServer, advertiserID, creativeType, isInPreviewMode, creativeIdentifier, isFSV, isFlashFullScreenEnabled) {
		if(this.isInFriendlyIFrame())
			this.processFriendlyIFrameBreakout(adParameters, gtVersion, mediaServer, advertiserID, creativeType, isInPreviewMode, creativeIdentifier, isFSV, isFlashFullScreenEnabled);
		else
			this.processBreakoutUsingPublisherFile(adParameters, gtVersion, mediaServer, advertiserID, creativeType, isInPreviewMode, creativeIdentifier, isFSV, isFlashFullScreenEnabled);
	}

	this.processFriendlyIFrameBreakout = function(adParameters, gtVersion, mediaServer, advertiserID, creativeType, isInPreviewMode, creativeIdentifier, isFSV, isFlashFullScreenEnabled) {
		var targetWindow = self.parent;
		this.targetWindow = targetWindow;
		var iframe = this.getThisIFrame();
		if(typeof(iframe.MotifIFrameIDArray) == "undefined") {
			iframe.MotifIFrameIDArray = new Array();
		}
		iframe.MotifIFrameIDArray[iframe.MotifIFrameIDArray.length] = creativeIdentifier;
		iframe.dartGlobalTemplateVersion = gtVersion;

		if(this.globalTemplate.isFirefox()) { //ReadyState workaround for Firefox.
			targetWindow.g_motifPageLoadedFlag = false;
			targetWindow.pageLoadCallback = new Function("self.parent.g_motifPageLoadedFlag = true;");
			targetWindow.addEventListener("load", targetWindow.pageLoadCallback, true);
		}
		if(creativeType == "FLOATING" || creativeType == "FLOATINGWITHREMINDER") {
			if(this.isInterstitialPlaying(targetWindow))
				return;
			this.setInterstitialPlaying(targetWindow);
		}
		this.setPreviewMode(targetWindow, isInPreviewMode);
		if(this.isGlobalTemplateScriptLoaded(gtVersion)) {
			var iframeObj = this.getDARTIFrameObject(gtVersion);
			var creativeObj = this.getCreativeObject(adParameters, gtVersion, mediaServer, creativeType, creativeIdentifier, isFSV, isFlashFullScreenEnabled);
			iframeObj.doIFrameBreakout(creativeObj, creativeIdentifier);
		}
		else {
		this.setCreativeData(targetWindow, adParameters, gtVersion, mediaServer, creativeType, creativeIdentifier, isFSV, isFlashFullScreenEnabled);
		this.loadGlobalTemplateScript(targetWindow, iframe, gtVersion, mediaServer, advertiserID);
	}
		var unloadCallback = "removeCreative('" + gtVersion + "','" + creativeIdentifier + "','" + creativeType + "'," + !(new DARTMotifUtil_24_12()).isInYahooFriendlyIFrame() + ")";

		this.globalTemplate.registerPageUnLoadHandler(unloadCallback, this);
	}

	this.removeCreative = function(gtVersion, creativeIdentifier, creativeType, deleteOnlyJSObjects) {
		if(this.isGlobalTemplateScriptLoaded(gtVersion)) {
			var iframeObj = this.getDARTIFrameObject(gtVersion);
			iframeObj.removeCreative(creativeIdentifier, creativeType, deleteOnlyJSObjects);
		}
	}

	this.getDARTIFrameObject = function(gtVersion) {
		var script = "(new this.targetWindow.DARTIFrame_" + gtVersion + "())";
		return eval(script);
	}

	this.getCreativeObject = function(adParameters, gtVersion, mediaServer, creativeType, creativeIdentifier, isFSV, isFlashFullScreenEnabled) {
		var obj = new Object();
		obj.creativeInfo = adParameters;
		obj.creativeType = creativeType;
		obj.mediaServer = mediaServer;
		obj.fullScreenVideoEnabled = isFSV;
		var util = new DARTMotifUtil_24_12();
		obj.MsnDapIF = (util.isInMsnFriendlyIFrame()) ? true : false;
		obj.isTzCreative = this.globalTemplate.isTzCreative;
		obj.tzAutoContract = this.globalTemplate.tzAutoContract;
		obj.tzOverlayToPlacement = this.globalTemplate.tzOverlayToPlacement;
		obj.mtfNoFlush = this.globalTemplate.mtfNoFlush;
		obj.flashFullScreenEnabled = isFlashFullScreenEnabled;
		obj.stringPostingURL = this.globalTemplate.stringPostingURL;
		return obj;
	}

	this.setCreativeData = function(targetWindow, adParameters, gtVersion, mediaServer, creativeType, creativeIdentifier, isFSV, isFlashFullScreenEnabled) {
		var creativeVariable = "dartIFrameCreative_" + creativeIdentifier + "_" + gtVersion;
		var obj = this.getCreativeObject(adParameters, gtVersion, mediaServer, creativeType, creativeIdentifier, isFSV, isFlashFullScreenEnabled);
		this.createJSVariable(targetWindow, creativeVariable, obj);
	}

	this.loadGlobalTemplateScript = function(targetWindow, iframe, gtVersion, mediaServer, advertiserID) {
		if(this.isLoadingGlobalTemplateScript(targetWindow, gtVersion))
			return;
		this.createJSVariable(targetWindow, "loadingDartGlobalTemplate_" + gtVersion, true);
		var script = targetWindow.document.createElement("SCRIPT");
		script.src = mediaServer + "/" + advertiserID + "/globalTemplateIframe_" +  gtVersion + ".js";
		var elements = targetWindow.document.getElementsByTagName("head");
		if(this.globalTemplate.isInternetExplorer() && elements.length > 0) {
			elements[0].appendChild(script);
		}
		else if(iframe.parentNode.parentNode) {
			iframe.parentNode.parentNode.appendChild(script);
		}
		else {
			iframe.parentNode.insertBefore(script, iframe);
		}
	}

	this.isLoadingGlobalTemplateScript = function(targetWindow, gtVersion) {
		var varName = "loadingDartGlobalTemplate_" + gtVersion;
		return (typeof(targetWindow[varName]) != "undefined" && targetWindow[varName]);
	}

	this.isGlobalTemplateScriptLoaded = function(gtVersion) {
		var varName = "this.targetWindow.dartGlobalTemplateLoaded_" + gtVersion;
		if(eval("typeof(" + varName + ")") != "undefined" && eval(varName) == true)
			return true;
		return false;
	}

	this.processBreakoutUsingPublisherFile = function(adParameters, gtVersion, mediaServer, advertiserID, creativeType, isInPreviewMode, creativeIdentifier, isFSV, isFlashFullScreenEnabled) {
		var docReferrer = self.document.referrer;
		if(docReferrer == "") {
			try {
				docReferrer = self.parent.location.href;
				if(docReferrer == "")
					return;
			}
			catch(e) {
				return;
			}
		}
		if(isInPreviewMode && !this.isInExternalPage())
			docReferrer = self.location.href;

		var filePath = "/doubleclick/";
		if(filePath == "")
			filePath = "/doubleclick/DARTIframe.html";
		else
			filePath += "DARTIframe.html";

		mediaServer += "/" + advertiserID;
		var siteProtocol = this.getSiteProtocol(docReferrer);
		var siteHost = this.getSiteHost(docReferrer);
		siteHost = siteProtocol + "//" + siteHost + filePath;
		adParameters = escape(adParameters);

		var getSizeLimit = 1600;
		var staticParams = "&gtVersion=" + escape(gtVersion) + "&mediaserver=" + escape(mediaServer) +
							"&previewMode=" + escape(isInPreviewMode) + "&creativeType=" + escape(creativeType) + "&cid=" + escape(creativeIdentifier) +
							"&isFSV=" + isFSV + "&isTz=" + this.globalTemplate.isTzCreative + "&tzAutoContract=" + this.globalTemplate.tzAutoContract + "&tzOverlayToPlacement=" + this.globalTemplate.tzOverlayToPlacement +
							"&mtfNoFlush=" + this.globalTemplate.mtfNoFlush + "&isFlashFullScreenEnabled=" + isFlashFullScreenEnabled + "&stringPostingURL=" + escape(this.globalTemplate.stringPostingURL);

		var masterParamLength = getSizeLimit - staticParams.length - siteHost.length - "?adParams=".length;
		var needSlaves = false;
		if(masterParamLength >= adParameters.length)
			masterParamLength = adParameters.length;
		else
			needSlaves = true;

		var slaveParams = "";
		var slaveParamLength = 0;
		var numberOfSlaves = 0;
		if(needSlaves) {
			slaveParams = "&gtVersion=" + escape(gtVersion) + "&mediaserver=" + escape(mediaServer) + "&cid=" + escape(creativeIdentifier);
			slaveParamLength = getSizeLimit - siteHost.length - "?adParams=".length - slaveParams.length - "&index=".length;
			numberOfSlaves = Math.ceil((adParameters.length - masterParamLength)/slaveParamLength);
		}
		var masterParams = adParameters.substring(0, masterParamLength);
		document.write("<iframe src='" + siteHost + "?adParams=" + masterParams + staticParams + "&needSlaves=" + needSlaves + "&numberOfSlaves=" + numberOfSlaves + "' width='0px' height='0px' frameborder='0' scrolling='no'></iframe>");
		if(needSlaves) {
			adParameters = adParameters.substring(masterParamLength);
			var paramLength = 0;
			var slaveIndex = 0;
			while(adParameters.length > 0) {
				paramLength = slaveParamLength;
				if(slaveParamLength >= adParameters.length)
					paramLength = adParameters.length;

				this.writeSlaveIFrame(siteHost, adParameters.substring(0, paramLength), slaveParams, slaveIndex++, creativeIdentifier);
				adParameters = adParameters.substring(paramLength);
			}
		}
	}

	this.writeSlaveIFrame = function(siteHost, adParams, slaveParams, index, cid) {
		var iframeLocation = siteHost + "?adParams=" + adParams + slaveParams + "&index=" + index;
		document.write("<iframe src='" + iframeLocation + "' name='" + cid + "_" + index + "' width='0px' height='0px' frameborder='0' scrolling='no'></iframe>");
	}

	this.isInIFrame = function() {
		if(this.globalTemplate.isInAdSenseIFrame()) {
			return false;
		}
		var iframeReq = "";
		if(typeof(iframeRequest) == "undefined")
			iframeRequest = "";
		if(iframeReq != "")
			iframeRequest = iframeReq;

		if(self == top)
			return false;
		else if(String(iframeRequest).toLowerCase() == "false")
			return false;
		else if(self.location.href.toLowerCase().indexOf("doubleclick.net/adi") > -1)
			return true;
		else if(("%eenv!") == "i")
			return true;
		else if(this.checkWithTryCatch())
			return true;
		else
			return false;
	}

	this.isInExternalPage = function() {
	    return (typeof(isInExternalPage) != "undefined" && String(isInExternalPage).toLowerCase() == "true");
	}

	this.checkWithTryCatch = function() {
		try {
			if(self.parent.document) {
				if(self.parent.document.getElementsByTagName("frame").length == 0) {
					var frames = self.parent.frames;
					for(var i = 0; i < frames.length; i++) {
						if(frames[i] == self)
							return true;
					}
				}
			}
			else if (this.globalTemplate.isSafari() && self.parent.document == undefined) {
				return true;
			}
			return false;
		}
		catch(e) {
			return true;
		}
	}

	this.isBreakoutSuccessful = function() {
		try {
			return (self.frames[0].frames.length > 0 && typeof(self.frames[0].frames['DARTMotifIFrame']) != "undefined");
		}
		catch(e) {
			return true;
		}
	}

	this.isInFriendlyIFrame = function() {
		var motifUtil = new DARTMotifUtil_24_12();
		return motifUtil.isInFriendlyIFrame();
	}

	this.getThisIFrame = function() {
		if(this.globalTemplate.isFirefox()) {
			var iframeElements = self.parent.document.getElementsByTagName("iframe");
			for(var k = 0; k < iframeElements.length; k++) {
				var iframeEle = iframeElements[k];
				if(iframeEle.contentWindow == self) {
					return iframeEle;
				}
			}
			return null;
		}

		var targetWindow = self.parent;
		var frames = targetWindow.frames;
		for(var i = 0; i < frames.length; i++) {
			if(frames[i] == self)
				return targetWindow.document.getElementsByTagName("iframe")[i];
		}
		return null;
	}

	this.isInterstitialPlaying = function(targetWindow) {
		return (typeof(targetWindow.DoNotDisplayIA) == "number");
	}

	this.setInterstitialPlaying = function(targetWindow) {
		this.createJSVariable(targetWindow, "DoNotDisplayIA", 1);
	}

	this.setPreviewMode = function(targetWindow, previewMode) {
		this.createJSVariable(targetWindow, "doubleClick_dartIsInPrevMode", previewMode);
	}

	this.createJSVariable = function(targetWindow, variableName, variableValue) {
		targetWindow[variableName] = variableValue;
	}
}
