// 定义：
// QQ直播的最新版本号：
var VER_QQLIVE		= "8.13.4808.0";
var QQLIVE_DOWNLOAD_URL = "qqlive";
var QQLIVE_DOWNLOAD_TPTURL = "";
var QQLIVE_INSTALLER_CAB = "http://dl_dir.qq.com/qqtv/MMInstaller.cab#version=1,0,0,3";
var FLASH_CAB = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0";
var FLASH_SETUP_AX = "http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_ax.exe";
var FLASH_SETUP_PLUGIN = "http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player.exe";
var MEDIAPLAYER_DOWNLOAD_URL = "http://tv.qq.com/download.htm";
var PROGID_QQLIVE_INSTALLER = "QQLiveInstaller.InstallHelper.1";

var PAGE_START = "start";
var PAGE_LOADING = "loading";
var PAGE_ERROR = "error";
var PAGE_NONSUPPORT = "nonsupport";

var QQLIVE_DOWNLOAD_VERSION = "QQLive 2008";
var QQLIVE_SWF_PATH = "http://cache.tv.qq.com/out/";  	//swf的基础地址的位置
var QQLIVE_SWF_SKIN = "skins/";  							//swf的skin的文件夹


// 控件参数开始
function qqliveOcxParam(strName, strValue)
{
	this.Name = strName;
	this.Value = strValue;
}

function qqliveOcxParams()
{
	this.count = 0;
}
// 控件参数结束

// 系统监测开始
function compareVersions(strVer1, strVer2)
{
	strVer1 = strVer1.replace(/,/g, '.');
	strVer2 = strVer2.replace(/,/g, '.');
	
	var vArray1 = strVer1.split('.');
	var vArray2 = strVer2.split('.');
	
	for (var i = 0; i < 4; i++)
	{
		var nVer1 = Number(vArray1[i]);
		var nVer2 = Number(vArray2[i]);
			
		if (nVer1 > nVer2)
		{
			return 1;
		}
		else if (nVer1 < nVer2)
		{
			return -1;
		}
	}
	
	return 0;
}

// 下载开始
function DownloadCallBack(stateType, strResult)
{
	var strState = "";
	var strTitle = "";
	switch (stateType)
	{
	case 0:
		strState = "正在准备下载。。。";
		break;
	case 1:
		if (strResult > 93)
		{
			strResult = "93";
		}
		strState = "正在下载。。。" + strResult + "%";
		break;
	case 2:
		strResult = "96";
		strState = "正在安装。。。" + strResult + "%";
		strTitle = "正在安装QQLive播放器，请稍候";
		break;
	case 3:
		strState = "运行安装程序完毕!";
		window.location.reload();
		break;
	case -1:
		strState = "启动下载失败！"; 
		break;
	case -2:
		strState = "安装程序被终止！";
		break;
	case -3:
		strState = "下载失败!";
		break;
	case -100:
		strState = "下载路径不合法！";
		break;
	default:
		strState = "未知状态！";
		break;
	}
	var strHtml = "";
	if (stateType == 1 || stateType == 2)
	{
		try{
			document.getElementById("UISWF").setProgress(strResult/100);
			if(strTitle != "")
			{
				document.getElementById("UISWF").changePanelTitle(strTitle);
			}
		}
		catch(e)
		{
		}
	}
	else if (stateType < 0)
	{
		try
		{
			document.getElementById("UISWF").showPanel(PAGE_ERROR);
			document.getElementById("UISWF").changePanelTitle("自动安装QQLive播放器失败");
		}
		catch(e)
		{
		}
	}
}

function flashCall(cmd)
{
	switch (cmd)
	{
		case "downloadQQLive":
			JumpUrl();
		break;
		case "fresh":
			Fresh();
		case "runQQLive":
			RunQQLive();
		break;
	}
}

