/********************************************************************************
 ** BaseNodeListener 
 ** - Superclass for other listeners
 *******************************************************************************/

var adJustPlayed = false;

// Declare find player.
var findPlayer = xmp.baseplayer.BasePlayer.findPlayer;

function CNNPlayerListener( name, player ) {
	CNNPlayerListener.ctor.call( this, name, player );
}

// Derive "CNNPlayerListener" from "AbstractNodeListener".
xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultPlayerListener, CNNPlayerListener );

CNNPlayerListener.prototype.setStatus = function( node, status, details ) {
	CNNPlayerListener.base.setStatus.call(this, node, status, details);
};

CNNPlayerListener.prototype.handleEnded = function( node ) {
	callControllerMethod('setEnabled',false);
	callControllerMethod('setEmailEnabled',true);
	callControllerMethod('setTime',0);
	if (node.getNodeTypeId() != "NextUpSlate" && node.getNodeTypeId() != "EndSlate" && node.getNodeTypeId() != "StartSlate" && 
			node.getNodeTypeId() != "ErrorSlate") {
		callControllerMethod('togglePlay',false);	
	}
//	this.getPlayer().advance();	
};
CNNPlayerListener.prototype.handleBuffering = function( node, buffStateObj ) {
	callControllerMethod('setLoadedPercent',(0.01*buffStateObj.percent));
};
CNNPlayerListener.prototype.handleTimelineChange = function( node, position, duration ) {
	if (node.getNodeTypeId() != "NextUpSlate" && node.getNodeTypeId() != "EndSlate" && node.getNodeTypeId() != "StartSlate" && 
			node.getNodeTypeId() != "ErrorSlate") {
		if (CNNPlayer.getActivePlayer().isScrubbing == false) {
			callControllerMethod('togglePlay',true);
			callControllerMethod('setTime',position);
		}
	}
};
CNNPlayerListener.prototype.handleError = function( node, err ) {
	if (node.isContentType() && !CNNPlaylistManager.getInstance('bvpplayer').isSmall) {
		clearComments();
		this.getPlayer().advance();
	}
};
CNNPlayerListener.prototype._findNextContentNode = function( ) {	
	var lookAhead = this.getPlayer().getLookAheadNodeArray();	
	for ( var i = 0; i < lookAhead.length; i++ ) {
		var node = lookAhead[i];
		if ( node.isContentType() ) {
			return node;
		}
	}	
	return null;
};
CNNPlayerListener.prototype._findPreviousContentNode = function( ) {	
	var lookBehind = this.getPlayer().getLookBehindNodeArray();
	for ( var i = 0; i < lookBehind.length; i++ )
	{
		var node = lookBehind[i];
		if ( node.isContentType() ) {
			return node;
		}
	}
	return null;
};

function clearComments(){try{
        if (CNNPlaylistManager.getInstance('bvpplayer').isSmall) { hideComments(); }
        document.getElementById('commentHolder1').style.display = 'none';
        document.getElementById('cnnVPCHdr').style.display = 'none';
        document.getElementById('commentHolder2').style.display = 'none';
        document.getElementById('videoComments').innerHTML = '';
	try{document.getElementById('commentsPadding').style.paddingBottom = '5px'; document.getElementById("commentsAd").style.display = "block";}catch(e){}}catch(e){}
}

/********************************************************************************
 ** AdNodeListener
 ** - drives ad videos
 *******************************************************************************/

function AdNodeListener(name, player ) {
	AdNodeListener.ctor.call( this, name, player );
	this._logger = new xmp.util.internals.CategoryLogger( 'AdNodeListener' );
}

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultAdNodeListener, AdNodeListener );

AdNodeListener.prototype.handleInitialize = function( node ) {
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
	 	clearComments();
	}
};

AdNodeListener.prototype.handlePlay = function( node ) {
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
		clearComments();
	}
	callControllerMethod('setScrubberEnabled',false);
};

