xmp.createNamespace("CNN");

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

CNN.AbstractOmnitureTriggerCommand = function()
{
};

// Static 'now' date on client machine
CNN.AbstractOmnitureTriggerCommand._clientStartMs = (new Date()).getTime();

CNN.AbstractOmnitureTriggerCommand.prototype.doCommand = function(context)
{
	switch (context.getTriggerType())
	{
		case 'start': this._doStartCommand(context); break;
		//case 'mid': this._doMidCommand(context); break;
		case 'end': this._doEndCommand(context); break;
		default: break;
	}
};

CNN.AbstractOmnitureTriggerCommand.prototype._doStartCommand = function(context)
{
	var isTurnerDomain = false;
	if(location.hostname.indexOf('turner.com')>0) { isTurnerDomain = true; }
  	var cnnScTitle = escape(context.getPlayableNode().getPlayableData().getDataObject().headline);
	var isContent = 1;
	if (cnnScTitle == 'Intro')	// dont count 3 sec intro as pageview
		isContent = 0;
	if(!isTurnerDomain && isContent) { // don't add tracking image to internal player
		var cnnScImgSrc = '';
	    var cnnScRandom = Math.ceil(Math.random()*1000000000);
	  	cnnScImgSrc += 'http://secure-us.imrworldwide.com/cgi-bin/m?ci=us-100120';
	  	cnnScImgSrc += '&tl=dav0-' + cnnScTitle;
	   	cnnScImgSrc += '&c6=vc,c02';
	 	cnnScImgSrc += '&cc=1';
	  	cnnScImgSrc += '&rnd=' + cnnScRandom;
	  	window.top.document.images['cookieCrumb'].src = cnnScImgSrc;
	}

// omniture tracking
	var cnnmPlayListType = CNNPlaylistManager.getInstance().playlistType;
	var cnnmVidSectionPath = context.getPlayableNode().getPlayableData().getDataObject().section;
	var cnnmVidNames = get_video_names(cnnmVidSectionPath);
	var cnnmVidSectionName = cnnmVidNames[0];
	var cnnmVidSourceName = cnnmVidNames[1];
	var cnnmVidURL =  context.getPlayableNode().getPlayableData().getDataObject().id;
	var omnitureImgSrc = '';
    var omniturerdm = Math.ceil(Math.random()*1000000000);
  	omnitureImgSrc += 'http://aolturnercnnmoney.122.2o7.net/b/ss/aolturnercnnmoney/1/G.5-PD-R/';
	omnitureImgSrc +=  omniturerdm;

	if(isContent)
	{
	  	omnitureImgSrc += '?pageName=' + cnnScTitle;
	   	omnitureImgSrc += '&ch=Video';
		omnitureImgSrc += '&c1=Video';
		omnitureImgSrc += '&c2=' + cnnmVidSectionName;
		omnitureImgSrc += '&c7=' + document.domain;
		omnitureImgSrc += '&c8=' + cnnmVidURL;
		var s_prop9='';
		if (typeof(cnnmVidBrandingValue) != "undefined") {
		    s_prop9=special_package(cnnBrandingValue);
		} else {
		    s_prop9=special_package("");
		}
		if (s_prop9)
			omnitureImgSrc += '&c9='+ s_prop9;
		var s_prop10='';
	 	if (typeof(cnnmVidSourceName) != "undefined") {
		    s_prop10=subcategories(cnnmVidSourceName);
		} else {
		    s_prop10=subcategories("");
		}
		if (s_prop10)
			omnitureImgSrc += '&c10='+ s_prop10;
		var s_prop14='';
		if (typeof(cnnmVidSourceName) != "undefined") {
		    s_prop14=cnnmVidSourceName;
		} 
		if (s_prop14)
			omnitureImgSrc += '&c14='+ s_prop14;
		var s_prop17='';
		if (cnnmVidURL.match('fsb') || cnnmVidURL.match('smallbusiness'))
			s_prop17='Video: '+cnnScTitle;
		if (s_prop17)
			omnitureImgSrc += '&c17='+ s_prop17;
		omnitureImgSrc += '&c18=' + cnnmVidURL;
			
		if(cnnmPlayListType=='bvp')
		{
			if(location.pathname.match('/video/ft'))
				omnitureImgSrc += '&v6=' + cnnScTitle;	//fortune bvp
			else
				if(location.pathname.match('/video/smallbusiness'))
					omnitureImgSrc += '&v17=' + cnnScTitle;	//smallbusiness bvp
				else
					omnitureImgSrc += '&v5=' + cnnScTitle;	//cnnmoney bvp
			var events='event4';
		}
		if(cnnmPlayListType=='sa')
		{
			if(location.pathname.match('/magazines/fortune'))
				omnitureImgSrc += '&v8=' + cnnScTitle;	//fortune homepage
			else
				if(location.pathname == '/.element/ssi/main/2.0/video.module.html')
					omnitureImgSrc += '&v7=' + cnnScTitle;	//cnnmoney homepage
			else
				if(top.location.pathname.match('^/data/premarket'))
					omnitureImgSrc += '&v13=' + cnnScTitle;	//premk page
			else
				if(top.location.pathname.match('^/data/afterhours'))
					omnitureImgSrc += '&v14=' + cnnScTitle;	//afterhours page
			else
				if(top.location.pathname.match('^/smallbusiness'))
					omnitureImgSrc += '&v18=' + cnnScTitle;	//smallbusiness homepage		
			else
					omnitureImgSrc += '&v15=' + cnnScTitle;	//story page
			var events='event5';
	
		}
		omnitureImgSrc += '&events=event2,'+ events;
	}
  	omnitureImgSrc += '&v3=' + cnnScTitle;
	omnitureImgSrc += '&v4=' + cnnmVidURL;

	if(isContent==0)	// it's intro
	{
		omnitureImgSrc += '&v16=' + cnnScTitle;	//Intro video count
		omnitureImgSrc += '&events=event6';		//intro start
	}
	
 
	document.images['OmnitureTrack'].src = omnitureImgSrc;
		
};