var objQQLiveInstaller = null;
//自动下载
function Download()
{
	objQQLiveInstaller = null;
	objQQLiveInstaller = new ActiveXObject(PROGID_QQLIVE_INSTALLER);
	var page = null;
	var page_title = "";
	try
	{
		objQQLiveInstaller.DownloadSetup(QQLIVE_DOWNLOAD_URL, QQLIVE_DOWNLOAD_TPTURL, 1, " /S", DownloadCallBack);
		page = PAGE_LOADING;
		var cur_ver = GetVersion();
		if(cur_ver == 0)
		{
			page_title = "正在下载QQLive播放器";
		}
		else
		{
			page_title = "版本过低，正在升级QQLive播放器";
		}
	}
	catch(e)
	{
		page = PAGE_ERROR;
		page_title = "自动安装QQLive播放器失败";
	}

	try
	{
		document.getElementById("UISWF").showPanel(page);
		document.getElementById("UISWF").changePanelTitle(page_title);
	}
	catch(e)
	{
	}
}
// 下载结束

function Fresh()
{
	window.location.reload();
}

var curSSO;
function RunQQLive()
{
	window.location.href = curSSO;
}

function JumpUrl()
{
	window.location.href = MEDIAPLAYER_DOWNLOAD_URL;
}

function QQLiveObject(vWidth, vHeight)
{
	this.width = vWidth;
	this.height = vHeight;
	this.ocxParams = new qqliveOcxParams();
	this.callback = null;
}

QQLiveObject.prototype.addParam = function(strName, strValue)
{
	if(this.getParam(strName) != null)
	{
		this.setParam(strName, strValue);
	}
	else
	{
		this.ocxParams[this.ocxParams.count] = new qqliveOcxParam(strName, strValue);
		this.ocxParams.count++;
	}
}

QQLiveObject.prototype.setParam = function(strName, strValue)
{
	var nParamCount = this.ocxParams.count;
	for (i = 0; i < nParamCount; i++)
	{
		var vParam = this.ocxParams[i];
		if (vParam != null && vParam.Name == strName)
		{
			vParam.Value = strValue;
			break;
		}
	}
}

QQLiveObject.prototype.setClientLink = function(strValue)
{
	curSSO = strValue;
}

QQLiveObject.prototype.getParam = function(strName)
{
	var strValue = null;
	var nParamCount = this.ocxParams.count;
	for (i = 0; i < nParamCount; i++)
	{
		var vParam = this.ocxParams[i];
		if (vParam != null && vParam.Name == strName)
		{
			strValue = vParam.Value;
			break;
		}
	}
	return strValue;
}

QQLiveObject.prototype.getSSO = function()
{
	var sso;
	var ssoHead = "qqlive://sso/";
	var url = this.getParam("URL");
	if(url == null)
	{
		sso = ssoHead;
	}
	else
	{
		if(url.indexOf(ssoHead)==0)
		{
			sso = url;
		}
		else
		{
			sso = ssoHead;
			var type = this.getParam("Type");
			switch (type)
			{
				case "1":
					sso += "projectid=";
					sso += url;
				break;
				case "2":
					sso += "videoid=";
					sso += url;
				break;
			}
		}
	}
	return sso;
}

IsInstall = function()
{
	try
	{
		var oDlder=new ActiveXObject(PROGID_QQLIVE_INSTALLER);
		oDlder=null;
		return true;
	}
	catch(e)
	{
		return false;
	}
}

var checkTimer;
CheckInstall = function()
{
	if(IsInstall())
	{
		clearInterval(checkTimer);
		checkTimer = null;
		var bVerUsable = CheckVersion();
		if(!bVerUsable)
		{
			Download();
		}
		else
		{
			window.location.reload();
		}		
	}
}

GetVersion = function()
{
	var objInstaller = null;
	try
	{
		objInstaller = new ActiveXObject(PROGID_QQLIVE_INSTALLER);
	}
	catch(e)
	{
		return 0;
	}
	
	var nVer = 0;
	try
	{
		nVer = objInstaller.GetVersion();
	}
	catch(e)
	{
		nVer = 0;
	}
	objInstaller = null;
	return nVer;
}