AdNodeListener.prototype.handleOpen = function( node ) {
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
		clearComments();
	}
	if ( node.getNodeTypeId() != "AdInsertNotForSale" && CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist' || (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist' && CNNPlaylistManager.getInstance().SAConfiguration.loadSynchUnit==true)) {
		if (CNNPlaylistManager.getInstance().doNotResetSynchOnPreroll == false || CNNPlaylistManager.getInstance().sensitiveSynchDisplaying == true) {
			CNNPlaylistManager.getInstance().sensitiveSynchDisplaying = false;
			adJustPlayed = true;
			this.getPlayer().loadSynchUnit(node);	
		} else {
			CNNPlaylistManager.getInstance().doNotResetSynchOnPreroll = false;
		}
	}
};

AdNodeListener.prototype.handleComplete = function( node ) {	
	CNNPlaylistManager.getInstance().killAtlas();
	CNNPlaylistManager.getInstance().mosSlateActive = false;
	var item = node.getPlayableData();
	var mimeType = item.getMimeTypeArray()[0]; 
	var ext = ".flv";
	if (mimeType === 'video/x-ms-wmv') { ext = ".wmv"; }
	var relativeUri = item.getPlayableId() + ext;
	
	node.setURI( this.getPlayer().getAbsoluteURI( relativeUri, 'adVideo' ) );
	node.setMimeTypes( [mimeType] );
	node.setStreamingMode( xmp.AD_STREAMING_MODE );	
	
	callControllerMethod('setEnabled',true);
	callControllerMethod('setScrubberEnabled',false);
	callControllerMethod('setDuration', node.getPlayableData().getDataObject().trt);

	if (CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist') {
		nextNode = this.getPlayer()._findNextContentNode();
		if (nextNode != null) {
			if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
				if (CNNPlaylistManager.getInstance('bvpplayer').isSmall) { hideComments(); }
				//document.getElementById('commentHolder1').style.display = 'none';
				document.getElementById('cnnVPCHdr').style.display = 'none';
				//document.getElementById('commentHolder2').style.display = 'none';
				document.getElementById('videoComments').innerHTML = '';
				CNNPlaylistManager.getInstance().BVPMWriteContent(nextNode.getPlayableData().getDataObject());
				if (nextNode.getPlayableData().getDataObject().providedBy != null) {
					document.getElementById('providedByL').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(nextNode.getPlayableData().getDataObject().providedBy)+'</b>';
					document.getElementById('providedByS').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(nextNode.getPlayableData().getDataObject().providedBy)+'</b>';
				}
				else {
					document.getElementById('providedByL').innerHTML = ''; 
					document.getElementById('providedByS').innerHTML = ''; 
				}
				if (nextNode.getPlayableData().getDataObject().dateCreated != null) {
					document.getElementById('addedOnL').innerHTML = '<b>Added On</b> '+nextNode.getPlayableData().getDataObject().dateCreated;
					document.getElementById('addedOnS').innerHTML = '<b>Added On</b> '+nextNode.getPlayableData().getDataObject().dateCreated;
				}
				else {
					document.getElementById('addedOnL').innerHTML = ''; 
					document.getElementById('addedOnL').innerHTML = ''; 
				}
				if (nextNode.getPlayableData().getDataObject().id != null){
					var theSource = '';
					if (nextNode.getPlayableData().getDataObject().id.match('fortune')){
						theSource = 'ft/';
					}
					document.getElementById('diggLink').innerHTML = '<a href="http://digg.com/submit?phase=2&url=http%3A//money.cnn.com/video/'+theSource+'%23'+nextNode.getPlayableData().getDataObject().id+'&title='+escape(nextNode.getPlayableData().getDataObject().headline)+'&bodytext='+escape(nextNode.getPlayableData().getDataObject().description)+'&media=video&topic=business_finance" target="_blank">Digg</a>';
				}
			} else if (CNNPlaylistManager.getInstance().playlistType == 'mos') {
				CNNPlaylistManager.getInstance().MOSContentWrite(nextNode.getPlayableData().getDataObject());
			} else if (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist') {
				//CNNPlaylistManager.getInstance().SAWriteContent(nextNode.getPlayableData().getDataObject());
				CNNPlaylistManager.getInstance().SAConfiguration.updateContentHandler(nextNode.getPlayableData().getDataObject());
			}
		} 
	}
};

