//点播直播获取XML相关的脚本
/*依赖： 
	jquery.js
	const.js

*/


var g_xmlstr='';

if (!queryActionExt){
	alert("警告：必须在引用本脚本之前引用const.js");
}
//检查播放器
/*
返回：
0=播放器正常
1=用户不是使用IE浏览器浏览
2=没有安装播放器，或者ACTIVEX被禁用 需要安装或者设置启用ACTIVEX
3=用户已经安装播放器，但是版本过老，需要升级
*/
function checkPlayer(){

	var oTest ;
	try{
		oTest = new ActiveXObject("PlayCaller7.PlayCallerP2P.1");
	}
	catch(e){
	
		//检查浏览器是否为ie
		var nm='Microsoft Internet Explorer';
		var s=navigator.appName;
		if(s!=nm){
			//不是IE
			return 1;
		}else{
			//没安装播放器
			return 2
		}
	}
	try{
		var v=oTest.GetVersion();
	}catch(e){
		//版本过老
		return 3;
	}
	//没啥问题

	return 0;

}


//弹出式播放节目
//xmlObj	XML DOM对象，保存有下载的点播/直播XML经过解析的DOM对象
function playWithExe(xmlObj){
	var s,nd,i,objPlayCaller;
	
	try{
		objPlayCaller = new ActiveXObject("PlayCaller7.PlayCallerP2P.1");
	}catch(e){
		alert("PlayCaller 对象创建失败！");
		return;
	}

	s="webplayer/config/ShowP2PUI"
	nd=xmlObj.selectSingleNode(s);
	if(nd!=null){
		s=nd.firstChild.nodeValue;
		i=parseInt(s);
		if(i==0)
			s=" -s";
		else
			s="";	
		
	}else{
		s="";
	}
	objPlayCaller.StartP2P(xmlObj.xml+s);
}


//嵌入式（不带面板的组件）播放节目
//xmlObj	XML DOM对象，保存有下载的点播/直播XML经过解析的DOM对象
//mediaObj	播放器ACTIVEX对象
function playWithWeb(xmlObj,mediaObj){
	var s,nd,i,objPlayCaller,hash;
	
	try{
		objPlayCaller = new ActiveXObject("PlayCaller7.PlayCallerP2P.1");
	}catch(e){
		alert("PlayCaller 对象创建失败！");
		return;
	}
	nd=$(xml).find("webplayer programlist program param[name='hash_info']").get(0);
	hash = $(nd).attr("value");

	s="webplayer/config/ShowP2PUI"
	nd=xmlObj.selectSingleNode(s);
	if(nd!=null){
		s=nd.firstChild.nodeValue;
		i=parseInt(s);
		if(i==0)
			s=" -s";
		else
			s="";	
		
	}else{
		s="";
	}
	objPlayCaller.StartP2P(xmlObj.xml+s);
	var u = "http://127.0.0.1:7881/" + hash + ".vpp";
	mediaObj.URL = u;
}

//嵌入式（带面板的组件）播放节目
//xmlObj	XML DOM对象，保存有下载的点播/直播XML经过解析的DOM对象
//mediaObj	播放器ACTIVEX对象
function playWithPanelWeb(xmlObj,mediaObj){
	var s,nd,i,objPlayCaller,hash;
	
	try{
		objPlayCaller = new ActiveXObject("PlayCaller7.PlayCallerP2P.1");
	}catch(e){
		alert("PlayCaller 对象创建失败！");
		return;
	}
	nd=$(xmlObj).find("webplayer programlist program param[name='hash_info']").get(0);
	hash = $(nd).attr("value");

	s="webplayer/config/ShowP2PUI"
	nd=xmlObj.selectSingleNode(s);
	if(nd!=null){
		s=nd.firstChild.nodeValue;
		i=parseInt(s);
		if(i==0)
			s=" -s";
		else
			s="";	
		
	}else{
		s="";
	}
	mediaObj.Hashinfo = hash;
	mediaObj.PlayerCount=1;
	
	objPlayCaller.StartP2P(xmlObj.xml+s);
	
}


/*
获取XML并且自动播放点播节目
假如出错，使用对话框提示 本函数可以满足大部分需求
支持嵌入式和弹出式播放

contextPath	WEB虚拟路径，也可以传入相对路径 如'.',不包含后面的/符号
vProgId		虚拟节目ID
vFileId		虚拟节目分集ID
inBuildMode	是否嵌入式播放 1=嵌入式播放	0=弹出式播放
mediaObj	嵌入式播放时候，传入播放器对象，弹出式播放时候无用
*/
function playVod(contextPath,vProgId,vFileId,inBuildMode,mediaObj){
	if(!checkPlayerAndDownload()){
		return ;
	}
	getVodPlayXmlEx(contextPath,vProgId,vFileId,inBuildMode,0,
		function(xmlObj){
			if (inBuildMode==1){
				playWithWeb(xmlObj,mediaObj);
			}else{
				playWithExe(xmlObj);
			}
		},
		function(err){
			alert(err);
		}
	)
}