CNN.AbstractOmnitureTriggerCommand.prototype._doMidCommand = function(context)
{
};

CNN.AbstractOmnitureTriggerCommand.prototype._doEndCommand = function(context)
{
	var cnnmPlayListType = CNNPlaylistManager.getInstance().playlistType;
	var isTurnerDomain = false;
	if(location.hostname.indexOf('turner.com')>0) { isTurnerDomain = true; }
	var cnnScTitle = escape(context.getPlayableNode().getPlayableData().getDataObject().headline);
	var isContent = 1;
	if (cnnScTitle == 'Intro')	// dont count 3 sec intro as pageview
		isContent = 0;
	if(!isTurnerDomain && isContent) { // don't add tracking image to internal player
		var cnnScImgSrc = '';
    var cnnScRandom = Math.ceil(Math.random()*1000000000);
  	cnnScImgSrc += 'http://secure-us.imrworldwide.com/cgi-bin/m?ci=us-100120';
  	cnnScImgSrc += '&tl=dav2-' + cnnScTitle;
   	cnnScImgSrc += '&c6=vc,c02';
	cnnScImgSrc += '&cc=1';
  	cnnScImgSrc += '&rnd=' + cnnScRandom;
  	window.top.document.images['cookieCrumb'].src = cnnScImgSrc;
	}
	var cnnmVidURL =  context.getPlayableNode().getPlayableData().getDataObject().id;
	var omnitureImgSrc = '';
    var omniturerdm = Math.ceil(Math.random()*1000000000);
  	omnitureImgSrc += 'http://aolturnercnnmoney.122.2o7.net/b/ss/aolturnercnnmoney/1/G.5-PD-R/';
	omnitureImgSrc +=  omniturerdm;
  	omnitureImgSrc += '?v3=' + cnnScTitle;
	omnitureImgSrc += '&v4=' + cnnmVidURL;
	if(isContent)
	{
		if(cnnmPlayListType=='bvp')
		{
			if(location.pathname.match('/video/ft'))
				omnitureImgSrc += '&v6=' + cnnScTitle;	//fortune bvp
			else
				if(location.pathname.match('/video/smallbusiness'))
					omnitureImgSrc += '&v17=' + cnnScTitle;	//smallbusiness bvp
				else
					omnitureImgSrc += '&v5=' + cnnScTitle;	//cnnmoney bvp
		}
		if(cnnmPlayListType=='sa')
		{
			if(location.pathname.match('/magazines/fortune'))
				omnitureImgSrc += '&v8=' + cnnScTitle;	//fortune homepage
			else
				if(location.pathname == '/.element/ssi/main/2.0/video.module.html')
					omnitureImgSrc += '&v7=' + cnnScTitle;	//cnnmoney homepage
			else
				if(top.location.pathname.match('^/data/premarket'))
					omnitureImgSrc += '&v13=' + cnnScTitle;	//premk page
			else
				if(top.location.pathname.match('^/data/afterhours'))
					omnitureImgSrc += '&v14=' + cnnScTitle;	//afterhours page
			else
				if(top.location.pathname.match('^/smallbusiness'))
					omnitureImgSrc += '&v18=' + cnnScTitle;	//smallbusiness homepage	
			else
				omnitureImgSrc += '&v15=' + cnnScTitle;	//story page
		}
		var events='event3';
		omnitureImgSrc += '&events='+ events;
 	}
	else	// it's intro
	{
		omnitureImgSrc += '&v16=' + cnnScTitle;	//Intro video count
		omnitureImgSrc += '&events=event7';		//intro end
	}

	document.images['OmnitureTrack'].src = omnitureImgSrc;
};