AdNodeListener.prototype.handleRender = function(node) {
   AdNodeListener.base.handleRender.call( this, node );	

	// atlas / clickable ad integration
	var dataObject = node.getPlayableData().getDataObject();
	if ((typeof(dataObject.clickURL) != 'undefined') && (dataObject.clickURL.length > 0)) {
		var divObj = document.createElement('div');
		var div_height = CNNPlaylistManager.getInstance().atlasSlateSize[1];
		var div_width = CNNPlaylistManager.getInstance().atlasSlateSize[0];
		divObj.setAttribute('id','atlasLayer');
		divObj.style.height = div_height;
		divObj.style.width = div_width;
		divObj.style.position = "absolute";
		divObj.style.top = "1px";
		divObj.style.left = "1px";
		divObj.style.cursor = "pointer";
		divObj.innerHTML = '<img src="http://i.cdn.turner.com/cnn/.e/img/2.0/global/1x1pixel.gif" width="' + div_width + '" height="' + div_height + '">';
		divObj.style.cursor = "pointer";
		divObj.onclick = function(){
			CNNPlaylistManager.getInstance().atlasClick();
		};
		CNNPlaylistManager.getInstance().atlasURL = dataObject.clickURL;
		CNNPlaylistManager.getInstance().viewport.appendChild(divObj);
		CNNPlaylistManager.getInstance().atlasActive = true;
	}
};


AdNodeListener.prototype.handleDynamicRules = function(node) {
   var nodeTypeId = node.getNodeTypeId();
   if ((nodeTypeId === 'PreRoll') && !this.PreRollFound ) {
		this.PreRollFound = true;
		if ( CNNRules.DontPlayRule.isActive() ) {
		  var ruleContext = null;
		  this.getPlayer().registerRuleClass("DontPlayRule", "CNNRules.DontPlayRule");
		  ruleContext = xmp.playlistapi.RuleContext.createDynamic("DontPlayRule",null);
		  node.addRule(ruleContext);
		}
  }
};

AdNodeListener.prototype.handleOverrideAdResources = function(node, overrideContext) {
	// production code here
	var contextName = overrideContext.expandString('${player.context_name}');
	var nodeTypeId = node.getNodeTypeId();
	if (CNNPlaylistManager.getInstance().activePlaylist == 'mosplaylist') {
		if (nodeTypeId == 'PreRoll' || nodeTypeId == 'PostRoll') {	
			overrideContext.getResource('primary').setId(overrideVideoAd);
			overrideContext.getResource('synch_unit').setId(overrideSyncAd);
		}
	}
	if (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist') {
		CNNPlaylistManager.getInstance().SAConfiguration.overrideAdResources(node, overrideContext);
	}
	if (CNNPlaylistManager.getInstance().activePlaylist == 'hottplaylist' || CNNPlaylistManager.getInstance().activePlaylist == 't1playlist') {
		if (nodeTypeId == 'SponsoredAd' || nodeTypeId == 'PreRoll' || nodeTypeId === 'PostRoll')
		{
			overrideContext.getResource('primary').setId(overrideVideoAd);
		}
	}
};

/********************************************************************************
 ** NextupSlateNodeListener
 ** - drives DHTML object between video content pieces
 *******************************************************************************/

var HEADLINE = "headline";

function NextUpSlateNodeListener( name, player ) {
	NextUpSlateNodeListener.ctor.call( this, name, player );
}  

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultNextUpSlateNodeListener, NextUpSlateNodeListener );

