
function adManager() { 
   this.firstrun = true;
   this.coad = "";
} 

adManager.prototype.processConfig = function () {
	adManager.lastAdTag = "lastAdTag";  //in case of noord
	adManager.adCountTimer = null;
	adManager.adEvalMark = 10000;
	adManager.container = {id:0,adsPlayed:0}; 
	adManager.maxEls = configManager.adInsertion.maxEls;  
	adManager.maxElsOnReset = configManager.adInsertion.maxElsonReset;  
	adManager.resetSwitch = configManager.adInsertion.resetSwitch; 
	adManager.raiseFranchiseIntro = configManager.adInsertion.raiseFranchiseIntro;
	adManager.killTrailingAds = (typeof configManager.adInsertion.killTrailingAds=="undefined") ? 0 : configManager.adInsertion.killTrailingAds; 
	adManager.dartCommand = (typeof configManager.adCall.dartCommand=="undefined") ? "adx" : configManager.adCall.dartCommand; 
	adManager.maxTime = (typeof configManager.adInsertion.maxTime=="undefined") ? 0 : configManager.adInsertion.maxTime;
	if (typeof configManager.adExclusion=="undefined") {
		adManager.adExclusion = new Array();
	} else adManager.adExclusion = configManager.adExclusion;
}

adManager.prototype.makeAdObj = function (wo) { 
	try { 
		var slate = wo ? ((adManager.container.adsPlayed<1) ? true : false) : true;	
 		var obj = wo ? videoEvent : preBuffEvent; 
		var adObj = {}; 
		adObj.url = "http://ad.doubleclick.net/" + adManager.dartCommand + "/" + configManager.adCall.site + "/" + configManager.adCall.zone + ";";
		adObj.url = "http://ad.doubleclick.net/" + adManager.dartCommand + "/" + configManager.adCall.site + "/"; 



      try {

         var has_custom_zone = false;


         if(typeof configManager.adsetup_customZones != 'undefined'){
            for (var i in configManager.adsetup_customZones){
               if(configManager.adsetup_customZones[i] != ""){
                  if(safeString(obj.gateway.name).toLowerCase() == i.toLowerCase()){
		               adObj.url += configManager.adsetup_customZones[i] + ";";
                     has_custom_zone = true;
                  }
               }
            }
         }

         if(! has_custom_zone ){
            adObj.url += configManager.adCall.zone + ";"; 
         }

      } catch(e) {
      }




      var targetingVals = "";
		targetingVals += "gateway=" + safeString(obj.gateway.name) + ";";
		targetingVals += "section_1=" + safeString(obj.content.type) + ";";
		targetingVals += "section_2=" + safeString(obj.content.title) + ";";
		targetingVals += "video_id=" + safeString(obj.id) + ";";
		targetingVals += "mode=" + appManager.env.mode + ";";
		targetingVals += "sz=416x312;";
		targetingVals += "slate="+slate+";";

      try {
         if(typeof configManager.adsetup_additionalValues != 'undefined'){
            for (var i in configManager.adsetup_additionalValues){
               if(configManager.adsetup_additionalValues[i] != ""){
                  if(i == "launchedFrom"){
                     if(this.firstrun){
                         targetingVals += i + "=" + configManager.adsetup_additionalValues[i] + ";";
                        if(adManager.container.adsPlayed > 0){
                           this.firstrun = false;
                        }
                     }
                  }else{
                  targetingVals += i + "=" + configManager.adsetup_additionalValues[i] + ";";
                  }
               }
            }
         }

      } catch(e) {
      }




    if(window.location.search.indexOf("testmode")!=-1){
         targetingVals += "testmode=on;";
    }


	try { 
         if(typeof obj.content.title != 'undefined'){
          	if(safeString(obj.content.title).indexOf('daily_show') != -1){
                targetingVals += "!category=sens;";
            }
         }

    } catch(e) {
    }

      adObj.url += targetingVals;

      try {
         var uvalues = "u=|" + targetingVals.split("=").join("-").split(";").join("|"); 
         adObj.url += uvalues + ";";
      }catch(e){
         //adObj.url += ";error=" + safeString(e.message);
      }


		adObj.url += "ord="+ Math.floor(Math.random() * 100000000000) + "?";
		adObj.id = "ad"; 
		return adObj; 
	} catch(e) {
		printStatus("e makeAdObj: "+e.description);
	}
}

adManager.prototype.ifAdInsertion = function () {
	//printStatus("ifAdInsertion: "+appManager.adCount+"/"+adManager.maxEls);
	if (appManager.playIntro) return false;
	if (appManager.adCount >= adManager.maxEls) return true;
	return false;
}  
 
adManager.prototype.ifForceCoAd = function (cid) { 
	for (var i=0;i<adManager.adExclusion.length;i++) {  
		if (cid == adManager.adExclusion[i].id) return adManager.adExclusion[i].coAdUrl; 
	}
	return false;
}

