	var serviceString='nbcbeta';
	//var serviceString='nbcu.extend';
	// global pager vars
	var itemsPerPage = 8;
	var pageMax = 7;
	var totalItems = '';
	// global Extend vars
	var devicePk;
	var devicePkString;
	var initStartupCount=0;
	var inUS = true;
	var directProducts=new Array();
	var statusVar=new Array();
	var mediaAgentVersion = '0';
	var baseUrl ="http://www.nbc.com";

	function playerCheck()
	{
		//statusVar=new Array();
		statusVar['success']=true;
		statusVar['msg']='';
		BrowserStatus =false;


		if(jqN.browser.msie && inUS&& statusVar['success'])
		{
		
			clearStatusMsg();
			createOpenCaseActX();
			DetectPlayerVersion();
			BrowserStatus = true;

		}
		else if(jqN.browser.mozilla && inUS&& statusVar['success'])
		{
			if(getFFversion() > 2)
				{
				//statusVar['msg'] = '<br/></b><a class="red_x">NO FIREFOX 3 PLUG-IN SUPPORT</a><br/>';
				statusVar['msg'] = "Sorry, NBC Direct requires Firefox v.2.0.  Support for v.3.0 will be coming soon.";
				//alert(statusVar['msg']);
				return statusVar;
				}
			clearStatusMsg();
			if (isPluginInstalled())
			{
				instantiatePlugin();
				createOpenCaseFFplugin();
			} 
			BrowserStatus = true;

		}
		//check version info

		
		
		if(BrowserStatus == true){

			if(jqN.browser.mozilla)
			{
			//document.getElementById("download").style.display = "block";
				checkMediaPlayerStatusFF()
			} 
			else if (jqN.browser.msie)
			{
			//document.getElementById("download").style.display = "inline";
				checkMediaPlayerStatusIE();
			}
			
		} else if( !inUS ) {
			statusVar['success']=false;
			statusVar['msg']+='<a class="red_x">MUST RESIDE WITHIN THE U.S.</b><br/>';
		} else{
			statusVar['success']=false;
			statusVar['msg']+='<div style="border:solid black 0px;position:relative; left: 10px; margin:0px 0px 0px 0px;"><a class="red_x">BROWSER NOT COMPATIBLE</b></div><br/>';
		}

		if((mediaAgentVersion == '0')&&(isInstaller())){document.getElementById("download").style.display = "block";}

		return statusVar;

	}
	
	/*
	#########################
	### CATALOG FUNCTIONS ###
	#########################
	*/
	
	function DirectProduct(vars)
	{

		this.imageUrl=vars['imageUrl'];
		this.productPk=vars['productPk'];
		this.productName=vars['productName'];
		this.productType=vars['productType'];
		this.productAltcode=vars['productAltcode'];
		this.assetPk=vars['assetPk'];
		this.subscriptionPk=vars['subscriptionPk'];
		this.subscriptionStatus=vars['subscriptionStatus'];
		this.summaryLong=vars['summaryLong'];
		this.summaryShort=vars['summaryShort'];
		this.titleLong=vars['titleLong'];
		this.titleShort=vars['titleShort'];
		this.screenFormat=vars['screenFormat'];
		this.udf5=vars['udf5'];
		this.airDate=vars['airDate'];
		this.synopsis=vars['synopsis'];
	}

	DirectProduct.prototype.imageUrl;
	DirectProduct.prototype.productPk;
	DirectProduct.prototype.productName;
	DirectProduct.prototype.productType;
	DirectProduct.prototype.productAltcode;
	DirectProduct.prototype.assetPk;
	DirectProduct.prototype.subscriptionPk;
	DirectProduct.prototype.subscriptionStatus;
	DirectProduct.prototype.summaryLong;
	DirectProduct.prototype.summaryShort;
	DirectProduct.prototype.titleLong;
	DirectProduct.prototype.titleShort;
	DirectProduct.prototype.screenFormat;
	DirectProduct.prototype.udf5;
	DirectProduct.prototype.airDate;
	DirectProduct.prototype.synopsis;

	function DirectShowProduct(vars)
	{
		this.Altcode=vars['Altcode'];
		this.productPk=vars['productPk'];
		this.showTitle=vars['showTitle'];
		this.episodeTitle=vars['episodeTitle'];
		this.productType=vars['productType'];
		this.subscriptionPk=vars['subscriptionPk'];
		this.subscriptionStatus=vars['subscriptionStatus'];
		this.assetPK_1=vars['assetPK_1'];
		this.assetPK_2=vars['assetPK_2'];
		this.screenFormat_1=vars['screenFormat_1'];
		this.screenFormat_2=vars['screenFormat_2'];
	}

	DirectShowProduct.prototype.Altcode;
	DirectShowProduct.prototype.productPk;
	DirectShowProduct.prototype.showTitle;
	DirectShowProduct.prototype.episodeTitle;
	DirectShowProduct.prototype.productType;
	DirectShowProduct.prototype.subscriptionPk;
	DirectShowProduct.prototype.subscriptionStatus;
	DirectShowProduct.prototype.assetPK_1;
	DirectShowProduct.prototype.assetPK_2;
	DirectShowProduct.prototype.screenFormat_1;
	DirectShowProduct.prototype.screenFormat_2;


	function getLibrary()
	{
		jqN.ajax({
			type:"GET",
			url:"xml/ActiveProducts.xml",
			dataType:"xml",
			error: function(){
				jqN('#servicesMsg').append('<b>Failed to get Library</b>');
			},
			success: function(xml){
							
				jqN('product',xml).each(function(i){
					vars=new Array();
					vars['imageUrl']=jqN('imageUrl',this).text();
					vars['productPk']=jqN('productPk',this).text();
					vars['productName']=jqN('productName',this).text();
					vars['productType']=jqN('productType',this).text();
					vars['productAltcode']=jqN('productAltcode',this).text();
					vars['assetPk']=jqN('standardAssetPks',this).find('item').eq(0).text();
					//jqN('standardAssetPks',this).each(function(j){
					//	vars['assetPk']=jqN('item',this).text();
					//});
					
					vars['subscriptionPk']=jqN('subscriptionPk',this).text();
					vars['subscriptionStatus']=jqN('subscriptionStatus',this).text();
					vars['summaryLong']=jqN('summaryLong',this).text();
					vars['summaryShort']=jqN('summaryShort',this).text();
					vars['titleLong']=jqN('titleLong',this).text();
					vars['titleShort']=jqN('titleShort',this).text();
					vars['screenFormat']=jqN('screenFormat',this).text();
					vars['udf5']=jqN('udf5',this).text();
					directProduct=new DirectProduct(vars);
					directProducts.push(directProduct);
				});
				totalItems = directProducts.length;
			if(QueryString.keys.length > 0)
			{
					renderItem();
			}
			else 
			{
				if(devicePkString)
				{
						renderLibrary(1);
				} else {
						renderLibrary(1);
				}
			}
			}
		})
	}
	

	function getSortedShows()
	{
			jqN.ajax({
			type:"GET",
			url:"xml/SortedByShow.xml",
			dataType:"xml",
			error: function(){
				jqN('#servicesMsg').append('<b>Failed to get Library</b>');
			},
			success: function(xml){
				renderLibraryByShows(xml);
				}
		});
	}

	function getSubscriptions()
	{
//alert(devicePkString +":"+devicePk);	
	if (devicePk !== devicePkString)
	{
		if(devicePk !== ''){devicePk = devicePkString};
		if(devicePkString !== ''){devicePkString = devicePk};
	}
//alert(devicePkString +":"+devicePk);
var primetimeOutputHtml ='';
			jqN.ajax({
			type:"GET",
			url:"/app/direct_2/services/",
			data: "method=retrieveActiveSubscriptionProducts&devicePk="+devicePkString+"&rand="+getCacheBust(),
			dataType:"xml",
			error: function(){
				jqN('#servicesMsg').append('<b>Failed to get Library</b>');
			},
			success: function(xml){
// populate showproduct object
	jqN('product',xml).each(function(i){
	
			vars=new Array();
			vars['imageUrl']=jqN('imageUrl',this).text();
			vars['productPk']=jqN('productPk',this).text();
			vars['titleShort']=jqN('titleShort',this).text();
			vars['airDate']=jqN('airDate',this).text();
			vars['productAltcode']=jqN('productAltcode',this).text();
			vars['synopsis']=jqN('synopsis',this).text();
			vars['subscriptionPk']=jqN('subscriptionPk',this).text();
			vars['subscriptionStatus']=jqN('subscriptionStatus',this).text();
			jqN('standardAssetPks',this).each(function(j){
				vars['assetPk'] = jqN('item',this).eq((jqN('item',this).length - 1)).text();
				});
			directProduct=new DirectProduct(vars);
			directProducts.push(directProduct);
	});
			//###########################################################
			// loop through all product and compare altcodes
		for(i=0;i < directProducts.length; ++i)
			{
				if(i%2){rowStyle ='show odd';}else{rowStyle ='show';}

					primetimeOutputHtml +='<div class="' + rowStyle + '">';
					primetimeOutputHtml +='<img src="' + directProducts[i].imageUrl + '" width="112" height="63" class="thb" />';
					primetimeOutputHtml +='<div class="info" style="text-align:justify;width:380px; border:0px solid black;"><span class="title">'+directProducts[i].titleShort + '</span>';
					primetimeOutputHtml +='<span class="text">' + directProducts[i].airDate + '<br /><br />' + directProducts[i].synopsis + '<br /><br /></span></div>';

							if(directProducts[i].subscriptionStatus == 1)
							{
								primetimeOutputHtml+='<small>Currently Subscribed click below to cancel</small><br /><a id="subscriptionStatus_'+directProducts[i].subscriptionPk+'" href="javascript:void changeSubscription(\''+directProducts[i].subscriptionPk+'\',\''+directProducts[i].assetPk+'\',\''+directProducts[i].productPk+'\');">Cancel</a>';
							} else {
											if (devicePkString != undefined){ prodlink = 'javascript:void changeSubscription(\''+directProducts[i].subscriptionPk+'\',\''+directProducts[i].assetPk+'\',\''+directProducts[i].productPk+'\');';} else { prodlink = "drm_check.shtml";}
											primetimeOutputHtml+='<a id="subscriptionStatus_'+directProducts[i].subscriptionPk+'" href="'+prodlink+'">Subscribe</a>';
							}
							
					primetimeOutputHtml +='</div>';
					}
	jqN('#directShowCatalog').html(primetimeOutputHtml);
			//############################################################
			}
		});
	}

	function renderLibraryByShows(xml)
	{
	var directShowProducts = new Array();
	var primetimeOutputHtml ='';
	var altcodes = eval(jqN('altcodes',xml).text());
	
	// populate showproduct object
	jqN('product',xml).each(function(i){
	
			vars=new Array();
			vars['Altcode']=jqN('Altcode',this).text();
			vars['productPk']=jqN('productPk',this).text();
			vars['showTitle']=jqN('showTitle',this).text();
			vars['episodeTitle']=jqN('episodeTitle',this).text();
			vars['productAltcode']=jqN('productAltcode',this).text();
			//vars['assetPk']=jqN('assets',this).find('item').find('assetPK').text();
			jqN('assets',this).each(function(j){
				vars['assetPK_1'] = jqN('assetPK',this).eq(0).text();
				vars['screenFormat_1'] = jqN('screenFormat',this).eq(0).text();
				vars['assetPK_2'] = jqN('assetPK',this).eq(1).text();
				vars['screenFormat_2'] = jqN('screenFormat',this).eq(1).text();
				});
			directShowProduct=new DirectShowProduct(vars);
			directShowProducts.push(directShowProduct);
	});
	
	
	
	jqN('#directCatalog').html('');
	
	for(i=0;i < altcodes.length;++i)
	{
		var count = 0;
		var showTitle ='';
			for(g=0;g < directShowProducts.length; ++g)
			{
				if(directShowProducts[g].Altcode == altcodes[i])
				{
					showTitle = directShowProducts[g].showTitle;
				}
			}
			primetimeOutputHtml +='<div id="show_title"><img src="/Video/direct/images/hd_small.jpg" width="21" height="14" alt="Available in HD" /><p>' + showTitle + '</p></div>';
			for(j=0;j < directShowProducts.length; ++j)
			{
				if(directShowProducts[j].Altcode == altcodes[i])
				{
				//primetimeOutputHtml +='<div id="show_title"><img src="/Video/direct/images/hd_small.jpg" width="21" height="14" alt="Available in HD" /><p>' + directShowProducts[j].showTitle + '</p></div>';
				if(count%2){rowStyle ='episode_row_odd';}else{rowStyle ='episode_row_even';}
				primetimeOutputHtml +='<div id="'+rowStyle+'"><p>'+ directShowProducts[j].episodeTitle;

				if (devicePkString != undefined){ prodlink = 'javascript:void createPurchaseAndProvision(\''+directShowProducts[j].assetPK_1+'\',\''+devicePkString+'\',\''+directShowProducts[j].productPk+'\');';} else { prodlink = "drm_check.shtml";}
				primetimeOutputHtml +='</p><span id="downloadStatus_'+directShowProducts[j].assetPK_1+'" name="downloadStatus_'+directShowProducts[j].assetPK_1+'"></span>';
				primetimeOutputHtml +='<a class="dl_BTN" id="'+directShowProducts[j].assetPK_1+'" href="'+prodlink+'">Download</a>';
				primetimeOutputHtml +='</div>';
				++count;
				}
			}
	}	



   if (QueryString.keys.length > 0) 
    {
     if (productPK == DirectShowProducts[i].productPk)
     {
      jqN('#directShowCatalog').html(primetimeOutputHtml); // append only the value that mathces productPk if productPk is not null
     }
    }
     else 
    {
     jqN('#directShowCatalog').html(primetimeOutputHtml);
     jqN('#directShowCatalog').css({height:"auto"});
    }
//	
//		
//		Pager(page);

	}
	
	function renderItem()
	{
		var dlStat = "Subscribe";
		jqN('#directCatalog').html('');
		jqN('#pagerTop').html('');
		jqN('#pagerBottom').html('');
		alert(dlStat);
		for(i=0;i<directProducts.length;i++)
		{
		primetimeOutputHtml ='<div class="holder" style="border:0px red solid;clear:both;width: 370px;padding: 5px 5px 5px 5px;margins: 0px 0px 0px 0px;">';
		//primetimeOutputHtml +='<div style="width:136px; height:104px; background-image: url('+ directProducts[i].imageUrl + '); position:relative; float:left;"></div> ';
		
		primetimeOutputHtml +='<img src="'+ directProducts[i].imageUrl + '" alt="' + directProducts[i].titleShort + '" width="136" height="104" style="clear:both; position:relative; float:left; top:5px;" />';
		primetimeOutputHtml +='<div class="title" style="width:220px; height:20px; position:relative;float:left;padding: 0px 0px 0px 5px;">' + directProducts[i].titleShort + '</div>';
		primetimeOutputHtml +='<div class="desc"  style="width:220px; position:relative;float:left;padding: 0px 0px 0px 5px;">' + directProducts[i].summaryShort + '.</div>';
		primetimeOutputHtml +='<div style="border:1px white solid;z-index:100; width:21px; height:14px; background-image: url(/Video/direct/images/hd_small.jpg); position:relative; float:left;left:-132px; top:-66px;"></div> ';
		primetimeOutputHtml +='<div style="width: 365px; height:80px;position:relative; top:5px; float:left;">';
		primetimeOutputHtml +='<a href="javascript:void createPurchaseAndProvision(\''+directProducts[i].assetPk+'\',\''+ devicePkString +'\',\''+directProducts[i].productPk+'\');">Download</a>';
		if (directProducts[i].subscriptionStatus == 1 ){dlStat = "Cancel";}
		primetimeOutputHtml +='<a id="subscriptionStatus_'+directProducts[i].subscriptionPk+'" href="javascript:void changeSubscription(\''+directProducts[i].subscriptionPk+'\',\''+directProducts[i].assetPk+'\',\''+directProducts[i].productPk+'\');">'+dlStat+'</a>';
		primetimeOutputHtml +='<p id="downloadStatus_'+directProducts[i].assetPk+'" name="downloadStatus_'+directProducts[i].assetPk+'" style="clear:both; position: relative;  width:300px; text-align:center;z-index:1000;"></p>';
		primetimeOutputHtml +='<p id="downloadStatus_'+directProducts[i].subscriptionPk+'" name="downloadStatus_'+directProducts[i].subscriptionPk+'" style="clear:both; position: relative;  width:300px; text-align:center;z-index:1000;"></p>';
		primetimeOutputHtml +='</div>';
		primetimeOutputHtml +='</div>';
		

     if (ProductPK == directProducts[i].productPk)
     {
       jqN('#directCatalog').append(primetimeOutputHtml); // append only the value that mathces productPk if productPk is not null
     }
	}
	}
	
	function renderLibrary(page)
	{
		var pageEnd = (page * itemsPerPage);
		var pageStart = pageEnd - itemsPerPage;
		if (pageEnd > totalItems){pageEnd = totalItems;}
		//alert('Page: ' + page + '\n' +'itemsPerPage: ' + itemsPerPage + '\n' + 'pageStart: ' + pageStart + '\n' + 'pageEnd: ' + pageEnd + '\n' + 'totalItems: ' + totalItems);
		if (pageEnd > totalItems){pageEnd = totalItems;}
		jqN('#directCatalog').html('');
		jqN('#pagerTop').html('');
		jqN('#pagerBottom').html('');
		for(i=pageStart;i<pageEnd;i++)
		{
		primetimeOutputHtml ='<div class="holder" style="border:1px solid white; height:270px;">';
		primetimeOutputHtml +='<div style="width: 136px; height:330px;">';

		if (directProducts[i].udf5 == 'HD')
		{ 
			primetimeOutputHtml +='<span style="border:1px white solid;z-index:100; float:left; position:relative; top:25px; left:5px; width:21px; height:14px; background-image: url(/Video/direct/images/hd_small.jpg);"></span> ';
		}
		else 
		{
		primetimeOutputHtml +='<span style="border:0px white solid; z-index:100; float:left; position:relative; top:25px; left:5px; width:21px; height:14px; background-image: url();"></span> ';
		}

		//primetimeOutputHtml +='<span style="border:1px white solid;z-index:100; float:left; position:relative; top:25px; left:5px;width:21px; height:14px; background-image: url(/Video/direct/images/hd_small.jpg);"></span> ';

		primetimeOutputHtml +='<img src="'+ directProducts[i].imageUrl + '" alt="' + directProducts[i].titleShort + '" width="136" height="104" /><br />';
		primetimeOutputHtml +='<span class="title">' + directProducts[i].titleShort + '</span><br />';
		//primetimeOutputHtml +='<span class="name">' + directProducts[i].productName + '</span><br />';
		primetimeOutputHtml +='<span class="desc">' + directProducts[i].summaryShort + '.</span>';
		primetimeOutputHtml +='</div>';
		primetimeOutputHtml +='<div class="BTN_download_interact">';
		if (devicePkString != undefined){ prodlink = 'javascript:void createPurchaseAndProvision(\''+directProducts[i].assetPk+'\',\''+devicePkString+'\',\''+directProducts[i].productPk+'\');';} else { prodlink = "drm_check.shtml";}
		primetimeOutputHtml +='<a class="dl_BTN" id="'+directProducts[i].assetPk+'" href="'+prodlink+'">Download</a>';
		primetimeOutputHtml +='<p id="downloadStatus_'+directProducts[i].assetPk+'" name="downloadStatus_'+directProducts[i].assetPk+'"></p>';
		primetimeOutputHtml +='</div>';
		primetimeOutputHtml +='</div>';
		
    //if (QueryString.keys.length > 0) 
    //{
    //alert('got here'+ QueryString.keys.length +":"+ ProductPK + ":" + directProducts[i].productPk +":"+ i); 
    // if (ProductPK == directProducts[i].productPk)
    // {
    //
    //  jqN('#directCatalog').append(primetimeOutputHtml); // append only the value that mathces productPk if productPk is not null
    // }
    //}
    // else 
    //{
     jqN('#directCatalog').append(primetimeOutputHtml);
   // }
		}
	
		Pager(page);
	}

	function Pager(page){
		var numOfPages = totalItems / itemsPerPage
		var pageNumbers ='';
		var prevPage = '';
		var nextPage = '';

		
	if (page > 3){
		startOffset = page - 3;
		endOffset = page + 3;
	}else{
		startOffset = 1;
		endOffset = pageMax;
	}
	if (endOffset > numOfPages ){
		endOffset = Math.ceil(numOfPages);
		startOffset = endOffset - (pageMax -1);
	}
	if (startOffset <= 0)
	{
		startOffset = 1;
	}
	if (page < 0 ){
		page = 0;
	}
	for(i=startOffset; i<=endOffset; i++){
			if (i == page) 
			{
				pageNumstyle = 'background-color:#e5e5e5;color:#000;';
				rollover = 'onMouseOver="highlightOn(this);" onMouseOut=""';
			} 
			 else
			{ 
				pageNumstyle = 'color:#7d0a0a;'; 
				rollover = 'onMouseOver="highlightOn(this);" onMouseOut="highlightOff(this);"';
			}
			pageNumbers += '<div id="pagerItem" name="pagerItem" onclick="renderLibrary('+i+');" style="'+ pageNumstyle + '" '+ rollover + ' >'+i+'</div> ';
			if (page == 1){prevPage = 1;} else {prevPage = page - 1;}
			if (page == endOffset){nextPage = endOffset;}  else {nextPage = page + 1;}
	}	



	
		var sPager = '<div id="pagerItem" name="pagerItem"  onclick="renderLibrary(1);" onMouseOver="highlightOn(this)" onMouseOut="highlightOff(this)"><<</div>'+
		'<div id="pagerItemPrev" name="pagerItemPrev" onclick="renderLibrary('+ prevPage +');" onMouseOver="highlightOn(this)" onMouseOut="highlightOff(this)">< Prev</div> '+
		 pageNumbers +
		' <div id="pagerItemPrev" name="pagerItemPrev" onclick="renderLibrary('+ nextPage +');" onMouseOver="highlightOn(this)" onMouseOut="highlightOff(this)">Next ></div>'+
		'<div id="pagerItem" name="pagerItem" onclick="renderLibrary('+ Math.ceil(numOfPages) +');" onMouseOver="highlightOn(this)" onMouseOut="highlightOff(this)">>></div>';
		
		jqN('#pagerTop').append(sPager);
		jqN('#pagerBottom').append(sPager);
		//alert('Page: ' + page + '\n' +'itemsPerPage: ' + itemsPerPage + '\n' + 'numOfPages: ' + numOfPages + '\n' + 'nextPage: ' + nextPage + '\n' + 'startOffset' + startOffset + '\n' + 'endOffset' + endOffset + '\n');
		return true;
		
		
	}
	
	function highlightOn(arg)
	{
		arg.style.fontWeight = "bold";
	/*	
		arg.style.backgroundColor ='#fff';
		arg.style.color = "#7d0a0a";
	*/
	}
	
	function highlightOff(arg)
	{
		arg.style.fontWeight = "normal";
	/*

		arg.style.backgroundColor='';
		arg.style.color = '';
	*/
	}
	
	function changeSubscription(subscriptionPk,assetPk,productPk)
	{
	if (devicePk !== devicePkString)
	{
		if(devicePk !== ''){devicePk = devicePkString};
		if(devicePkString !== ''){devicePkString = devicePk};
	}
		playerHealth=playerCheck();
		if(playerHealth['success'])
		{
			switch(document.getElementById('subscriptionStatus_'+subscriptionPk).innerHTML)
			{
				case 'Subscribe':
					queryDataSubscr='method=changeSubscription&status=1&devicePk='+devicePkString+'&productPk='+subscriptionPk+'&rand='+getCacheBust();
					jqN('#subscriptionStatus_'+subscriptionPk).html('Cancel');
					jqN('#downloadStatus_'+subscriptionPk).html('<div style="border:solid black 0px;position:relative; left: 13px; margin:0px 0px 0px 0px;">Waiting for confirmation.</div>');
					createPurchaseAndProvision(assetPk,devicePkString,productPk);
					//provisionDownload(productPk,assetPk);
					break;
				case 'Cancel':
					queryDataSubscr='method=changeSubscription&status=0&devicePk='+devicePkString+'&productPk='+subscriptionPk+'&rand='+getCacheBust();
					jqN('#subscriptionStatus_'+subscriptionPk).html('Subscribe');
					jqN('#downloadStatus_'+subscriptionPk).html('<div style="border:solid black 0px;position:relative; left: 13px; margin:0px 0px 0px 0px;">Waiting for confirmation.</div>');
					break;

			}
			
			jqN.ajax({
					type:"GET",
					url:"/app/direct_2/services/",
					data: queryDataSubscr,
					dataType:"xml",
					error: function(){
						jqN('#downloadStatus_'+subscriptionPk).html('<div style="border:solid black 0px;position:relative; left: 13px; margin:0px 0px 0px 0px;"><b>Failed to change subscription</b></div>');
					},
					success: function(xml){
						msg=jqN('message',xml).text();

						jqN('#downloadStatus_'+subscriptionPk).html('<div style="border:solid black 0px;position:relative; left: 13px; margin:0px 0px 0px 0px;">Subscription change confirmed.</div>');

					}
			})
		} else {
			playerHealth['status'];
			jqN('#downloadStatus_'+subscriptionPk).html(playerHealth['msg']);
		}
	}
	
	function provisionDownload(productPk,assetPk)
	{
		playerHealth=playerCheck();
		if(playerHealth['success'])
		{
			if (devicePk !== devicePkString)
			{
				if(devicePk !== ''){devicePk = devicePkString};
				if(devicePkString !== ''){devicePkString = devicePk};
			}
			queryData='method=provisionLicenseAndDownload&assetPk='+assetPk+'&devicePk='+devicePk+'&productPk='+productPk;
			jqN.ajax({
					type:"GET",
					url:"/app/direct_2/services/",
					data: queryData,
					dataType:"xml",
					error: function(){
						jqN('small#'+assetPk).replaceWith('<a class="dl_BTN" id="'+directProducts[i].assetPk+'" href="javascript:void createPurchaseAndProvision(\''+directProducts[i].assetPk+'\',\''+devicePkString+'\',\''+directProducts[i].productPk+'\');">Download</a>');
						jqN('#downloadStatus_'+assetPk).text('Download request failed');
					},
					beforeSend: function() {
						jqN('#'+assetPk).replaceWith('<small id="'+assetPk+'" style="color:#888">Loading...<img src="images/progress.gif" alt="Loading" /></small>')
					},
					success: function(xml){
						//getAssetCode(assetPk);
						jqN('#'+assetPk).remove();
						jqN('#downloadStatus_'+assetPk).text('Download request accepted');

					}
			})
		} else {
			jqN('#downloadStatus_'+subscriptionPk).html(playerHealth['msg']);
		}
	}

	function createPurchaseAndProvision(assetPk,devicePk,productPk)
	{	
		playerHealth=playerCheck();
		if(playerHealth['success'])
		{
			if (devicePk !== devicePkString)
				{
					if(devicePk !== ''){devicePk = devicePkString};
					if(devicePkString !== ''){devicePkString = devicePk};
				}
			
			queryData='method=createPurchaseAndProvision&devicePk='+devicePkString+'&productPk='+productPk;
			jqN.ajax({
					type:"GET",
					url:"/app/direct_2/services/",
					data: queryData,
					dataType:"xml",
					error: function(){
						jqN('small#'+assetPk).replaceWith('<a class="dl_BTN" id="'+directProducts[i].assetPk+'" href="javascript:void createPurchaseAndProvision(\''+directProducts[i].assetPk+'\',\''+devicePkString+'\',\''+directProducts[i].productPk+'\');">Download</a>')
						jqN('#downloadStatus_'+assetPk).text('Download request failed');
					},
					beforeSend: function() {
						jqN('#'+assetPk).replaceWith('<small id="'+assetPk+'" style="color:#888">Loading...<img src="images/progress.gif" alt="Loading" /></small>')
					},
					success: function(xml){
						//getAssetCode(assetPk);
						jqN('#'+assetPk).remove();
						jqN('#downloadStatus_'+assetPk).html('<small>Download request accepted</small>');
					}
			})
		} else {
			jqN('#downloadStatus_'+assetPk).html(playerHealth['msg']);
		}
	}
	
	function getAssetCode(assetPk)
	{
		queryData='method=lookupAssetByAssetPk&assetPk='+assetPk;
		jqN.ajax({
				type:"GET",
				url:"/app/direct_2/services/",
				data: queryData,
				dataType:"xml",
				error: function(){
					jqN('#statusMsg').html('<b>Failed to lookup request</b>');
				},
				success: function(xml){

					 assetCode = jqN('assetCode',xml).text();
					 getDownloadStatus(assetCode,assetPk)
				}
		})
	}
	
	function getDownloadStatus(assetCode,assetPk)
	{

 		assetManager=csmManager.getAssetManager(serviceString);
   		var oAsset = assetManager.GetAssetByCid(assetCode);
		var assetProgress = oAsset.RequestPercentageDownloaded();
		jqN('#downloadStatus_'+assetPk).html('Downloading: '+assetProgress+'% complete');
		if(assetProgress!=100)
		{
			setTimeout('getDownloadStatus("'+assetCode+'","'+assetPk+'")',3000);
		}

	}

	function createOpenCaseActX()
	{
		document.getElementById('openCaseActX').innerHTML ='<object id ="Player" classid ="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" height ="0" width ="0"><param Name ="uiMode" Value ="invisible"></object>';
		document.getElementById('openCaseActX').innerHTML +='<object classid="clsid:AFAF00C2-7C40-4eda-A6D3-407EBF9FF94F" id="csmManager" width="0" height="0" viewastext></object>';
	}
	
	function createOpenCaseFFplugin()
	{
		document.getElementById('openCaseFF').innerHTML +='<object id="csmManager" type="application/media_agent_proxy" width="0" height="0" codebase="/Video/direct/NBCDirectPlugin.xpi"></object>';
	}
	
	function clearStatusMsg()
	{
		jqN('#statusMsg').html('');
	}
	
	function getCacheBust()
	{
		return Math.round(Math.random()*100000000);
	}
	
		/*
	###########################
	### DETECTION FUNCTIONS ###
	###########################
	*/
	function checkMediaAgent()
	{
			//alert(mediaAgentVersion);
		if((mediaAgentVersion > '0') && (mediaAgentVersion < "5.3.0.2355")){
				//if((location.href !== baseUrl + "/Video/direct/index.shtml" )||(location.href !== baseUrl + "/Video/direct/")){location.href= baseUrl + "/Video/direct/index.shtml";}
					statusVar['success']=false;
					document.getElementById("check_again").style.display = "inline";
					statusVar['msg']+='<br/><br/><a class="red_x" href="../faq_direct.shtml">&nbsp;We\'ve detected that you have an older version of NBC Direct.<br/>You\'ll need to uninstall it completely before proceeding.</a>';
					statusVar['msg']+='<div style="width:auto; border:0px solid red; font-size:12px; font-weight:normal; padding:10px 40px 10px 80px;text-align:left;">Please choose "Add or Remove Programs" from your Control Panel list and uninstall BOTH of the following programs: <br/><br/> (a) <img src="/Video/direct/images/controlpanel_nbcdirect.gif" width="95" height="16"><br/>(b) <img src="/Video/direct/images/controlpanel_opencase.gif" width="134" height="16"><br/> <br/>Once you\'ve successfully uninstalled both programs, click the "Check Again" button above to test your system. If you\'re having trouble uninstalling, <a href="../faq_direct.shtml">click here</a> for detailed instructions.</div><br/>';
					throw new Error("media agent version: " + mediaAgentVersion);
		}
	}
	function checkGeo()
	{
		jqN.ajax({
			type:"GET",
			url:"/app/direct_2/services/",
			data: "method=withinUS&rand="+getCacheBust(),
			dataType:"xml",
			error: function(){
				jqN('#servicesMsg').append('<b>Failed to check geo</b> &nbsp;');
			},
			success: function(xml){
				if(eval(jqN('response',xml).text()))
				{
					//jqN('#statusMsg').append('<a class="green_check">ISP WITHIN THE U.S.</a><br/>');
					inUS = true;
				} else {
					jqN('#statusMsg').append('<a class="red_x">MUST RESIDE WITHIN THE U.S.</a><br/>');
					inUS = false;

				}
			}
		})
		
	}
	
	function DetectPlayerVersion()
	{

		var vertext = Player.versionInfo;
		//alert(Player.versionInfo);
		var cbT = vertext.length;
		var buildrev = vertext.substring(cbT-4, cbT);
		
		// Detect operating system version from browser.  XP is 5.1, Vista is 6.0.
		if (navigator.appVersion.search("Windows NT 6.0") > 0)
		{
		//alert("OS: Vista Rev:'"+buildrev+"'");
			// Vista version should be 11.0.6000.6326 or later.
			if (buildrev < 6326)
			{
				statusVar['msg']+='<a class="bang_o" href="http://support.microsoft.com/kb/931756">Deprecated build revision.</a><br/>';	
			}
		}
		else
		{
		//alert("OS: XP and lower Rev:'"+buildrev+"' Player Version:" + Player.versionInfo);
			// XP version should be 11.0.5721.5212 or later for WMP 11
			// Previous major versions of the player are not affected
  	
			if ((parseInt(Player.versionInfo) == 11) && (buildrev < 5212))
			{
				statusVar['msg']+='<a class="bang_o" href="http://support.microsoft.com/kb/931756">Deprecated build revision.</a><br/>';	
			}
		}
	}
	
	function checkMediaPlayerStatusIE()
	{
		
		try
			{
				if(csmManager.IsMediaAgentInstalled())
				{
					mediaAgentVersion = csmManager.GetVersion();
					if(csmManager.isCSMRunning())
					{
						checkMediaAgent();
						if(csmManager.IsServiceRegistered(serviceString))
						{
							
							devicePk= csmManager.getDevicePK(serviceString);
							devicePkString= csmManager.getDevicePKString(serviceString);
							if(isInstaller()){
							statusVar['msg']+='<a class="green_check">     READY</a><br/>';
							statusVar['msg']+='redirecting to catalog page...<br/>';
							}
						} else {
							statusVar['success']=false;
							//statusVar['msg']+='<a class="red_x">ERROR</a><br/>';
						}
					} else {
						csmManager.requestCSMStartup();
						setTimeout('playerCheck',500);
						initStartupCount++;
						if(initStartupCount>2)
						{
							statusVar['success']=false;
							statusVar['msg']+='<a class="red_x">FAILED TO STARTUP</a><br/>';
						}
					}
				}
				else { throw new Error("media agent not installed");}
			} catch (e) {
				statusVar['success']=false;
				//statusVar['msg']+='<span>media agent not installed</span>';
				try
					{
						if(csmManager.IsMediaAgentInstalled() && jqN.browser.mozilla){}
					} catch (e) {
						// do nothing for IE
					}
			}
		return;
	}
	
	function checkMediaPlayerStatusFF()
	{
		try
		{
			if(isPluginInstalled()&& jqN.browser.mozilla){} else { throw new Error("media agent not installed");} 
		} catch (e) {
		if((location.href == baseUrl + "/Video/direct/drm_check.shtml"))
		  {
	      statusVar['msg']+="<div id='pop_up'><p class='pop_up'>Please install the<Br /> Firefox plug-in before proceeding.</p></div>";
	      statusVar['msg']+="&nbsp;&nbsp;&nbsp;<a class=\"green_arrow\" href=\"javascript:install_extnd()\">Browser Plug-in Required | Install Now</a><br/>";
	      setTimeout ("jqN('#pop_up').hide();", "5000" );
	    }
	     else 
	    {
	    statusVar['msg']+="<a href=\"javascript:install_extnd()\" style=\"position:relative; top:-3px;left:9px;\">Install Plug-in</a>";
	    }
		}

		try
			{
				if(IsMediaAgentInstalled())
				{
					if(IsCSMRunning())
					{
						mediaAgentVersion = GetFFVersion();
						if(IsServiceRegistered(serviceString))
						{
							checkMediaAgent();
							if(mediaAgentVersion > "5.3.0.2355")
							{
								devicePk = GetDevicePk(serviceString);
								devicePkString = GetDevicePkString(serviceString);
								if(isInstaller()){
								statusVar['msg']+='<a class="green_check">     READY</a><br/>';
								statusVar['msg']+='redirecting to catalog page...<br/>';
								}
							}
						} else {
							statusVar['success']=false;
							statusVar['msg']+='<a class="red_x">ERROR</a><br/>';
						}
					} else {
						requestCSMStartup();
						initStartupCount++;
						if(initStartupCount>2)
						{
							statusVar['success']=false;
							statusVar['msg']+='<a class="red_x">FAILED TO STARTUP</a><br/>';
						}
					}
				}else { throw new Error("media agent not installed");}
			} catch (e) {
				statusVar['success']=false;
				
							//alert(e);
			}

	}
	
	function IsMediaAgentInstalled()
	{
    var retVal = false;
    var embed1 = document.getElementById('csmManager');
     try
     {
         var v = embed1.IsMediaAgentInstalled();
         if (v.ErrorCode == 0)
         {
             var running = v.Value == true ? "installed" : "not installed";
             retVal = true;
         }
         else
             alert("IsMediaAgentInstalled returned: " + v.ErrorCode);
     }
      catch (err)
     {
         //alert(err );
         return retVal;
     }
    return retVal;
   
	}
	
	function IsCSMRunning()
	{
   var retVal = false;
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.IsCSMRunning();
        if (v.ErrorCode == 0)
        {
            var running = v.Value == true ? "running" : "not running";
            retVal = true;
        }
        else
        {
            //alert("Media Agent is not running");
        }
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }
   return retVal;
	}
	
	function RequestCSMStartup()
	{
    var retVal = false;
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.RequestCSMStartup();
        if (v.ErrorCode == 0)
        {
            retVal = true;
        }
        else
            alert("Media Agent did not start; error code: " + v.ErrorCode);
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }  
    return retVal;
	}

	function IsServiceRegistered(servName)
	{
    var retVal = false;
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.IsServiceRegistered(servName);
        if (v.ErrorCode == 0)
        {
            var registered = v.Value == true ? "registered" : "not registered";
            retVal = true;
        }
        else
            alert("IsServiceRegistered returned error: " + v.ErrorCode);
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }
    return retVal;
	}

	function GetDevicePk(servName)
	{
    var retVal = '';
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.GetDevicePk(servName);
        if (v.ErrorCode == 0)
        {
            retVal = v.Value;
        }
        else
            alert("GetDevicePk returned error: " + v.ErrorCode);
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }
    return retVal;
	}

	function GetDevicePkString(servName)
	{
    var retVal = '';
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.GetDevicePkString(servName);
        if (v.ErrorCode == 0)
        {
            retVal = v.Value;
        }
        else
            alert("GetDevicePkString returned error: " + v.ErrorCode);
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }
    return retVal;
	}

	function GetFFVersion()
	{
    var retVal = '';
    try
    {
        var embed1 = document.getElementById('csmManager');
        var v = embed1.GetVersion();
        if (v.ErrorCode == 0)
        {
            retVal = v.Value;
        }
        else
            alert("GetVersion returned error: " + v.ErrorCode);
    }
    catch (err)
    {
        alert(err);
        return retVal;
    }
    return retVal;
	}

	function xpinstallCallback(url, status) {
  if (status == 0){            
      msg = "Plugin installation completed. Initializing plugin. \n";
      // Initialize the plugin
      instantiatePlugin();
  } else
      msg = "Plugin installation failed. \n";
  
  //alert(msg);
	}

	function install_extnd()
	{
  
    if (isPluginInstalled()){            
      alert("The Media Agent Plugin is already installed");                      
    } else {            
      xpi={'NBC Direct Plugin':'/Video/plugin/NBCDirectPlugin.xpi'};
      InstallTrigger.install(xpi,xpinstallCallback);            
    }
	}

	function isPluginInstalled()
	{
  var retVal = false;
  var numPlugins = navigator.plugins.length;
  if (numPlugins > 0){
    for (i = 0; i < numPlugins; i++) {
      var plugin = navigator.plugins[i];
      if (plugin.name == "Media Agent proxy plugin"){              
        retVal = true;
      }          
    }
  }      
  return retVal;
	}

	function instantiatePlugin()
	{
  var obj = document.createElement("OBJECT");
  obj.setAttribute("id","csmManager");
  obj.setAttribute("type","application/media_agent_proxy");
  obj.setAttribute("width","1px");
  obj.setAttribute("height","1px");
  
  // add the Object element to the body
  //document.getElementById('openCaseFF').appendChild(obj);
  document.body.appendChild(obj);
  
  csmManager = document.getElementById('csmManager');      
	}

	function QueryString(key)
	{
	var value = null;
	for (var i=0;i<QueryString.keys.length;i++)
	{
		if (QueryString.keys[i]==key)
		{
			value = QueryString.values[i];
			break;
		}
	}
	return value;
	
	}

	QueryString.keys = new Array();
	QueryString.values = new Array();

	function QueryString_Parse()
	{
	var query = window.location.search.substring(1);
	var pairs = query.split("&");
	
	for (var i=0;i<pairs.length;i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos >= 0)
		{
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			QueryString.keys[QueryString.keys.length] = argname;
			QueryString.values[QueryString.values.length] = value;		
		}
	}
	}
	
	function getFFversion()
	{
		var verString =window.navigator.userAgent;
		var ver = verString.split("/");
		var temp = ver[3].split(".");
		return temp[0];
	}	
	function isLibrary()
	{
		var retVal = false;	
		if((location.href == baseUrl + "/Video/direct/index.shtml") || (location.href == baseUrl + "/Video/direct/")){retVal = true}
		return retVal;
	}
	function isInstaller()
	{
		var retVal = false;	
		if(location.href == baseUrl + "/Video/direct/installer.shtml"){retVal = true}
		return retVal;
	}
	