NextUpSlateNodeListener.prototype.handleComplete = function( node ) {	
	CNNPlaylistManager.getInstance().killAtlas();
	CNNPlaylistManager.getInstance().mosSlateActive = true;
	NextUpSlateNodeListener.base.handleComplete.call( this, node );	
	nextNode = this.getPlayer()._findNextContentNode();
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
		if (!CNNPlaylistManager.getInstance('bvpplayer').isSmall) { clearComments(); }
		CNNPlaylistManager.getInstance().BVPMWriteContent(nextNode.getPlayableData().getDataObject());
		if (nextNode.getPlayableData().getDataObject().providedBy != null) {
			document.getElementById('providedByL').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(nextNode.getPlayableData().getDataObject().providedBy)+'</b>';
			document.getElementById('providedByS').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(nextNode.getPlayableData().getDataObject().providedBy)+'</b>';
		}
		else {
			document.getElementById('providedByL').innerHTML = ''; 
			document.getElementById('providedByS').innerHTML = ''; 
		}
		if (nextNode.getPlayableData().getDataObject().dateCreated != null) {
			document.getElementById('addedOnL').innerHTML = '<b>Added On</b> '+nextNode.getPlayableData().getDataObject().dateCreated;
			document.getElementById('addedOnS').innerHTML = '<b>Added On</b> '+nextNode.getPlayableData().getDataObject().dateCreated;
		}
		else {
			document.getElementById('addedOnL').innerHTML = ''; 
			document.getElementById('addedOnL').innerHTML = ''; 
		}
		if (nextNode.getPlayableData().getDataObject().id != null){
			var theSource = '';
			if (nextNode.getPlayableData().getDataObject().id.match('fortune')){
				theSource = 'ft/';
			}
			document.getElementById('diggLink').innerHTML = '<a href="http://digg.com/submit?phase=2&url=http%3A//money.cnn.com/video/'+theSource+'%23'+nextNode.getPlayableData().getDataObject().id+'&title='+escape(nextNode.getPlayableData().getDataObject().headline)+'&bodytext='+escape(nextNode.getPlayableData().getDataObject().description)+'&media=video&topic=business_finance" target="_blank">Digg</a>';
		}
	} else if (CNNPlaylistManager.getInstance().playlistType == 'mos') {
		CNNPlaylistManager.getInstance().MOSContentWrite(nextNode.getPlayableData().getDataObject());
	} else if (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist') {
		//CNNPlaylistManager.getInstance().SAWriteContent(nextNode.getPlayableData().getDataObject());
		CNNPlaylistManager.getInstance().SAConfiguration.updateContentHandler(nextNode.getPlayableData().getDataObject());
	}
	node.setMetadata( HEADLINE, this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().headline );		
	node.setMetadata( 'trt', CNNPlayer.secondsIntoMinutes(this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().trt) );		

	var images = this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().images;
	var imageCount = images.length;
	var sizes = [];
	var sizeToResource = {};
		
	for ( var i = 0; i < imageCount; i++ ) {
		sizes.push( images[i].id );
		sizeToResource[ images[i].id ] = images[i].resource;
	}

	node.setMetadata( 'bgimage', CNNPlaylistManager.findImageSize(this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().images, CNNPlaylistManager.getInstance().slateSize) );
	node.setMetadata( 'smbgimage', CNNPlaylistManager.findImageSize(this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().images, '384x216'));
};

/********************************************************************************
 ** ErrorSlateNodeListener
 ** - shown if an error occurs in a video or if a video is expired
 *******************************************************************************/

var ERROR_SLATE_NODE_LISTENER = "ErrorSlate";

function ErrorSlateNodeListener( name, player ) {
	ErrorSlateNodeListener.ctor.call( this, name, player );
}  

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultSlateNodeListener, ErrorSlateNodeListener );