adManager.prototype.ifTakesAds = function (cid) {  
	if(ShowNoAds){
		return false;
	}else{
		for (var i=0;i<adManager.adExclusion.length;i++) {  
			if (cid == adManager.adExclusion[i].id) return false; 
		}
		return true;
	}
}

adManager.prototype.ifTakesLeadingAd = function (takesAds, type) { 
	try {  
		if (!takesAds) return false; 
		if (adManager.ifRaiseFranchiseIntro(type)) return false;
		return true;
	} catch(e) {
		printStatus("e ifTakesLeadingAd: "+e.description);
	}
}

adManager.prototype.ifForceLeadingAd = function (newContainer, takesLeadingAd) { 
	try {  
		//alert("ifForceLeadingAd "+newContainer +" "+ adManager.maxElsOnReset +" "+ takesLeadingAd)
	 	return (newContainer && adManager.maxElsOnReset==0 && takesLeadingAd);  
	} catch(e) {
		printStatus("e ifForceLeadingAd: "+e.description);
	}
} 

adManager.prototype.ifTakesTrailingAd = function (takesAds, type) { 
	try {
		if (!takesAds) return false; 
		return true;
	} catch(e) {
		printStatus("e ifTakesTrailingAd: "+e.description);
	} 
}

adManager.prototype.ifForceTrailingAd = function (takesAds, type) { 
	try {
		if (!takesAds) return false;
	 	if (adManager.ifRaiseFranchiseIntro(type)) return true;
		return false;
	} catch(e) {
		printStatus("e ifForceTrailingAd: "+e.description);
	} 
} 

adManager.prototype.ifRaiseFranchiseIntro = function (type) { 
	try {
		if (adManager.raiseFranchiseIntro && type==15) return true;
		return false;
	} catch(e) {
		printStatus("e ifRaiseFranchiseIntro: "+e.description);
	} 
} 
 
adManager.prototype.resetAdCount = function () {
	//printStatus("resetAdCount"); 
	try { 
		appManager.adCount = (videoEvent.takesAds&&videoEvent.takesLeadingAd) ? adManager.maxEls-adManager.maxElsOnReset : 0;	
		adManager.container.id = eval("videoEvent."+adManager.resetSwitch);
		adManager.container.adsPlayed = 0;  
	} catch(e) {
		printStatus("e resetAdCount: "+e.description); 
	}
}   

adManager.prototype.startPlayNextElement = function () { 
	if (appManager.playIntro) return;
	if (!videoEvent.newContainer) return; 
	
	try { //videoEvent starts new container 
		if (adManager.ifAdInsertion()) { //trailing ad
			printStatus("...... hasTrailingAd: "+adManager.ifKillTrailingAd(true)); 
			if (adManager.ifKillTrailingAd(true)) {
				appManager.adCount = adManager.maxEls - adManager.maxElsOnReset;
				playlist.items[playlist.index].isAd = false; //kill existing ad  
				printStatus("...... trailing ad killed"); 
			}
			return;
		} 
		
		if (videoEvent.forceLeadingAd) { //leading ad
			printStatus("...... forceLeadingAd: "+adManager.ifKillLeadingAd()+" "+adManager.leadingAdPlayed()); 					
			if (adManager.ifKillLeadingAd()||adManager.leadingAdPlayed()) {
				appManager.adCount = 0;
				if (adManager.ifKillLeadingAd()) printStatus("...... leading ad killed");
				return;
			} 
		} 
		
		adManager.resetAdCount(); //no trailing or leading ad
	} catch(e) {
		printStatus("e startPlayNextEl: "+e.description)
	} 
}    

adManager.prototype.endPlayNextElement = function () {
	try { 	 
		if (appManager.adPlaying) { 
			adManager.container.adsPlayed++;
			appManager.adCount = 0; 
			return;
		}
		//video played 
		if (videoEvent.newContainer) { 
			if (appManager.playIntro && videoEvent.forceLeadingAd) { 
				var scriptCall = "appManager.insertAd(true)"; 
				setTimeout(scriptCall,100);   
			}
			if (!appManager.playIntro && videoEvent.forceCoAd) adManager.setCoAd(videoEvent.forceCoAd);
			if (!appManager.playIntro && videoEvent.forceTrailingAd) {
				appManager.adCount = adManager.maxEls; 
				var scriptCall = "appManager.insertAd(true)"; 
				setTimeout(scriptCall,200); //after pbE added 
				//printStatus("adCount videoEvent.forceTrailingAd: "+appManager.adCount);
			}   
		}
		if (preBuffEvent.forceLeadingAd) { 
			//printStatus("adCount pBEvent.forceLeadingAd: "+appManager.adCount);
			setTimeout(appManager.insertAd,200); 
		}
	} catch(e) {
		printStatus("e endPlayNextEl: "+e.description)
	} 
}  