CheckVersion = function()
{
	var nVer = GetVersion();

	var strVer;
	var nMain = parseInt(nVer / 10000 / 100);
	var nSub = parseInt(nVer / 10000) - nMain * 100;
	var nReleaseNO = parseInt(nVer) - (nMain * 100 * 10000 + nSub * 10000);
	strVer = nMain + "." + nSub + "." + nReleaseNO;
	// alert(strVer);

	if (compareVersions(strVer, VER_QQLIVE) < 0)
	{
		return false;
	}
	else
	{
		return true;
	}
}

getFlash = function()
{
	var f="-1",n=navigator;
	if(n.plugins&&n.plugins.length)
	{
		for(var ii=0;ii<n.plugins.length;ii++)
		{
			if(n.plugins[ii].name.indexOf('Shockwave Flash')!=-1)
			{
				f=n.plugins[ii].description.split('Shockwave Flash ')[1];
				break;
			}
		}
	}
	else if(window.ActiveXObject)
	{
		for(var ii=10;ii>=2;ii--)
		{
			try
			{
				var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");
				if(fl)
				{
					f=ii+'.0';break;
				}
			}
			catch(e)
			{
			}
		}
	}
	if(f=="-1")
		return f;
	else 
		return f.substring(0,f.indexOf(".")+2);
}

QQLiveObject.prototype.destroy = function()
{
	if(window.ActiveXObject && objQQLiveInstaller)
	{
		try
		{
			objQQLiveInstaller.Destroy();
		}
		catch(e)
		{
		}
	}
}

QQLiveObject.prototype.AttachOnMsgEvent = function()
{
	//控件创建好了
	try
	{
		var self = this;
		document.getElementById("QQLiveOcx").attachEvent("OnMsg", function(id, url)
		{
			if(id == 1100)
			{
				if(typeof(self.callback)=="function")
				{
					self.callback(url);
				}
			}
		});
	}
	catch(e)
	{
	}
}