ErrorSlateNodeListener.prototype.handleComplete = function( node ) {	
	CNNPlaylistManager.getInstance().killAtlas();
	CNNPlaylistManager.getInstance().mosSlateActive = true;
	ErrorSlateNodeListener.base.handleComplete.call( this, node );	
};

/********************************************************************************
 ** StartSlateNodeListener
 ** - drives the initial slab/slate
 *******************************************************************************/

var IMAGE = "image";

function StartSlateNodeListener( name, player ) {
	StartSlateNodeListener.ctor.call( this, name, player );
}  

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultStartSlateNodeListener, StartSlateNodeListener );

StartSlateNodeListener.prototype.handleComplete = function( node ) {	
	CNNPlaylistManager.getInstance().killAtlas();
	CNNPlaylistManager.getInstance().mosSlateActive = true;
	StartSlateNodeListener.base.handleComplete.call( this, node );	

	var images = this.getPlayer()._findNextContentNode().getPlayableData().getDataObject().images;
	var imageCount = images.length;
	var sizes = [];
	var sizeToResource = {};
		
	for ( var i = 0; i < imageCount; i++ ) {
		sizes.push( images[i].id );
		sizeToResource[ images[i].id ] = images[i].resource;
	}

	node.setMetadata( IMAGE, CNNPlaylistManager.findImageSize(images, CNNPlaylistManager.getInstance().slateSize)); 
	if (CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist' && CNNPlaylistManager.getInstance().activePlaylist != 'saplaylist') {
		this.getPlayer().loadSynchUnit(node);	
	}
};
StartSlateNodeListener.prototype.handleRender = function( node ) {
	if (CNNPlaylistManager.skipStartSlateButLoadSynch == true || CNNPlaylistManager.getInstance().vidString == 'CNNMosaicSingleVideoNonDefault' ||  CNNPlaylistManager.getInstance().vidString == 'CNNMosaicMultiVideoNonDefault') { // skip the start slate completely for these two
		this.getPlayer().advance();
	}
	else {
		this.getPlayer().getMediaPlayer().open( node );
	}
};
StartSlateNodeListener.prototype.handleOverrideAdResources = function(node, overrideContext) {
	if (CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist') {
		houseAd = new xmp.playlistapi.Resource('/fn_adspaces/house/cnn_video/video.336x280_house.ad', 'synch_unit', {});
		var lookAheadArray = this.getPlayer().getLookAheadNodeArray();
		var foundOne = null;
		for (var i = 0; i < lookAheadArray.length; i++) {
			var testNode = lookAheadArray[i];
			if (testNode.isContentType()) {
				// okay, we've got a content node, now figure if it's useable
				if (testNode.getPlayableData().getDataObject().trt >= 45) { // okay, this is valid, let's see if it's "sensitive"
					if (testNode.getPlayableData().getDataObject().isAdSensitive == false) { // it's not sensitive, here's our sign
						var sponsoredAdNode = null;
						var prerollAdNode = null;
						var postrollAdNode = null;
						for (var j = i+1; j < lookAheadArray.length; j++) {
							var nextNode = lookAheadArray[j];
							if (nextNode.isContentType()) { break; }
							if (nextNode.getNodeTypeName() == 'PreRoll') { foundOne = nextNode; break; }
							if (nextNode.getNodeTypeName() == 'SponsoredAd') { foundOne = nextNode; break; }
							if (nextNode.getNodeTypeName() == 'PostRoll') { foundOne = nextNode; break; }
						}
						for (var j = i-1; j >= 0; j--) {
							var preNode = lookAheadArray[j];
							if (preNode.isContentType()) { break; }
							if (preNode.getNodeTypeName() == 'PreRoll') { foundOne = preNode; }
							if (preNode.getNodeTypeName() == 'SponsoredAd') { foundOne = preNode; break; }
						}
						break;
					} else { // it is sensitive, break the for loop and go use a house ad
						break;
					}	
				}
			}
		}
		foundOne = null;
		if (foundOne != null) {
			CNNPlaylistManager.getInstance().doNotResetSynchOnPreroll = true;
			overrideContext.copyMetaResourceBundleRefFrom(foundOne);
			if (CNNPlaylistManager.getInstance().activePlaylist == 'mosplaylist' && foundOne.getNodeTypeName() != 'SponsoredAd') {
				overrideContext.getResource('primary').setId(overrideVideoAd);
				overrideContext.getResource('synch_unit').setId(overrideSyncAd);
			}
			
		} else { 
			CNNPlaylistManager.getInstance().sensitiveSynchDisplaying = true;
			overrideContext.addResource(houseAd); 
		}
	}
};