/*
获取XML并且自动播放直播节目
假如出错，使用对话框提示 本函数可以满足大部分需求
支持嵌入式和弹出式播放

contextPath	WEB虚拟路径，也可以传入相对路径 如'.',不包含后面的/符号
vProgId		虚拟节目ID
vFileId		虚拟节目分集ID
inBuildMode	是否嵌入式播放 1=嵌入式播放	0=弹出式播放  2=带面板的嵌入式播放
mediaObj	嵌入式播放时候，传入播放器对象，弹出式播放时候无用
*/
function playLive(contextPath,vChannelId,inBuildMode,mediaObj){
	var inBuildMode2;
	if(!checkPlayerAndDownload()){
		return ;
	}
	if (inBuildMode=2) {
		inBuildMode2=1;
	}else{
		inBuildMode2=inBuildMode;
	}
	getLivePlayXmlEx(contextPath,vChannelId,inBuildMode2,
		function(xmlObj){
			if (inBuildMode==1){
				playWithWeb(xmlObj,mediaObj);
			}else if(inBuildMode==0){
				playWithExe(xmlObj);
			}else{
				playWithPanelWeb(xmlObj,mediaObj);
			}
		},
		function(err){
			alert(err);
		}
	)
}

/*非阻塞获取虚拟节目分集播放  xml
contextPath	WEB虚拟路径，也可以传入相对路径 如'.',不包含后面的/符号
vProgId		虚拟节目ID
vFileId		虚拟节目分集ID
inBuildMode	是否嵌入式播放 1=嵌入式播放	0=弹出式播放
isDownload	是否下载
succCallbackFunc	下载成功以后的回调 function(xmlObj)类型，xmlObj为xml dom对象
errCallbackFunc		下载失败以后的回调 function(err)类型，err为错误信息字符串
*/
function getVodPlayXmlEx(contextPath,vProgId,vFileId,
	inBuildMode,isDownload,
	succCallbackFunc,errCallbackFunc){
	var u = contextPath + "/portal/get_vod_play_xml."+queryActionExt
		+"?vprog_id="+vProgId+"&vfile_id=" + vFileId + "&is_down="+isDownload+"&inbuild_mode="+inBuildMode;
	//document.write(u);
	$.ajax({url:u,
		type:"GET", 
		async:true, 
		dataType:"xml", 
		timeout:100000,
		error:function (){
			if(errCallbackFunc){
				errCallbackFunc('链接服务器时候出错')
			}
		},
		success:function (data) {
			var xml=data;	
			var err = $(xml).find("result").find("err").text();
			if (err != "") {//出错！
				if(errCallbackFunc){
					errCallbackFunc(err);
				}
			}else
                		if(succCallbackFunc){
					succCallbackFunc(xml);
				}
			}
	});//$.ajax
	
}
/*
非阻塞获取直播虚拟频道节目的播放XML
contextPath	WEB虚拟路径，也可以传入相对路径 如'.',不包含后面的/符号
vChannelId	虚拟频道ID
succCallbackFunc	下载成功以后的回调 function(xmlObj)类型，xmlObj为xml dom对象
errCallbackFunc		下载失败以后的回调 function(err)类型，err为错误信息字符串
*/
function getLivePlayXmlEx(contextPath,vChannelId,inBuildMode,
	succCallbackFunc,errCallbackFunc){
	var u=contextPath+"/portal/get_live_play_xml."+queryActionExt
	+"?vchannel_id="+vChannelId+"&inbuild_mode="+inBuildMode ;
	//alert(u);
	$.ajax({url: u,
		type: 'GET',
		async:true,
		dataType: 'xml',
		timeout: 100000,
		error: function(){
			if(errCallbackFunc){
				errCallbackFunc('链接服务器时候出错')
			}
		},
		success: function(data){ 
			//alert(data.xml)
			var xml=data;	
			var err = $(xml).find("result").find("err").text();
			if (err != "") {//出错！
				if(errCallbackFunc){
					errCallbackFunc(err);
				}
			}else{
                if(succCallbackFunc){
					succCallbackFunc(xml);
				}
			}
		}
	});
	
}

//private 函数，获取本机提供的msxml对象名称
function GetDOMDocumentPrefix()
{
	var szPrefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var oReturnObject;

	for(var i = 0; i < szPrefixes.length; i++)
	{
		try
		{
			oReturnObject = new ActiveXObject(szPrefixes[i] + ".DOMDocument");
			return szPrefixes[i];
		}
		catch(ex){}
	}

	return "";
}

// 获取 XMLDOM 对象
function GetXMLDOMObject()	
{
	try{
		if(window.ActiveXObject)
		{
			var oReturnObject = new ActiveXObject(GetDOMDocumentPrefix() + ".DOMDocument");
			oReturnObject.async				= false;
			oReturnObject.resolveExternals	= false;
			return oReturnObject;
		}
	}
	catch(ex){
		return null;
	}
}

//检查环境是否正确，如果不正确提示或者弹出安装软件对话框
//contextPath WEB虚拟路径，也可以传入相对路径 如'.',包含后面的/符号
function checkPlayerAndDownload(){
	var r = checkPlayer();
	if(r != 0){
		if(r == 1){
			alert('请使用IE浏览浏览本站点，其余浏览器可能无法观看视频');
			return false;;
		}else{
			if(r == 2){
				s="您可能没有安装播放器插件，下面将开始下载并安装播放器插件。\n假如每次播放都出现本对话框，说明播放器插件被禁用，请检查IE设置并且检查播放器插件是否被第三方软件禁用。";
			}else if(r == 3){
				s ="发现您的播放器版本过老，下载升级。";
			}
			alert(s);
			window.open(webPlayerDownloadUrl);
			return false;
		}
		
	}
	return true;
}


