
/* TheDenverChannel.com scripts */
// Begin national js scripts

/* local6.com scripts */
// Begin national js scripts


/*
 * $Author: Brian Betz
 * 
 * COID: 4946671
 */
var Controls = Object();

Controls['getElement'] = function(name)
{
	return document.getElementById(name + 'Control');
};

Controls['setControlClassName'] = function(name, className)
{
	if(!Controls.getElement(name))
		return;
	Controls.getElement(name).className = "controls " + className;
	Controls.getElement(name).title = name.substring(0,1).toUpperCase() + name.substring(1);
};

Controls['onLastEntry'] = function()
{
	Controls['closeAll']();
	document.getElementById('controlsparent').style.visibility = 'hidden';
};

Controls['closeAll'] = function()
{
	if(PlayerFactory['lastPlayer']) {
		PlayerFactory['lastPlayer'].setVisible(false);
	}
	Controls['stop']();
	Controls['progressBar'].stop();
};

Controls['onHalfway'] = function()
{
	// window.status = 'Halfway...';
};


Controls['setCurrentVideo'] = function(id,wtargs)
{
	try {
		if(PlayerFactory.defaultVideoId == -1)
			PlayerFactory.defaultVideoId = id;
		// WEBTRENDS
		if(PluginSupport.isActiveXDisplay())
		{
			document.getElementById('videoplug').URL = getVideoURL(id);
			document.getElementById('controlsparent').style.visibility = 'visible';
			PlayerFactory.audit.init();
			Controls['play']();
			// track this event with WebTrends
			//if(!PlayerFactory.adTarget && typeof dcsMultiTrack == "function") 
			//	dcsMultiTrack('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool','','DCSext.ib_coid','');
			//ib_WTPlayEvent('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool','','DCSext.ib_coid','');
			if (wtargs && wtargs.length > 0) {
				ib_WTPlayEvent('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool',wtargs[0],'DCSext.ib_coid',id,'WT.ti',wtargs[1],'DCSext.ib_video_category',wtargs[2]);
			}
		}
		else if(PluginSupport.isEmbedDisplay())
		{
			PlayerFactory['lastPlayer'].display.innerHTML =
				PlayerFactory.createEmbedPlayer(getVideoURL(id), true);
			if(PlayerFactory['lastPlayer'])
				PlayerFactory['lastPlayer'].setVisible(true);
	
			// track this event with WebTrends
			//if(!PlayerFactory.adTarget && typeof dcsMultiTrack == "function") 
			//	dcsMultiTrack('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool','','DCSext.ib_coid','');
			//ib_WTPlayEvent('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool','','DCSext.ib_coid','');
			if (wtargs && wtargs.length > 0) {
				ib_WTPlayEvent('DCSext.mtype','Video','DCSext.vtype','Clickplay','DCSext.ib_pool',wtargs[0],'DCSext.ib_coid',id,'WT.ti',wtargs[1],'DCSext.ib_video_category',wtargs[2]);
			}
		}
	} catch (er) { 
		// This catch should keep an error from displaying if the user trys to start the video before 
		// all the javascript has loaded and the initial scripting has run.
		// I don't think any message is required.  
	}
	return false;
};

Controls['progressBar'] = new ProgressBar();

function getPlayState()
{
	if(!PluginSupport.isActiveXDisplay() || 
		!document || 
		!document.body ||
		!document.getElementById("videoplug"))
	{
		return -1;
	}
	return document.getElementById("videoplug").playState;
}

function getVideoURL(coid)
{
	return "http://" + pageProps.envhost + "/videofiles/" + coid + "/playlist.asx?qs=t;speed=high" + 
		(PlayerFactory.adTarget != null ? ";adtarget=" + PlayerFactory.adTarget : "") +
		(PluginSupport.isActiveXDisplay() ? ";clienttrack=clienttrack" : "");
}


function getPercentComplete()
{
	if(PluginSupport.isActiveXDisplay() && document.getElementById('videoplug'))
	{
		var videoplug = document.getElementById('videoplug');
		var length = (videoplug.controls.currentItem) ? videoplug.controls.currentItem.duration : 1;
		var position = (videoplug.controls)? videoplug.controls.currentPosition : 1;
		var pct = parseInt(Math.round(((position / length) * 100) * 100) * 0.01);
		if(pct == 'NaN' || pct < 1) pct = 1;
		//See if I need to ping anybody now
		PlayerFactory.audit.exec(videoplug);

		return pct;
	}
	else
	{
		return 1;
	}
}


function getControlXOffset()
{
	var parent = document.getElementById('controlsparent');
	var len = parent.getElementsByTagName("div").length;
	return len * 22 - 12;
}