adManager.prototype.ifKillTrailingAd = function (wo) { 
	try {
		if (adManager.killTrailingAds == 0) return false; //never
		if (adManager.killTrailingAds == 2) return true;  //always
		var obj = wo ? "videoEvent" : "preBuffEvent";  
		return eval(obj+".forceLeadingAd"); //only if no leading ad
	} catch(e) {
		printStatus("e ifKillTrailingAd: "+e.description);
		return false; 
	}
} 

adManager.prototype.ifKillLeadingAd = function () { 
	try {
		if (!playlist) return false;
		if (adManager.killTrailingAds==1 && playlist.items[playlist.index-1].isAd) return true;
		if (adManager.killTrailingAds==1 && playlist.length>2) {
			if (playlist.items[playlist.index-2].isAd && Player.controls.currentPosition<2) {
				printStatus("<b style='color:red'>e rolled + saved</b>");
				return true;
			}
		}
		return false; 
	} catch(e) {
		printStatus("e ifKillLeadingAd: "+e.description);
		return false; 
	}
}

adManager.prototype.leadingAdPlayed = function () { 
	try { 
		return (adManager.container.id == eval("videoEvent."+adManager.resetSwitch))  
	} catch(e) {
		printStatus("e leadingAdPlayed: "+e.description)
	}	
}

adManager.prototype.setCoAd = function (adTag) {
	try { 		
      printStatus("coAd: "+adTag);
      if(adTag!=""){
         if(this.coad != adTag){
            if (appManager.env.isFirefox) adFrame.src = adTag;
            else adFrame.location.replace(adTag);
            this.coad = adTag;
         }
      }

	} catch(e) {
		printStatus("e setCoAd: "+e.description)
	} 
}

adManager.prototype.getOrd = function(url){
 if(url.match(/(ord=)([0-9]+)/)){
            return RegExp.$2;
 }else{
    return -1;
 }
}

// Cabral: Added for Clickable Ads. 
adManager.prototype.setCoAdLink = function (url) {
	this.coAdLink = url;
}
adManager.prototype.getCoAdLink = function () { 
	return this.coAdLink;
}


//----------- adEvalMark
adManager.prototype.setAdEvalMark = function () { 
	try {
		//if isidentical
		if (playlist.items[playlist.index].adEvalMark==-1) { 
			var duration = Player.currentMedia.duration;
			playlist.items[playlist.index].adEvalMark = (duration > 20) ? duration - 20 : 0.2;
		}
	} catch(e) {
		printStatus("e adEvalMark: "+e.description);
	}
} 

adManager.prototype.evalMark = function () { 
	try {
		//if isidentical
		if (!playlist.items[playlist.index].forceTrailingAd && playlist.items[playlist.index].takesTrailingAd) { 
			if (appManager.clock.videoTime>=adManager.maxTime) {
				printStatus("time to insert ad: "+ parseInt(appManager.clock.videoTime) +"/"+ adManager.maxTime);
				appManager.adCount = adManager.maxEls;
				appManager.insertAd(true);
				playlist.items[playlist.index].forceTrailingAd = true;
			} 
		}
	} catch(e) {
		printStatus("e adEvalMark: "+e.description);
	}
}  

adManager.prototype.startAdCountTimer = function () { 
	adManager.stopAdCountTimer(); 
	adManager.adCountTimer = setTimeout(adManager.clearAdEvalMark, adManager.adEvalMark); 
} 

adManager.prototype.stopAdCountTimer = function () {
	clearTimeout(adManager.adCountTimer);
}
 
adManager.prototype.clearAdEvalMark = function () {
	clearTimeout(adManager.adCountTimer); 
	if (playlist.items[playlist.index].forceTrailingAd) return;
	if (!playlist.items[playlist.index].takesAds||!playlist.items[playlist.index].takesTrailingAd) return; //scrub calls
		
	try {    
		if (!playlist.items[playlist.index].tenSec && Player.controls.currentPosition>10) {
			printStatus("....... 10s mark");
			appManager.adCount++;
			playlist.items[playlist.index].tenSec = true;
			if (appManager.adCount >= adManager.maxEls) {
				appManager.insertAd(true);
				playlist.items[playlist.index].forceTrailingAd = true;
			}
		} else if (Player.controls.currentPosition < 10) {
			adManager.adCountTimer = setTimeout(adManager.clearAdEvalMark,1000);
		}
	} catch(e) {
		printStatus("e clearAdEvalMark: "+e.description);
	}  
}  

function showAd(){ document.getElementById("adFrame").style.visibility = "visible"; }
function hideAd(){ document.getElementById("adFrame").style.visibility = "hidden"; }
 
adManager = new adManager(); 