/********************************************************************************
 ** EndSlateNodeListener
 ** - drives the final slate
 *******************************************************************************/

var END_SLATE_NODE_LISTENER = "EndSlate";
var IMAGE = "image";

function EndSlateNodeListener( name, player ) {
	EndSlateNodeListener.ctor.call( this, name, player );
}  

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultSlateNodeListener, EndSlateNodeListener );

EndSlateNodeListener.prototype.handleComplete = function( node ) {	
	CNNPlaylistManager.getInstance().killAtlas();
	if (!CNNPlaylistManager.getInstance('bvpplayer').isSmall) { clearComments();}
	CNNPlaylistManager.getInstance().mosSlateActive = true;
	EndSlateNodeListener.base.handleComplete.call( this, node );	

	var images = this.getPlayer()._findPreviousContentNode().getPlayableData().getDataObject().images;
	var imageCount = images.length;
	var sizes = [];
	var sizeToResource = {};
	
	for ( var i = 0; i < imageCount; i++ ) 	{
		sizes.push( images[i].id );
		sizeToResource[ images[i].id ] = images[i].resource;
	}

	node.setMetadata( IMAGE, CNNPlaylistManager.findImageSize(images,CNNPlaylistManager.getInstance().slateSize)); 
	node.setMetadata( 'smbgimage', CNNPlaylistManager.findImageSize(images, '384x216'));
};

/********************************************************************************
 ** VideoNodeListener
 ** - drives all video content nodes
 *******************************************************************************/

function VideoNodeListener( name, player ) {
	VideoNodeListener.ctor.call( this, name, player, false );		
}

xmp.DERIVE_CLASS( xmp.baseplayer.listeners.DefaultVideoNodeListener, VideoNodeListener );

VideoNodeListener.prototype.handleEnded = function( node ) {
	callControllerMethod('setEnabled',false);
	callControllerMethod('setTime',0);
	callControllerMethod('togglePlay',false);	
	CNNPlayer.getActivePlayer().callEnded();
}

var globalVideoInit = 0;
var postingAllowed = true;