function createControl(name, yoffset)
{
	var parent = document.getElementById('controlsparent');
	var obj = parent.appendChild(
		document.createElement('div'));
	obj.id = name + "Control";
	obj.className = "controls " + name;
	obj.title = name.substring(0, 1).toUpperCase() + name.substring(1);
	obj.style.left = getControlXOffset() + "px";
	addEvent(obj, 'click', function() {
		Controls[name]();
	});

	return obj;
}


function ProgressBar()
{
	this.isStopped = false;
	this.hasFiredHalfway = false;

	this.stop = function()
	{
		this.isStopped = true;
	}

	this.start = function()
	{
		this.isStopped = false;
		this.hasFiredHalfway = false;
		this.poll();
	}

	this.restart = function()
	{
		this.setValue(0);
		this.start();
	}

	this.setValue = function(v)
	{
		if(v >= 50 && !this.hasFiredHalfway)
		{
			if(Controls['onHalfway'])
				Controls['onHalfway']();
			this.hasFiredHalfway = true;
		}
		try { document.getElementById('fill').style.width = v + "%"; }
		catch(er) { }
	}

	this.poll = function()
	{
		if(this.isStopped)
			return;
		this.setValue(getPercentComplete());
		// window.status = "STATE=" + getPlayState() + ", COMP=" + getPercentComplete() + "%";
		setTimeout("Controls.progressBar.poll()", 100);
	}
}


