/**
* @author GDI, Universal Music Group
* @version 1.0
* @description AS2 Brightcove Player External Ad Loader
*
* AdDisplay class to handle Brightcove ads from a DoubleClick server.
* To change target div of external ads, set value of adDisplay.targetDiv
*
* Based on code by Brandon Aaskov.
*/

function AdDisplay() {
	this.targetDiv = "expandedBanner";
	this.adPriority = 0;
	this.enableDebug = false;
}

// Plays Prerolls
AdDisplay.prototype.playVideoAd = function(adHash) {
	var adObj = new Object();
	adObj.type = "videoAd";

	var properties = new Array("videoURL", "videoClickURL", "duration");
	for (var i=0; i<properties.length; i++) {
		var val = adHash[properties[i]];
		if (val != null && val != "") {
			adObj[properties[i]] = val;
		}
	}
	var arrProperties = new Array("trackStartURLs", "trackMidURLs", "trackEndURLs");
	for (var i=0; i<arrProperties.length; i++) {
		var val = adHash[arrProperties[i]];
		if (val != null && val != "") {
			adObj[arrProperties[i]] = val.split(",");
		}
	}
	
	callFlash("playAd", adObj); // load into brightcove
}

// Notify Player to Continue w/o Preroll
AdDisplay.prototype.resumeVideo = function() {
	callFlash("endExternalAd");
}

// Renders Banners
AdDisplay.prototype.loadExternalBanner = function(bannerURL, clickURL, width, height, priority) {
	if (priority >= this.adPriority) {
		this.adPriority = priority;
		
		var expandedBanner = document.getElementById(this.targetDiv);
		
		if (bannerURL.substr(bannerURL.length - 4, 4).toLowerCase() == ".swf") // Flash
		{
			var objectTag = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="' + width + '" height="' + height + '" id="expandedBanner" align="middle">';
			objectTag += '<param name="allowScriptAccess" value="always" />';
			objectTag += '<param name="movie" value="' + bannerURL + '" />';
			objectTag += '<param name="quality" value="high" />';
			objectTag += '<param name="bgcolor" value="#ffffff" />';
			objectTag += '<param name="FlashVars" value="clickTag=' + clickURL + '" />';
			objectTag += '<embed src="' + bannerURL + '" quality="high" bgcolor="#ffffff" width="' + width + '" height="' + height + '" name="expandedBanner" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" FlashVars="clickTag=' + clickURL + '" />';
			objectTag += '</object>';
			expandedBanner.innerHTML = objectTag;
		}
		else if ((bannerURL.substr(bannerURL.length - 5, 5).toLowerCase() == ".html") || // HTML Page
				 (bannerURL.substr(0, 39) == "http://ad.doubleclick.net/adi/umg.inrd/")) // Redirect Link
		{
			expandedBanner.innerHTML = '<iframe height="' + height + '" width="' + width + '" scrolling="no" src="' + bannerURL + '"  frameBorder="0"></iframe>';
		}		
		else // Image
		{
			expandedBanner.innerHTML = "<a href='" + clickURL + "' target='_blank'><img src='" + bannerURL + "' border='0' /></a>";
		}
	}
}

// Debugging
AdDisplay.prototype.debugSource = function(str, targetDiv) {
	if (this.enableDebug) {
		var div = document.getElementById(targetDiv);
		var text = document.createTextNode(str);
		div.appendChild(text);
		div.appendChild(document.createElement("br"));
	}
}

AdDisplay.prototype.processAdXml = function(adString)
{
	if (adString.indexOf("LIGHTNINGCAST AD") != -1) // remnant ad network
	{
		return;
	}
	else if (adString.indexOf("<a ") != -1 || adString.indexOf("<A ") != -1) // anchor tag signifies empty ad
	{
		this.resumeVideo();
		return;
	}
	else if (adString == "<html><body></body></html>") // response for unscheduled ad site
	{
		this.resumeVideo();
		return;
	}
	// URL Escape "&" as a safeguard
	adString = adString.replace(/&/g, "%26");
	
	// Parse Data
	if (window.ActiveXObject) // IE
	{
		var adXML = new ActiveXObject("Microsoft.XMLDOM");
		adXML.async = false;
		adXML.loadXML(adString);
	}
	else if (window.XMLHttpRequest) // Mozilla
	{
		var adXML = (new DOMParser()).parseFromString(adString, "text/xml");
	}

	var adHash = new Object(); // Object for collecting parameters
	adHash.type = adXML.firstChild.nodeName;
	
	for(var i = 0; i < adXML.firstChild.attributes.length; i++) // XML Attributes
	{
		var currentNode = adXML.firstChild.attributes[i];
		if (currentNode.firstChild != null) {
			adHash[currentNode.nodeName] = currentNode.firstChild.nodeValue;
		}
	}

	for(var i = 0; i < adXML.firstChild.childNodes.length; i++) // XML Children Nodes
	{
		var currentNode = adXML.firstChild.childNodes[i];
		if (currentNode.firstChild != null) {
			adHash[currentNode.nodeName] = currentNode.firstChild.nodeValue;
		}
	}

	// Display Ads
	if (adHash.type == "Rectangle300x250") { // Standalone w/ no video
		adDisplay.loadExternalBanner(adHash.rectangleURL, adHash.rectangleURL, 300, 250, 0); 
		adDisplay.resumeVideo(); // No video
	}
	else if (adHash.type == "SynchedBanner728x90") {
		adDisplay.loadExternalBanner(adHash.expandedBannerURL, adHash.expandedBannerClickURL, 728, 90, 1); 
		adDisplay.playVideoAd(adHash);
	}
	else if (adHash.type == "SynchedBanner468x60") {
		//SynchedBanner468x60 are actually prerolls w/ 300x250 companions, so use:
		adDisplay.loadExternalBanner(adHash.expandedBannerURL, adHash.expandedBannerClickURL, 300, 250, 1);
		adDisplay.playVideoAd(adHash);
	}
	else if (adHash.type == "BCPrerollAndCompanion300x250") {
		adDisplay.loadExternalBanner(adHash.expandedBannerURL, adHash.expandedBannerClickURL, 300, 250, 1); 
		adDisplay.playVideoAd(adHash);
	}	
	else if (adHash.type = "videoAd") {
		adDisplay.playVideoAd(adHash);
	}
	else{ 
		adDisplay.resumeVideo();
	}
}
//---------------------------------------------------------------------------------------------------------------------

// Instantiate AdDisplay CLASS
var adDisplay = new AdDisplay();

function playAd(adString, callback) {
	adDisplay.processAdXml(adString);
}