VideoNodeListener.prototype.handleComplete = function( node ) {
	CNNPlaylistManager.getInstance().killAtlas();
	CNNPlaylistManager.getInstance().mosSlateActive = false;
	callControllerMethod('setEnabled', true);
	callControllerMethod('setScrubberEnabled',true);
	callControllerMethod('setDuration', node.getPlayableData().getDataObject().trt);
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
		CNNPlaylistManager.getInstance().BVPMWriteContent(node.getPlayableData().getDataObject());
		if (node.getPlayableData().getDataObject().providedBy != null) {
			document.getElementById('providedByL').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(node.getPlayableData().getDataObject().providedBy)+'</b>';
			document.getElementById('providedByS').innerHTML = '<b>Source: '+CNNPlaylistManager.providedResponse(node.getPlayableData().getDataObject().providedBy)+'</b>';
		}
		else {
			document.getElementById('providedByL').innerHTML = ''; 
			document.getElementById('providedByS').innerHTML = ''; 
		}
		if (node.getPlayableData().getDataObject().dateCreated != null) {
			document.getElementById('addedOnL').innerHTML = '<b>Added On</b> '+node.getPlayableData().getDataObject().dateCreated;
			document.getElementById('addedOnS').innerHTML = '<b>Added On</b> '+node.getPlayableData().getDataObject().dateCreated;
		}
		else {
			document.getElementById('addedOnL').innerHTML = ''; 
			document.getElementById('addedOnL').innerHTML = ''; 
		}
		if (node.getPlayableData().getDataObject().id != null){
			var theSource = '';
			if (node.getPlayableData().getDataObject().id.match('fortune')){
				theSource = 'ft/';
			}
			document.getElementById('diggLink').innerHTML = '<a href="http://digg.com/submit?phase=2&url=http%3A//money.cnn.com/video/'+theSource+'%23'+node.getPlayableData().getDataObject().id+'&title='+node.getPlayableData().getDataObject().headline+'&bodytext='+node.getPlayableData().getDataObject().description+'&media=video&topic=business_finance" target="_blank">Digg</a>';
		}
		if (node.getPlayableData().getDataObject().hasComments != null) {
			if (node.getPlayableData().getDataObject().hasComments == 'yes') {
				try{document.getElementById('commentsPadding').style.paddingBottom = '18px'; document.getElementById('commentsAd').style.display = "none";}catch(e){}
				if(noMorePosting(node.getPlayableData().getDataObject().dateCreated)){
					document.getElementById('postACommentLink').innerHTML = 'This video is no longer available for comments, though you may read comments that were posted previously.';
					postingAllowed = false;
					//disable posting functionality
				}else{
					//enable posting functionality
					document.getElementById('postACommentLink').innerHTML = '<a href="javascript:showPost();" style="font-weight:bold;">Post a comment</a>';
					postingAllowed = true;
				}
				document.getElementById('commentHolder1').style.display = 'block';
				document.getElementById('cnnVPCHdr').style.display = 'block';
				document.getElementById('commentHolder2').style.display = 'block';
				ppp = CNNPlaylistManager.getInstance().playlists[CNNPlaylistManager.getInstance().activePlaylist];
				ppp = ppp.jsonList[ppp.pointer];
				slc = ppp.slice(ppp.lastIndexOf('/')+1,ppp.indexOf('.json'));
				document.commentsForm.threadName.value = slc;
				CSIManager.getInstance().call('http://'+cnnCommentDomain+'/comments/rss/rssmessages.jspa','full=true&outputType=JSON_BOXED&forumName=bvpvideo&threadName='+slc+'&numItems=50','objectid', iterateComments);	
			}
		}
	} else if (CNNPlaylistManager.getInstance().playlistType == 'mos') {
		CNNPlaylistManager.getInstance().MOSContentWrite(node.getPlayableData().getDataObject());
	} else if (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist') {
		//CNNPlaylistManager.getInstance().SAWriteContent(node.getPlayableData().getDataObject());
		CNNPlaylistManager.getInstance().SAConfiguration.updateContentHandler(node.getPlayableData().getDataObject());
	}

	if (CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist') {
		if (node.getPlayableData().getDataObject().isAdSensitive == true || 
				CNNPlaylistManager.getInstance().forceSensitive == true ||
				node.getPlayableData().getDataObject().trt < 45) { // we have a sensitive  video or a short video
			CNNPlaylistManager.getInstance().forceSensitive = false;
			if (CNNPlaylistManager.getInstance().sensitiveSynchDisplaying == false) { // we don't already have a house ad displaying
				CNNPlaylistManager.getInstance().sensitiveSynchDisplaying = true;
				this.getPlayer().loadSynchUnit(node);
			}
		} else {
			if (adJustPlayed == true) { adJustPlayed = false; } else {
				this.getPlayer().loadSynchUnit(node);
			}
			if (CNNPlaylistManager.getInstance().sensitiveSynchDisplaying) {
				CNNPlaylistManager.getInstance().sensitiveSynchDisplaying = false;
				this.getPlayer().loadSynchUnit(node);
			}
		}
	}
};