///////////////////////////////////////////////////////////////////////////////
CNN.AbstractOmnitureTriggerCommand.prototype._postReportingObject = function(context, s, hit, cType)
{
	this._dumpReportingObject(context, s);
	if (hit)
	{
		s.t();
	}
	else
	{
		s.tl(xmp.getGlobalNamespace(), 'o', this._getCustomTriggerPrefix() + cType);
	}
};

CNN.AbstractOmnitureTriggerCommand.prototype._createReportingObject = function(context)
{
	var s = xmp.getGlobalNamespace().s_gi(this._getOmnitureAccount());
	var vid = this._getVideoId(context);
	s.eVar20 = vid;
	s[this._getVideoIdEvar()] = vid;
	return s;
};

CNN.AbstractOmnitureTriggerCommand.prototype._dumpReportingObject = function(context, s)
{
	if (this._getLogger().isDebugEnabled())
	{
		var report = 'OMNITURE REPORT FOR ' + context.getTriggerType();
		var propDataArray = CNN.AbstractOmnitureTriggerCommand.dumpObjectValues(s);
		var filterPrefixes = ['vpm_','vl_'];
		for (var i=0; i<propDataArray.length; i++)
		{
			var pd = propDataArray[i];
			if (!(pd.t === 's' || pd.t === 'n' || pd.t === 'b'))
			{
				continue;
			}
			var filtered = false;
			for (var j=0; j<filterPrefixes.length; j++)
			{
				if (pd.n.indexOf(filterPrefixes[j]) === 0)
				{
					filtered = true;
					break;
				}
			}
			if (filtered)
			{
				continue;
			}
			report += ('\n' + pd.n + ': ' + pd.v);
		}
		this._getLogger().debug(report);
	}
};

/**
  * Static method
 */
