ctv.ca.AdController = function() {
    this.currentAdObj = null;
    this.startTracking = false;
	this.refreshTimer = null;
}

ctv.ca.AdController.prototype = {
    serveAd : function(clip) {
            //the ad will be a preroll for clip, so setup the ad url based on the clip
            var url = this.setupAdUrl(clip);
            var xhr = new CTVFlashXMLHttpRequest();
			xhr.HttpCall("GET", url,"ctvAdController.playAd", null);
    },
    
    playAd : function (response) {
    	var adUrls = XMLParser.parseMediaUrls(response[0], null);
    	ctvAdPlayerHead = new ctv.ca.PlayerHead(adUrls);
        
        //mastercontroller will play all the ad first
        ctvMasterController.playNextClip();
		
		//set the coAd
		if (this.currentAdObj.coAdUrl != "")
			this.setCoAd(this.currentAdObj.coAdUrl); 
    },
    
   safeString: function(s)
   {
       try
       {
          s = unescape(s);
          s = s.replace(/\W+/gi,"_").toLowerCase();
          s = s.replace(/\s+/gi,"_").toLowerCase();
          s = s.replace(/_+/g,"_");
       }
       catch(e)
       {
          return s;
       }
       return s;
   },
    
    setupAdUrl : function(clip) {
        var url = "";
        try
        { 
            var adZone = ctvConfigController.adCall.zone;
            var contentType = clip.showTypeName;
            var pos = contentType.indexOf("##");
            if (pos > 0)
            {
                var tmpStr = contentType.substring(pos+2);
                pos = tmpStr.indexOf("##");
                if (pos > 0)
                {
                    tmpStr = tmpStr.substring(0,pos);
                }
                adZone = tmpStr.toUpperCase();
            }
            url = ctvConfigController.adCall.Url + ctvConfigController.adCall.dartCommand + "/" + ctvConfigController.adCall.site + "/" + adZone + ";";
            
            if(typeof(ctvConfigController.adCall.OtherValues) != 'undefined')
                url += ctvConfigController.adCall.OtherValues + ";";
            
            var targetingVals = "";
            targetingVals += "gateway=page" + ";";
            targetingVals += "section_1=" + this.safeString(clip.showTypeId) + ";";
            targetingVals += "section_2=" + this.safeString(clip.showTypeName) + ";";
            targetingVals += "video_id=" + this.safeString(clip.clipId) + ";";
            targetingVals += "mode=vod;";
            targetingVals += ctvConfigController.adCall.Size;

            url += targetingVals;

            try 
            {
                var uvalues = "u=|" + targetingVals.split("=").join("-").split(";").join("|"); 
                url += uvalues + ";";
            }
            catch(e)
            {
                //debug("EXCEPTION: makeAdObj() " + e.description);
            }

            url += "ord="+ Math.floor(Math.random() * 100000000000) + "?";
       }
        catch(e)
        {
            //debug("EXCEPTION: makeAdObj() " + e.description);
        }
        return url;
    },
       
    setupAdTracker : function() {
       try {
              var body = $get("trackerDiv");
              var trackerdiv = document.createElement('div');
              trackerdiv.id = 'trackerdiv';
              trackerdiv.style.display = 'none';

              var im_s = document.createElement('img');
              im_s.id = "trackerimg_start"; 
              im_s.style.display = "none"; 
              im_s.src = 'http://image01.ctvdigital.com/images/system/spacer.gif';

              var im_e = document.createElement('img');
              im_e.id = "trackerimg_end"; 
              im_e.style.display = "none"; 
              im_e.src = 'http://image01.ctvdigital.com/images/system/spacer.gif';

              trackerdiv.appendChild(im_s);
              trackerdiv.appendChild(im_e);
              body.appendChild(trackerdiv);
        }catch(e){}
    },
    
    onVideoWindowStateChange : function(sender, s) {
        if (s == 3 && this.currentAdObj != null && !this.startTracking) { //start
            if(typeof(this.currentAdObj.trackingStartUrl) != "undefined" && typeof(this.currentAdObj.trackingEndUrl) != "undefined" && this.currentAdObj.trackingStartUrl != null){
                this.startTracking = true;
                var im = $get('trackerimg_start');
                im.src = this.currentAdObj.trackingStartUrl;
                //debug("im : " + im.src);
                var im_e = $get('trackerimg_end');
                im_e.src = 'http://image01.ctvdigital.com/images/system/spacer.gif';
            }
        } else if (s == 8 && this.currentAdObj != null && this.startTracking != "") { //end
            this.startTracking = false;
            var im_e = $get('trackerimg_end');
            im_e.src = this.currentAdObj.trackingEndUrl;
            //debug("im_e : " + im_e.src);
            this.currentAdObj = null;
        }
    },
	
	refreshAds : function()
	{
		this.setCoAd(ctvConfigController.bottomFrameUrl);
	},
	
	setCoAd : function(coAd)
	{
		clearTimeout(this.refreshTimer);

		try
		{
			if (!$.browser.msie) document.getElementById("bottomFrame").src = coAd;
			else bottomFrame.location.href = coAd;
			
			
		}
		catch (e) {}

		var thisObj = this;
		this.refreshTimer = setTimeout(function() { thisObj.refreshAds() },ctvConfigController.adRefreshGap);				 

	}
	
}

ctv.ca.AdController.registerClass('ctv.ca.AdController', Sys.Component);

var ctvAdController = new ctv.ca.AdController();