VideoNodeListener.prototype.handleRender = function( node ) {
	if ("Expired" == node.getPlayableData().getDataObject().isExpired) { 
		callControllerMethod('setEnabled',false);
		callControllerMethod('setTime',0);
		callControllerMethod('togglePlay',false);	
		CNNPlaylistManager.getInstance().isVideoError = true;
		this.getPlayer().advance();
	}
	else {
		this.getPlayer().getMediaPlayer().open( node );
	}
};


var tempErrorObj;
var errorOccuring = false;

VideoNodeListener.prototype.handleError = function( node, err ) {
	if (!CNNPlaylistManager.getInstance('bvpplayer').isSmall) { clearComments(); }
	callControllerMethod('setEnabled',false);
        callControllerMethod('setTime',0);
        callControllerMethod('togglePlay',false);
        CNNPlaylistManager.getInstance().isVideoError = true;
        CNNPlaylistManager.getInstance().errorObject = err;
	if (CNNPlaylistManager.getInstance().playlistType == 'bvp') {
	clearComments();
	}
};

function handleErrorLater(){
	if (!CNNPlaylistManager.getInstance('bvpplayer').isSmall) {
       		clearComments();
                this.getPlayer().advance(); 
		errorOccuring = false;
	}else{
		setTimeout(handleErrorLater,1000);
	}
}


VideoNodeListener.prototype.handleOverrideAdResources = function(node, overrideContext) {
	extra336Ad = new xmp.playlistapi.Resource('/fn_adspaces/house/cnn_video/video.336x280_house.ad','synch_unit',{});
    houseAd = new xmp.playlistapi.Resource('/fn_adspaces/house/cnn_video/video.336x280_house.ad', 'synch_unit', {});
	if (CNNPlaylistManager.getInstance().activePlaylist == 'saplaylist')
	{
		CNNPlaylistManager.getInstance().SAConfiguration.overrideAdResources(node, overrideContext);
	}else{
    if (CNNPlaylistManager.getInstance().forceSensitive == true) {
            overrideContext.addResource(houseAd);
    } else {
		if (CNNPlaylistManager.getInstance().activePlaylist != 'hottplaylist' && CNNPlaylistManager.getInstance().activePlaylist != 't1playlist') {
			if (node.getPlayableData().getDataObject().isAdSensitive == true || node.getPlayableData().getDataObject().trt < 45) {
				houseAd = new xmp.playlistapi.Resource('/fn_adspaces/house/cnn_video/video.336x280_house.ad', 'synch_unit', {});
				overrideContext.addResource(houseAd);
			} else {
				overrideContext.addResource(extra336Ad);
			}
		} 
	}
	}
};

function noMorePosting(theDate){
	var myMonths = {
		"January" : 0,
		"February" : 1,
		"March" : 2,
		"April" : 3,
		"May" : 4,
		"June" : 5,
		"July" : 6,
		"August" : 7,
		"September" : 8,
		"October" : 9,
		"November" : 10,
		"December" : 11
	}
	var theDateArray = theDate.split(" ");
	var theMonth = parseInt(myMonths[theDateArray[0]]);
	var theDate = parseInt(theDateArray[1].replace(/,/,""));
	var theYear = parseInt(theDateArray[2]);
	var theDateObj = new Date();
	theDateObj.setFullYear(theYear);
	theDateObj.setMonth(theMonth);
	theDateObj.setDate(theDate);
	theDateObj.setMonth(theMonth);
	var today = cnnCurrTime;
	var dayDifference = Math.round((today-theDateObj)/(1000*60*60*24));
	return (dayDifference >= 2);
}

function isFirefox(){
	return (navigator.userAgent.indexOf("Firefox") > -1);
}