var PlayerFactory =
{
	size: null,
	
	adTarget: null,

	/** 
	 * AUDIT pings URLs when video progression reaches a given point
	 * Understands PARAM tags in the ASX file <PARAM name="audit_xx" value="" /> Where xx is the position in the stream to send the ping to the URL in the value attribute
	 * exec() is called from within the progress tracker with 
	 * @el	= 	DOM element of the player
	 * @pct	=	percent complete.		
	 * attach() can be called if a progress indicator is not present with:	
	 * @el	=	DOM element of the player
	 */
	audit: {
		currentMedia:'',points:[],adid:'',adclick:'',companion:{elem:'', height:'90', width:'728'},
		setAdPosition:function(adSpecObj){
			if(typeof adSpecObj == 'object'){
				this.companion = adSpecObj;
			}
		},
		init:function(){
			this.currentMedia = '';
			this.points = [];
			this.adid='';
			this.adclick='';
		},
		attach:function(el) {
			this.status = window.setInterval(function() {
				player.audit.exec(el);
			}, 100);
		},
		parseNewMedia:function(cm){
			this.adid = '';
			this.adclick = '';
			this.points=[];
			if(cm.getItemInfo("tracker") &&	cm.getItemInfo("tracker").indexOf("http") != -1)
			{
				// HANDLE TRACKER PARAMS FIRST
				this.points=[{point:0, url:cm.getItemInfo("tracker")}];
			}
			// LOOK FOR AD RELATED PARAMS
			for (var p=0; p<cm.attributeCount; p++)
			{
				var attname = cm.getAttributeName(p).toLowerCase();
				var attvalue = cm.getItemInfo(cm.getAttributeName(p));
				//IBS - DART
				if(attname.indexOf('audit_') != -1){
				   var auditTime = parseInt(cm.getAttributeName(p).split('_')[1])-4;
				   this.points.push({point:auditTime, url:attvalue});
				}
				else if(attname == 'moreinforef'){
				   PlayerFactory.audit.adclick = attvalue;
				}
				else if(attname == 'dcadtag'){
					// IF THERE IS AN AD TAG SET THE AD TAG AND REQUEST THE COMPANION AD
					this.adid = attvalue;
					var videoAdTag = (this.adid)? this.adid+';':'';
					var rand = Math.floor((Math.random()*1000000000));
					var adTag = 'http://ad.doubleclick.net/adi/ibs.' + siteinfo.sitekey.lc + '.interactive/;kw=video;ad=true;pgtype=detail;sz=728x90;' + videoAdTag + 'ord='+rand+'?';
					
					var comp = document.getElementById(this.companion.elem)
					if (!comp) {
						var tags = ['div', 'span', 'td'];
						for (var i=0;i<tags.length;i++) {
							var els = YAHOO.util.Dom.getElementsByClassName(this.companion.elem,tags[i]);
							if (els && els.length>0) {
								comp = els[0];
								this.companion.elem = comp.id;
								break;
							}
						}
					}
					comp.innerHTML = '<iframe name="banner1" width="'+this.companion.width+'" height="'+this.companion.height+'" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" src="'+adTag+'"></iframe>'
					//if(document.getElementById('banner1')) document.getElementById('banner1').src = adTag;
				}
				//BBE
				else if(attname == 'companionbannercreativehtml'){
					getEl('adbanner1').style.overflow = 'hidden';
   					getEl('adbanner1').innerHTML = unescape(attvalue);
				}
				else if(attname == 'sendannouncementtourlonend'){
					this.points.push({point:97, url:unescape(attvalue)});
				}
				else if(attname == 'sendannouncementtourlonmid'){
					this.points.push({point:50, url:unescape(attvalue)});
				}
				else if(attname == 'sendannouncementtourlonbegin'){
					this.points.push({point:0, url:unescape(attvalue)});
				}
				else if(attname == 'clickthroughurl'){
					this.adclick = unescape(attvalue);
				}
			}
			this.points.sort(function(a,b)
			{
				return a.point - b.point
			});
		},
		exec:function(el)
		{
			var cm = el.currentMedia;
			if(cm)
			{
				if(this.currentMedia != cm.name)
				{
					this.parseNewMedia(cm);
				} else {
					var length = (el.controls.currentItem) ? el.controls.currentItem.duration : 1;
					var position = (el.controls) ? el.controls.currentPosition : 1;
					var pct = parseInt(Math.round((position / length) * 100));
					if(isNaN(pct)) pct = 0;
					if(this.points.length != 0 && pct > this.points[0].point) 
					{
						var timg = document.createElement('img');
						timg.style.display = 'none';
						var rnd = parseInt(Math.random()*100000);
						var q = (this.points[0].url.indexOf('?') == -1)?'?'+rnd:'&'+rnd;
						timg.src = this.points[0].url;
						var thisimgid = 'timg_'+rnd;
						timg.id = thisimgid;
						document.body.appendChild(timg);
						this.points.shift();
						this.exec(el);
					}
				}
				this.currentMedia = cm.name;
			}
		}
	},

	createPlayer: function(w, h, parentID, defaultVideoId, isVisibleWhenCreated)
	{
		if(PlayerFactory.adTarget == null)
		{
			if(/\/video\//.exec(pageProps.sectionpath) != null)
				PlayerFactory.adTarget = "playerpage";
		}
		
		if(typeof defaultVideoId != 'undefined')
			PlayerFactory['defaultVideoId'] = defaultVideoId;

		var dim = {
			width: w,
			height: PluginSupport.isEmbedDisplay() ? h+28 : h
		};
		
		PlayerFactory['size'] = dim;
		var parentCSS = document.getElementById(parentID).style;
		parentCSS.width = dim.width+"px";
//		parentCSS.height = (dim.height+28)+"px";

		var display = document.getElementById(parentID).appendChild(document.createElement('div'));
		display.className = "videoplayer";
		display.id = "videoplugdisplay";
		display.style.width = dim.width + "px";
		display.style.height = dim.height + "px";
		display.style.visibility = (typeof isVisibleWhenCreated == 'undefined' || isVisibleWhenCreated ? 'visible' : 'hidden');

		if(PluginSupport.isActiveXDisplay())
		{
			// NOTE: CREATE VIDEO PLUGIN OBJECT, AND STATE-SPECIFIC CSS HANDLERS
			var out = '';
			out +='<OBJECT ID="videoplug" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" CODEBASE="http://www.microsoft.com/netshow/download/en/nsmp2inf.cab#Version=5,1,51,415" standby="Loading..." WIDTH="100%" HEIGHT="100%" type="application/x-oleobject">';
			out +='<PARAM NAME="autoStart" VALUE="0" /><PARAM NAME="stretchToFit" VALUE="false" /><PARAM NAME="uiMode" VALUE="none" /><PARAM NAME="URL" VALUE="" /><PARAM NAME="mute" VALUE="0" /><PARAM NAME="windowlessVideo" VALUE="0" /><PARAM NAME="invokeURLs" VALUE="1" />';
			out +='</OBJECT>';
			out += '<div id="lcauditdiv" style="display:none;"></div>';
			out += '<SCR'+'IPT language="javascript" for="videoplug" event="Click(nButton, nShiftState, fX, fY)">';
			out += 'if(PlayerFactory.audit.adclick && PlayerFactory.audit.adclick != \'\') window.open(PlayerFactory.audit.adclick);';
			out += 'window.lcMediaPlayer= document.getElementById(\'videoplug\');';
			out += 'lcPlayerClickEvent(nButton, nShiftState, fX, fY);';
			out += '</SCR'+'IPT>';
			display.innerHTML = out;

			addEvent(window, 'unload', function(){
				if(document.getElementById('videoplug')){
					document.getElementById('videoplug').close();
					document.getElementById('videoplug').controls.stop();
				}
			});

			var stateChange = function()
			{ 
				try{
				// LIGHTNINGCAST
					var mediaPlayer= document.getElementById('videoplug');
					var bannerDiv= document.getElementById('adbanner1');
					var auditDiv= document.getElementById('lcauditdiv');
					bannerDiv.style.height = '90px';
					//bannerDiv.style.width = '728px';
					var currState = mediaPlayer.playState;
					if(typeof lcUpdatePlaylistState != 'undefined') lcUpdatePlaylistState(mediaPlayer, auditDiv, bannerDiv, currState);
					// LIGHTNINGCAST
					switch(currState)
					{
						case 1 :
						case 2 :
						case 10 :
							Controls.setControlClassName('play', 'play');
							break;
						case 3 :
							Controls.setControlClassName('play', 'pause');
							break;
					}
				} catch(err){}
			}
			document.getElementById("videoplug").attachEvent(
				"playstatechange", stateChange);
			
			var currItemChange = function()
			{
				if(document.getElementById('videoplug').currentMedia.name ==
						'END OF PLAYLIST' && Controls['onLastEntry'])
					Controls['onLastEntry']();
			};

			document.getElementById("videoplug").attachEvent(
				"currentItemChange", currItemChange);

			// NOTE: CREATE BUFFERING SWF
			var buff = document.getElementById(parentID).appendChild(document.createElement('div'));
			buff.id = 'buffering';
			var htm = '';
			htm +='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="100%" height="100%" id="videoplugbuffering" align="middle">';
			htm +='<param name="allowScriptAccess" value="sameDomain" /><param name="bgcolor" value="#000000" /><param name="quality" value="high" /><param name="movie" value="http://images.ibsys.com/sh/images/videoplayer/hrst/buffering.swf" />';
			htm +='<embed src="http://images.ibsys.com/sh/images/videoplayer/hrst/buffering.swf" quality="high" bgcolor="#000000" width="100%" height="100%" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
			htm +='</object>';
			buff.innerHTML = htm;

			/**
			 * NOTE: fix for js error on window unload. check if document
			 * exists prior to asking it for items.
			 */
			document.getElementById("videoplug").attachEvent(
				"playstatechange", function()
			{
				if(!document || !document.body)
					return;
				var st = getPlayState();
				//var st = document.getElementById("videoplug").playState
				if(document.getElementById("buffering"))
				{
					document.getElementById('buffering').style.visibility =
						((st == 6 || st == 9 || st == 7 || st == 0) ? 'visible' : 'hidden');
				}
				if(document.getElementById("videoplugdisplay"))
				{
					document.getElementById('videoplugdisplay').style.visibility =
						((st == 6 || st == 9 || st == 7 || st == 0) ? 'hidden' : 'visible');
				}
			});

		}
		else if(PluginSupport.isEmbedDisplay())
		{
			if(typeof isVisibleWhenCreated == 'undefined' || isVisibleWhenCreated)
				display.innerHTML = PlayerFactory.createEmbedPlayer('', false);

		}

		return PlayerFactory.lastPlayer = new Player(display);
	},

	createEmbedPlayer: function(src, showControls)
	{
		var showCtrlVal = showControls ? '1' : '0';
		var out = '';
		out +='<embed id="videoplug"';
		out +='	src="'+src+'"';
		out +='	filename="'+src+'"';
		out +='	width="100%"';
		out +='	height="100%"';
		out +='	stretchToFit="1"';
		out +='	type="application/x-mplayer2"';
		out +='	autostart="1"';
		out +='	showcontrols="'+showCtrlVal+'"';
		out +='	transparentstart="1"';
		out +='	showstatusbar="0"';
		out +='	showtracker="0">';
		out +='</embed>';
		return out;
	},

	createControls: function()
	{
		var names;
		if(arguments.length == 0)
			names = [ 'fastReverse', 'play', 'stop' ];
		else
		{
			names = Array();
			for(var j=0; j < arguments.length; j++)
				names.push(arguments[j]);
		}

		if(PluginSupport.isActiveXDisplay())
		{
			var dim = PlayerFactory['size'];
			var div = document.getElementById('playerparent').appendChild(
				document.createElement('div'));
			div.id = 'controlsparent';
			/* Will uncomment 11/1 to test ... jlillibridge */
			try {
				if (videoOwner) {div.className = videoOwner;}
			} catch(err) {}
			div.style.top = dim.height+"px";

			var doPlayPause = function()
			{
				if("" == document.getElementById('videoplug').URL)
				{
					document.getElementById('videoplug').URL = getVideoURL(PlayerFactory['defaultVideoId']);
				}
				switch(getPlayState())
				{
					case 3 :
					case 4 :
					case 5 :
						document.getElementById('videoplug').controls.pause();
						break;
					default :
						document.getElementById('videoplug').controls.play();
				}
			};

			Controls['play'] = function()
			{
				if(!PlayerFactory['lastPlayer'].isVisible())
					PlayerFactory['lastPlayer'].setVisible(true);
				if(Controls['progressBar'].isStopped)
					Controls['progressBar'].restart();
				doPlayPause();
			};
			Controls['pause'] = doPlayPause;
			Controls['stop'] = function()
			{
				document.getElementById('videoplug').close();
				document.getElementById('videoplug').controls.stop();
				Controls['progressBar'].stop();
				Controls['progressBar'].setValue(0);
				if(PlayerFactory['lastPlayer'])
					PlayerFactory['lastPlayer'].setVisible(false);
			};
			Controls['fastReverse'] = function() { document.getElementById('videoplug').controls.fastReverse(); };
			Controls['fastForward'] = function() { document.getElementById('videoplug').controls.fastForward(); };

			for(var j=0; j < names.length; j++)
			{
				createControl(names[j]);
			}

			var pbar = document.getElementById('controlsparent').appendChild(
				document.createElement('div'));
			pbar.className = 'progressbar';
			pbar.style.left = getControlXOffset() + "px";
			var fill = pbar.appendChild(document.createElement('div'));
			fill.id = 'fill';
			fill.appendChild(document.createElement('span'));

			Controls.progressBar.start();
		}
		else if(PluginSupport.isEmbedDisplay())
		{
			Controls['play'] = function() { };
			Controls['pause'] = function() { };
			Controls['playPause'] = function() { };
			Controls['stop'] = function() { };
			Controls['fastReverse'] = function() { };
			Controls['fastForward'] = function() { };
		}
		return Controls;
	}
};

PlayerFactory.audit.setAdPosition({
	elem: 'adbanner1',
	height:90,
	width:728
});

PlayerFactory['defaultVideoId'] = -1;

PlayerFactory['lastPlayer'] = null;

function Player(display)
{
	this.display = display;

	this.setVisible = function(b)
	{
		this.display.style.visibility = b ? "visible" : "hidden";
	}

	this.isVisible = function()
	{
		return this.display.style.visibility != "hidden";
	}

}


var HAS_WMP = 1 << 0;
var HAS_ACTIVEX = 1 << 1;
var HAS_GECKOACTIVEX = 1 << 2;
var HAS_REALPLAYER = 1 << 3;
var M_EMBED = 1 << 4;
var M_ACTIVEX = 1 << 5;

var PluginSupport =
{
	supportMask: -1,

	getSupportMask: function()
	{
		if(PluginSupport.supportMask == -1)
		{
			var x = 0;
			try
			{
				if(window.ActiveXObject && (new ActiveXObject("WMPlayer.OCX.7")))
					x = x | HAS_ACTIVEX | HAS_WMP | M_ACTIVEX;
				// else if(window.GeckoActiveXObject && (new GeckoActiveXObject("WMPlayer.OCX.7")))
					// x = x | HAS_GECKOACTIVEX | HAS_WMP | M_ACTIVEX;
			}  catch(ex) { }
			if(x == 0)
			{
				try
				{
					if(navigator.mimeTypes && navigator.mimeTypes['application/x-mplayer2'] &&
						navigator.mimeTypes['application/x-mplayer2'].enabledPlugin)
						x = x | HAS_WMP | M_EMBED;
				} catch(ex) { }
			}
			PluginSupport.supportMask = x;
		}
		return PluginSupport.supportMask;
	},
	test: function(n) { return (PluginSupport.getSupportMask() & n) == n; },
	hasWMP: function() { return PluginSupport.test(HAS_WMP); },
	hasActiveX: function() { return PluginSupport.test(HAS_ACTIVEX); },
	hasGeckoActiveX: function() { return PluginSupport.test(HAS_GECKOACTIVEX); },
	isEmbedDisplay: function() { return PluginSupport.test(M_EMBED); },
	isActiveXDisplay: function() { return PluginSupport.test(M_ACTIVEX); }
};

/*
	function bufferstate(){
		if(document.getElementById('buffering')) window.status = document.getElementById('buffering').style.visibility + ' ' + document.getElementById('videoplugdisplay').style.visibility + ' ' + document.getElementById('videoplug').playState;
		setTimeout("bufferstate()", 100);
	}

	addEvent(window, 'load', bufferstate);
*/

// 
// End national_js scripts

// 
// End national_js scripts