CNN.AbstractOmnitureTriggerCommand.dumpObjectValues = function(theObject)
{
	if (!theObject)
	{
		return [];
	}
	var propArray = [];
	var propName = '';
	for (propName in theObject)
	{
		propArray.push(propName);	
	}
	propArray.sort();
	var dArray = [];
	for (var i=0; i<propArray.length; i++)
	{
		var pd = {t: '', n: propArray[i], v: ''}; // t = type, n = name, v = value
		var pv = theObject[pd.n];
		pd.t = (typeof(pv)).charAt(0);
		if (!(pd.t === 'o' || pd.t === 'f' || pd.t === 'u'))
		{
			pd.v = pv.toString();
		}
		dArray.push(pd);
	}
	return dArray;
};

CNN.AbstractOmnitureTriggerCommand.prototype._getOmnitureAccount = function()
{
	return xmp.util.SettingsManager.getInstance().
		getContextNode().getNodeForPath('BasePlayer').getString('omniture account', '');
};

CNN.AbstractOmnitureTriggerCommand.prototype._getVideoId = function(context)
{
	var node = context.getPlayableNode();
	return node.getPlayableData().getDataObject().id;
};

CNN.AbstractOmnitureTriggerCommand.prototype._reportSpecificStartValues = function(context, s)
{
	// default does nothing
};

CNN.AbstractOmnitureTriggerCommand.prototype._getVideoIdEvar = function()
{
	throw new Error('must override');
};

CNN.AbstractOmnitureTriggerCommand.prototype._getPageType = function()
{
	throw new Error('must override');
};

CNN.AbstractOmnitureTriggerCommand.prototype._getLogger = function()
{
	throw new Error('must override');
};

CNN.AbstractOmnitureTriggerCommand.prototype._getCustomTriggerPrefix = function()
{
	throw new Error('must override');
};

CNN.AbstractOmnitureTriggerCommand.prototype._didAdPlayBefore = function(context)
{
	var lba = this._getLookBehindNodeArray(context);
	for (var i=0; i<lba.length; i++)
	{
		var node = lba[i];
		if (node.getNodeTypeName() === 'Content')
		{
			return false;
		}
		// NOTE: 'isAd' set by CNNRules.CannotHaveTwoSequentialAdsRule
		if (node.getPlayableData().getRuntimeMetadata('isAd', false))
		{
			return true;
		}
	}
	return false;
};

CNN.AbstractOmnitureTriggerCommand.prototype._getLookBehindNodeArray = function(context)
{
	var listener = context.getMetadata('nodeListener', {});
	return listener.getPlayer().getLookBehindNodeArray();
};


///////////////////////////////////////////////////////////////////////////////

CNN.BVPOmnitureTriggerCommand = function()
{
	this._logger = new xmp.util.internals.CategoryLogger( 'BVPOmnitureTriggerCommand' );
};

xmp.DERIVE_CLASS( CNN.AbstractOmnitureTriggerCommand, CNN.BVPOmnitureTriggerCommand );

CNN.BVPOmnitureTriggerCommand.prototype._getVideoIdEvar = function()
{
//	return 'eVar21';
};

CNN.BVPOmnitureTriggerCommand.prototype._getPageType = function()
{
	return 'bvp';
};

CNN.BVPOmnitureTriggerCommand.prototype._getCustomTriggerPrefix = function()
{
	return 'CNNMoney BVP: ';
};

CNN.BVPOmnitureTriggerCommand.prototype._getLogger = function()
{
	return this._logger;
};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

CNN.WebstatTriggerCommand = function()
{
};

CNN.WebstatTriggerCommand.prototype.doCommand = function(context)
{
	switch (context.getTriggerType())
	{
		case 'start': this._doStartCommand(context); break;
		default: break;
	}
};

CNN.WebstatTriggerCommand.prototype._doStartCommand = function(context)
{
	var node = context.getPlayableNode();
	var pingUrl = node.getPlayableData().getDataObject().id+'/tracking.vidt';
	xmp.net.AjaxRequestManager.ping('videoTracking', pingUrl);
};

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