QQLiveObject.prototype.write = function(vElementId)
{
	var oldMode = arguments.length > 1 ? arguments[1] : true;
	
	document.body.onbeforeunload = this.destroy;
	// 安装控件
	var strHtml = "";
	document.getElementById(vElementId).style.backgroundColor="#000000";
	
	var isFlash9=getFlash().split('.')[0]>=9;
	var bIE = !!window.ActiveXObject;
	if(!isFlash9)
	{
			strHtml +="<div style=\"position:relative;height:" + this.height + "px;width:" + this.width + "px;font-size:12px;border:1px solid #000000;background:#000000;\">"
			strHtml +="<div style=\"position:absolute;top:50%;left:50%;width:300px;height:85px;margin:-40px 0 0 -150px;text-align:left; overflow:hidden;\">"
			strHtml +="<h1 style=\"height:40px;margin:0 0 0 0;padding:0;color:#FF9902;font-size:18px;font-weight:bold;\">您尚未安装Flash播放器或版本过低</h1>"
			strHtml +="<p style=\"height:26px;margin:0;padding:0;color:#a0a0a0;\">请点击<a href=\"##\" onclick=\"window.location.href='"
			if(bIE)
			{
				strHtml += FLASH_SETUP_AX;
			}
			else
			{
				strHtml += FLASH_SETUP_PLUGIN;
			}
			strHtml +="'\" style=\"margin:0 3px;color:#FF9902;text-decoration:underline;\">下载到本地</a>，然后手动安装Flash播放器</p>"
			strHtml +="<p style=\"height:14px;margin:0;padding:0;color:#a0a0a0;\">（安装完成后，请点击<a href=\"##\" onclick=\"javascript:window.location.reload()\" style=\"margin:0 3px;color:#FF9902;text-decoration:underline;\">刷新</a>该页面）</p>"
			strHtml +="</div>"
			strHtml +="</div>"

		document.getElementById(vElementId).innerHTML = strHtml;
		return false;
	}

	// 判断版本
	if(bIE)
	{
		if(oldMode)
		{
			strHtml += "<OBJECT style=\"display:none;\" classid=\"clsid:1DABF8D5-8430-4985-9B7F-A30E53D709B3\" codebase=\"" + QQLIVE_INSTALLER_CAB + "\" ID=QLiveInstaller></OBJECT>";
			strHtml += "<table cellpading=0 cellspacing=0 width=" + this.width + " height=" + this.height + " bgcolor=#000000><tr><td><div id=_qqlivecontent></div></td></tr></table>";
			document.getElementById(vElementId).innerHTML = strHtml;
			vElementId = "_qqlivecontent";
		}
	}
	else
	{
		curSSO = this.getSSO();
	}

	var bInstall = IsInstall();
	var bVerUsable = CheckVersion();
	if (!bIE || !bInstall || !bVerUsable)
	{
		strHtml = "";
		strHtml += "<OBJECT ID=\"UISWF\" CLASSID=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" codebase=\"" + FLASH_CAB + "\" width=\"" +this.width+ "\" height=\""+ this.height +"\"  >\n";
		strHtml += " <param name=\"movie\" value=\""+ QQLIVE_SWF_PATH + QQLIVE_SWF_SKIN+ "download_guide.swf\" />\n";
		strHtml += " <param name=\"allowscriptaccess\" value=\"always\"/>\n"
		strHtml += " <param name=\"wmode\" value=\"transparent\">";
		strHtml += " <embed src=\""+ QQLIVE_SWF_PATH + QQLIVE_SWF_SKIN + "download_guide.swf\"" + " width=\"" +this.width+ "\" height=\""+ this.height +"\" quality=\"high\" allowscriptaccess=\"always\" wmode=\"transparent\" name = \"UISWF\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\"></embed>";
		strHtml += " </OBJECT>\n";
		document.getElementById(vElementId).innerHTML = strHtml;
		if(oldMode)
		{
			if(!bInstall && checkTimer == null)
			{
				checkTimer = setInterval(CheckInstall, 500);
			}
		}
	}
	else
	{
		strHtml = "<Object id=QQLiveOcx width=" + this.width;
		strHtml += " height=" + this.height;
		strHtml += " classid=CLSID:11F2A418-94B2-4E16-9B0C-B00C0435F903";
		strHtml += " standby=\"Loading Tencent QQ视频 componets...\">";
		
		// 添加属性
		var nParamCount = this.ocxParams.count;
		for (i = 0; i < nParamCount; i++)
		{
			var vParam = this.ocxParams[i];
			if (vParam != null)
			{
					strHtml += " <PARAM NAME=\"" + vParam.Name + "\" VALUE=\"" + vParam.Value + "\">";
		}
		}
		strHtml += " </Object>";
		document.getElementById(vElementId).innerHTML = strHtml;	
		
		this.AttachOnMsgEvent();
	}
}

QQLiveObject.prototype.play = function(vElementId)
{
	var oldMode = false;
	this.write(vElementId, oldMode);
}

QQLiveObject.prototype.getCtrl = function()
{
	return document.getElementById("QQLiveOcx");
}

function OnOk()
{
	//没有安装install控件
	if(!window.ActiveXObject)
	{
			try{
				document["UISWF"].showPanel(PAGE_NONSUPPORT);
				document["UISWF"].changePanelTitle("该浏览器暂不支持QQLive播放器");
			}
			catch(e)
			{
			}
	}
	else
	{
		if(!IsInstall())
		{
			try{
				document.getElementById("UISWF").showPanel(PAGE_START);
				document.getElementById("UISWF").changePanelTitle("请按照以下提示安装QQLive播放器");
			}
			catch(e)
			{
			}	
		}
		else if(!CheckVersion())
		{
			//安装了控件，但是没有安装客户端||客户端版本过期
			Download();		
		}
	}
}

function createQQLive(vElementId)
{
	var vQQLive = new qqlive();
	vQQLive.Create(vElementId);
	return vQQLive;
}
