diff --git a/hkws/webs/cn.zip b/hkws/webs/cn.zip new file mode 100644 index 0000000000..3970fcd126 Binary files /dev/null and b/hkws/webs/cn.zip differ diff --git a/hkws/webs/cn/demo-iframe.html b/hkws/webs/cn/demo-iframe.html new file mode 100644 index 0000000000..30e111e939 --- /dev/null +++ b/hkws/webs/cn/demo-iframe.html @@ -0,0 +1,25 @@ + + + + + + + + + + +
+ + +
+ + + \ No newline at end of file diff --git a/hkws/webs/cn/demo.html b/hkws/webs/cn/demo.html new file mode 100644 index 0000000000..341d9ab3b0 --- /dev/null +++ b/hkws/webs/cn/demo.html @@ -0,0 +1,481 @@ + + + + + + + + + + + +
+
+ +
+ 登录 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IP地址端口号
用户名密码
设备端口(可选参数) + 窗口分割数  + +
RTSP端口(可选参数)
+ + + +
已登录设备 + + 通道列表 + +
+ + + + + + + +
+ +
+
+
+ 数字通道 + + + + + + + +
+
+
+
+
+
+
+ 本地配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
播放性能 + + 图像尺寸 + +
规则信息 + + 叠加POS信息 + +
录像文件打包大小 + + 协议类型 + +
抓图文件格式 + +
码流秘钥 + +
录像文件保存路径 
回放下载保存路径 
预览抓图保存路径 
回放抓图保存路径 
回放剪辑保存路径 
   修改参数后,需要刷新界面后生效。
+
+
+
+
+ 预览 + + + + + + + + + + + + + + + + + + + + + + +
码流类型 + +
音量 +  (范围:0~100) + + + +
对讲通道 + + + + + +
+ + + + +
+ + + + + +
+
+
+ 绘图 + + + + + + + + + + +
+ + +
+ 图形ID: + 名称: +
+ + + + + +
+
+
+ 云台控制 + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + +
云台速度 + +
预置点号
+ + +
+ + + + + + + + + + + + + +
+
+
+ 回放 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
码流类型 + +
开始时间 + (时间格式:2013-11-11 12:34:56) +
结束时间 + + + +
按时间下载开始时间 + (时间格式:2013-11-11 12:34:56) +
按时间下载结束时间 + + (相机不支持) +
+
+
+
+
+ + + + +  启用转码码流 +
+ + + + +
+ + + +   +
+
+
+ 系统维护 + + + + + + + + + + + + + +
+ + +
+ + +
+    +
+    +
+
+
+
+
+ 操作信息 +
+
+
+ 事件回调信息 +
+
+
+ + + + + \ No newline at end of file diff --git a/hkws/webs/cn/demo.js b/hkws/webs/cn/demo.js new file mode 100644 index 0000000000..1b52cb2fa4 --- /dev/null +++ b/hkws/webs/cn/demo.js @@ -0,0 +1,2031 @@ +// 初始化插件 + +// 全局保存当前选中窗口 +var g_iWndIndex = 0; //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口 +var g_oLocalConfig = null; //本地配置 + +//错误码 +//通用错误 +var ERROR_CODE_UNKNOWN = 1000; //未知错误 +var ERROR_CODE_NETWORKERROR = 1001; //网络错误 +var ERROR_CODE_PARAMERROR = 1002; //缺少插件元素 + +//登录模块 +var ERROR_CODE_LOGIN_NOLOGIN = 2000; // 未登录 +var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; //设备已登录,重复登录 +var ERROR_CODE_LOGIN_NOSUPPORT = 2002; //当前设备不支持Digest登录 + +//预览播放 +var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; //插件初始化失败 +var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; //当前窗口已经在预览 +var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; //回放异常 +var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; //回放停止 +var ERROR_CODE_PLAY_NOFREESPACE = 3004; //录像过程中,硬盘容量不足 + +//对讲 +var ERROR_CODE_TALK_FAIL = 5000; //语音对讲失败 + + +var version="V3.3.0build20230322" +$(function () { + // 初始化插件参数及插入插件 + WebVideoCtrl.I_InitPlugin({ + bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持 + iWndowType: 1, + // aIframe: ["test"], + cbSelWnd: function (xmlDoc) { + g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10); + var szInfo = "当前选择的窗口编号:" + g_iWndIndex; + showCBInfo(szInfo); + }, + cbDoubleClickWnd: function (iWndIndex, bFullScreen) { + var szInfo = "当前放大的窗口编号:" + iWndIndex; + if (!bFullScreen) { + szInfo = "当前还原的窗口编号:" + iWndIndex; + } + showCBInfo(szInfo); + }, + cbEvent: function (iEventType, iParam1, iParam2) { + if (2 == iEventType) {// 回放正常结束 + showCBInfo("窗口" + iParam1 + "回放结束!"); + } else if (-1 == iEventType) { + showCBInfo("设备" + iParam1 + "网络错误!"); + } else if (3001 == iEventType) { + clickStopRecord(g_szRecordType, iParam1); + } + }, + cbInitPluginComplete: function () { + WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(() => { + // 检查插件是否最新 + WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => { + if (bFlag) { + alert("检测到新的插件版本,双击开发包目录里的HCWebSDKPlugin.exe升级!"); + } + }); + }, () => { + alert("插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPlugin.exe安装!"); + }); + } + }); + + // 窗口事件绑定 + $(window).bind({ + resize: function () { + //WebVideoCtrl.I_Resize($("body").width(), $("body").height()); + } + }); + + //初始化日期时间 + var szCurTime = dateFormat(new Date(), "yyyy-MM-dd"); + $("#starttime").val(szCurTime + " 00:00:00"); + $("#endtime").val(szCurTime + " 23:59:59"); + $("#downloadstarttime").val(szCurTime + " 00:00:00"); + $("#downloadendtime").val(szCurTime + " 23:59:59"); + setTimeout(() => { + clickLogin() + + },1000) +}); + +// 显示操作信息 +function showOPInfo(szInfo, status, xmlDoc) { + var szTip = "
" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo; + if (typeof status != "undefined" && status != 200) { + var szStatusString = $(xmlDoc).find("statusString").eq(0).text(); + var szSubStatusCode = $(xmlDoc).find("subStatusCode").eq(0).text(); + if ("" === szSubStatusCode) { + if("" === szSubStatusCode && "" === szStatusString){ + szTip += "(" + status + ")"; + } + else{ + szTip += "(" + status + ", " + szStatusString + ")"; + } + } else { + szTip += "(" + status + ", " + szSubStatusCode + ")"; + } + } + szTip += "
"; + + $("#opinfo").html(szTip + $("#opinfo").html()); +} + +// 显示回调信息 +function showCBInfo(szInfo) { + szInfo = "
" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "
"; + $("#cbinfo").html(szInfo + $("#cbinfo").html()); +} + +// 格式化时间 +function dateFormat(oDate, fmt) { + var o = { + "M+": oDate.getMonth() + 1, //月份 + "d+": oDate.getDate(), //日 + "h+": oDate.getHours(), //小时 + "m+": oDate.getMinutes(), //分 + "s+": oDate.getSeconds(), //秒 + "q+": Math.floor((oDate.getMonth() + 3) / 3), //季度 + "S": oDate.getMilliseconds()//毫秒 + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length)); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + } + } + return fmt; +} + +// 获取窗口尺寸 +function getWindowSize() { + var nWidth = $(this).width() + $(this).scrollLeft(), + nHeight = $(this).height() + $(this).scrollTop(); + + return {width: nWidth, height: nHeight}; +} + +// 打开选择框 0:文件夹 1:文件 +function clickOpenFileDlg(id, iType) { + WebVideoCtrl.I_OpenFileDlg(iType).then(function(szDirPath){ + if (szDirPath != -1 && szDirPath != "" && szDirPath != null) { + $("#" + id).val(szDirPath); + } + }, function() { + showOPInfo("打开文件路径失败"); + }); +} + +// 获取本地参数 +function clickGetLocalCfg() { + WebVideoCtrl.I_GetLocalCfg().then((oLocalConfig) => { + g_oLocalConfig = oLocalConfig; + $("#netsPreach").val(oLocalConfig.buffNumberType); + $("#wndSize").val(oLocalConfig.playWndType); + $("#rulesInfo").val(oLocalConfig.ivsMode); + $("#captureFileFormat").val(oLocalConfig.captureFileFormat); + $("#packSize").val(oLocalConfig.packgeSize); + $("#recordPath").val(oLocalConfig.recordPath); + $("#downloadPath").val(oLocalConfig.downloadPath); + $("#previewPicPath").val(oLocalConfig.capturePath); + $("#playbackPicPath").val(oLocalConfig.playbackPicPath); + $("#devicePicPath").val(oLocalConfig.deviceCapturePath); + $("#playbackFilePath").val(oLocalConfig.playbackFilePath); + $("#protocolType").val(oLocalConfig.protocolType); + $("#ivsMode").val(oLocalConfig.ivsMode); + $("#backOverlay").val(oLocalConfig.backOverlay); + $("#secretKey").val("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F"); + showOPInfo("本地配置获取成功!"); + }, (oError) => { + var szInfo = "本地配置获取失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 设置本地参数 +async function clickSetLocalCfg() { + g_oLocalConfig.buffNumberType = $("#netsPreach").val(); + g_oLocalConfig.playWndType = $("#wndSize").val(); + g_oLocalConfig.ivsMode = $("#rulesInfo").val(); + g_oLocalConfig.captureFileFormat = $("#captureFileFormat").val(); + g_oLocalConfig.packgeSize = $("#packSize").val(); + g_oLocalConfig.recordPath = $("#recordPath").val(); + g_oLocalConfig.downloadPath = $("#downloadPath").val(); + g_oLocalConfig.capturePath = $("#previewPicPath").val(); + g_oLocalConfig.playbackPicPath = $("#playbackPicPath").val(); + g_oLocalConfig.deviceCapturePath = $("#devicePicPath").val(); + g_oLocalConfig.playbackFilePath = $("#playbackFilePath").val(); + g_oLocalConfig.protocolType = $("#protocolType").val(); + g_oLocalConfig.ivsMode = $("#ivsMode").val(); + g_oLocalConfig.backOverlay = $("#backOverlay").val(); + if ("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F" !== $("#secretKey").val()) { + g_oLocalConfig.secretKey = await WebVideoCtrl.I_GetEncryptString($("#secretKey").val()); + } + WebVideoCtrl.I_SetLocalCfg(g_oLocalConfig).then(() => { + showOPInfo("本地配置设置成功!"); + }, (oError) => { + var szInfo = "本地配置设置失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 窗口分割数 +function changeWndNum(iType) { + if ("1*2" === iType || "2*1" === iType) { + WebVideoCtrl.I_ArrangeWindow(iType).then(() => { + showOPInfo("窗口分割成功!"); + }, (oError) => { + var szInfo = "窗口分割失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); + } else { + iType = parseInt(iType, 10); + WebVideoCtrl.I_ChangeWndNum(iType).then(() => { + showOPInfo("窗口分割成功!"); + }, (oError) => { + var szInfo = "窗口分割失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 登录 +function clickLogin() { + +// let aa = window.location.search.substr(1); +// let bb = aa.split('&') +// var szIP = bb?.[0]?.split('=')[1], +// szPort = bb?.[3]?.split('=')[1], +// szUsername = bb?.[1]?.split('=')[1], +// szPassword = bb?.[2]?.split('=')[1]; +// http://127.0.0.1/cn/demo.html?ip=192.168.1.51&user=admin&password=zaq12wsx&dk=80 + + var patams = new URLSearchParams(location.search); + document.getElementById("loginip").value = patams.get("ip"); + document.getElementById("port").value = patams.get("dk"); + document.getElementById("username").value = patams.get("user"); + document.getElementById("password").value = patams.get("password"); + console.log("patams:",patams) + + var szIP = $("#loginip").val(), + szPort = $("#port").val(), + szUsername = $("#username").val(), + szPassword = $("#password").val(); + + if ("" == szIP || "" == szPort) { + return; + } + + var szDeviceIdentify = szIP + "_" + szPort; + WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, { + timeout: 3000, + success: function (xmlDoc) { + showOPInfo(szDeviceIdentify + " 登录成功!"); + $("#ip").prepend(""); + setTimeout(function () { + $("#ip").val(szDeviceIdentify); + setTimeout(function() { + getChannelInfo(); + }, 1000); + getDevicePort(); + + }, 10); + }, + error: function (oError) { + if (ERROR_CODE_LOGIN_REPEATLOGIN === status) { + showOPInfo(szDeviceIdentify + " 已登录过!"); + } else { + showOPInfo(szDeviceIdentify + " 登录失败!", oError.errorCode, oError.errorMsg); + } + } + }); +} + +// 退出 +function clickLogout() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_Logout(szDeviceIdentify).then(() => { + showOPInfo(szDeviceIdentify + " " + "退出成功!"); + }, () => { + showOPInfo(szDeviceIdentify + " " + "退出失败!"); + }); +} + +// 获取设备信息 +function clickGetDeviceInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetDeviceInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var arrStr = []; + arrStr.push("设备名称:" + $(xmlDoc).find("deviceName").eq(0).text() + "\r\n"); + arrStr.push("设备ID:" + $(xmlDoc).find("deviceID").eq(0).text() + "\r\n"); + arrStr.push("型号:" + $(xmlDoc).find("model").eq(0).text() + "\r\n"); + arrStr.push("设备序列号:" + $(xmlDoc).find("serialNumber").eq(0).text() + "\r\n"); + arrStr.push("MAC地址:" + $(xmlDoc).find("macAddress").eq(0).text() + "\r\n"); + arrStr.push("主控版本:" + $(xmlDoc).find("firmwareVersion").eq(0).text() + " " + $(xmlDoc).find("firmwareReleasedDate").eq(0).text() + "\r\n"); + arrStr.push("编码版本:" + $(xmlDoc).find("encoderVersion").eq(0).text() + " " + $(xmlDoc).find("encoderReleasedDate").eq(0).text() + "\r\n"); + + showOPInfo(szDeviceIdentify + " 获取设备信息成功!"); + alert(arrStr.join("")); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 获取设备信息失败!", oError.errorCode, oError.errorMsg); + } + }); +} + +// 获取通道 +function getChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + oSel = $("#channels").empty(); + + if (null == szDeviceIdentify) { + return; + } + + // 模拟通道 + WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("VideoInputChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " 获取模拟通道成功!"); + //自动显示画面 + clickStartRealPlay() + + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 获取模拟通道失败!", oError.errorCode, oError.errorMsg); + } + }); + // 数字通道 + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(), + online = $(this).find("online").eq(0).text(); + if ("false" == online) {// 过滤禁用的数字通道 + return true; + } + if ("" == name) { + name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " 获取数字通道成功!"); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 获取数字通道失败!", oError.errorCode, oError.errorMsg); + } + }); + // 零通道 + WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("ZeroVideoChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + if ("true" == $(this).find("enabled").eq(0).text()) {// 过滤禁用的零通道 + oSel.append(""); + } + }); + showOPInfo(szDeviceIdentify + " 获取零通道成功!"); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 获取零通道失败!", oError.errorCode, oError.errorMsg); + } + }); +} + +// 获取端口 +function getDevicePort() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then((oPort) => { + $("#deviceport").val(oPort.iDevicePort); + $("#rtspport").val(oPort.iRtspPort); + + showOPInfo(szDeviceIdentify + " 获取端口成功!"); + }, (oError) => { + var szInfo = "获取端口失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 获取数字通道 +async function clickGetDigitalChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + iAnalogChannelNum = 0; + + $("#digitalchannellist").empty(); + + if (null == szDeviceIdentify) { + return; + } + + // 模拟通道 + try { + var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {}); + iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length; + } finally { + // 数字通道 + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function () { + var id = parseInt($(this).find("id").eq(0).text(), 10), + ipAddress = $(this).find("ipAddress").eq(0).text(), + srcInputPort = $(this).find("srcInputPort").eq(0).text(), + managePortNo = $(this).find("managePortNo").eq(0).text(), + online = $(this).find("online").eq(0).text(), + proxyProtocol = $(this).find("proxyProtocol").eq(0).text(); + + var objTr = $("#digitalchannellist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.innerHTML = (id - iAnalogChannelNum) < 10 ? "D0" + (id - iAnalogChannelNum) : "D" + (id - iAnalogChannelNum); + objTd = objTr.insertCell(1); + objTd.width = "25%"; + objTd.innerHTML = ipAddress; + objTd = objTr.insertCell(2); + objTd.width = "15%"; + objTd.innerHTML = srcInputPort; + objTd = objTr.insertCell(3); + objTd.width = "20%"; + objTd.innerHTML = managePortNo; + objTd = objTr.insertCell(4); + objTd.width = "15%"; + objTd.innerHTML = "true" == online ? "在线" : "离线"; + objTd = objTr.insertCell(5); + objTd.width = "25%"; + objTd.innerHTML = proxyProtocol; + }); + showOPInfo(szDeviceIdentify + " 获取数字通道成功!"); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 没有数字通道!", oError.errorCode, oError.errorMsg); + } + }); + } +} +// 开始预览 +function clickStartRealPlay(iStreamType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + szInfo = ""; + + if ("undefined" === typeof iStreamType) { + iStreamType = parseInt($("#streamtype").val(), 10); + } + + if (null == szDeviceIdentify) { + return; + } + var startRealPlay = function () { + WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, { + iStreamType: iStreamType, + iChannelID: iChannelID, + bZeroChannel: bZeroChannel, + iPort: iRtspPort, + success: function () { + szInfo = "开始预览成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 开始预览失败!", oError.errorCode, oError.errorMsg); + } + }); + }; + + if (oWndInfo != null) {// 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + startRealPlay(); + } + }); + } else { + startRealPlay(); + } +} +function destroyPlugin() { + WebVideoCtrl.I_DestroyPlugin().then(() => { + showOPInfo('清除成功!') + }).catch(() => { + showOPInfo('清除失败!') + }) + +} +function showPlugin() { + WebVideoCtrl.I_ShowPlugin().then(() => { + showOPInfo('展示成功!') + }).catch(() => { + showOPInfo('展示失败!') + }) + +} +function hidPlugin() { + WebVideoCtrl.I_HidPlugin().then(() => { + showOPInfo('隐藏成功!') + }).catch(() => { + showOPInfo('隐藏失败!') + }) + +} +function setTextOverlay() { + var szDeviceIdentify = $("#ip").val(); + var szInfo = ""; + var that = this; + var iChannelID = parseInt($("#channels").val(), 10); + var szUrl = "ISAPI/System/Video/inputs/channels/" + iChannelID + "/overlays"; + WebVideoCtrl.I_GetTextOverlay(szUrl,szDeviceIdentify,{ + success:function(data){ + $(data).find("TextOverlay").eq(0).find("displayText").eq(0).text("我tet"); + $(data).find("TextOverlay").eq(0).find("positionX").eq(0).text("20"); + $(data).find("TextOverlay").eq(0).find("positionY").eq(0).text("30"); + var xmldoc = toXMLStr(data); + var newOptions = { + type: "PUT", + data: xmldoc, + success: function(){ + szInfo = "绘制osd信息成功"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function(oError){ + showOPInfo(szDeviceIdentify + " 设置osd信息失败!", oError.errorCode, oError.errorMsg); + } + }; + + WebVideoCtrl.I_SendHTTPRequest(szDeviceIdentify,szUrl,newOptions); + }, + error: function(oError){ + showOPInfo(szDeviceIdentify + " 设置osd信息失败!", oError.errorCode, oError.errorMsg); + } + }); + } +// 停止预览 +function clickStopRealPlay() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "停止预览成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 停止预览失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 打开声音 +function clickOpenSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var allWndInfo = WebVideoCtrl.I_GetWindowStatus(); + // 循环遍历所有窗口,如果有窗口打开了声音,先关闭 + for (var i = 0, iLen = allWndInfo.length; i < iLen; i++) { + oWndInfo = allWndInfo[i]; + if (oWndInfo.bSound) { + WebVideoCtrl.I_CloseSound(oWndInfo.iIndex); + break; + } + } + + WebVideoCtrl.I_OpenSound().then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "打开声音成功!"); + }, (oError) => { + var szInfo = " 打开声音失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 关闭声音 +function clickCloseSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_CloseSound().then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "关闭声音成功!"); + }, (oError) => { + var szInfo = " 关闭声音失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 设置音量 +function clickSetVolume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iVolume = parseInt($("#volume").val(), 10), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_SetVolume(iVolume).then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "设置音量成功"); + }, (oError) => { + var szInfo = " 设置音量失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 抓图 +async function clickCapturePic(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var oLocalConfig = await WebVideoCtrl.I_GetLocalCfg(); + var szCaptureFileFormat = "0"; + if (oLocalConfig) { + szCaptureFileFormat = oLocalConfig.captureFileFormat; + } + + var szChannelID = $("#channels").val(); + var szPicName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + //如果是回放抓图,需要增加如下前缀:"playback_" + if ("playback" === szType) { + szPicName = "playback_" + oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + } + + szPicName += ("0" === szCaptureFileFormat) ? ".jpg": ".bmp"; + + WebVideoCtrl.I_CapturePic(szPicName, { + bDateDir: true //是否生成日期文件 + }).then(function(){ + szInfo = "抓图成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, function(oError){ + szInfo = " 抓图失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} +// 抓图 +function clickCapturePicData() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + if (oWndInfo != null) { + WebVideoCtrl.I_CapturePicData().then(function(data){ + console.log(data); + szInfo = "抓图上传成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + },function(){ + szInfo = "抓图失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }); + } +} + +// 开始录像 +var g_szRecordType = ""; +function clickStartRecord(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + g_szRecordType = szType; + + if (oWndInfo != null) { + var szChannelID = $("#channels").val(), + szFileName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + + WebVideoCtrl.I_StartRecord(szFileName, { + bDateDir: true, //是否生成日期文件 + success: function () { + if ('realplay' === szType) { + szInfo = "开始录像成功!"; + } else if ('playback' === szType) { + szInfo = "开始剪辑成功!"; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ('realplay' === szType) { + szInfo = " 开始录像失败!"; + } else if ('playback' === szType) { + szInfo = " 开始剪辑失败!"; + } + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 停止录像 +function clickStopRecord(szType, iWndIndex) { + if ("undefined" === typeof iWndIndex) { + iWndIndex = g_iWndIndex; + } + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_StopRecord({ + success: function () { + if ('realplay' === szType) { + szInfo = "停止录像成功!"; + } else if ('playback' === szType) { + szInfo = "停止剪辑成功!"; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ('realplay' === szType) { + szInfo = "停止录像失败!"; + } else if ('playback' === szType) { + szInfo = "停止剪辑失败!"; + } + sshowOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 获取对讲通道 +function clickGetAudioInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetAudioInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oAudioChannels = $(xmlDoc).find("TwoWayAudioChannel"), + oSel = $("#audiochannels").empty(); + $.each(oAudioChannels, function () { + var id = $(this).find("id").eq(0).text(); + + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " 获取对讲通道成功!"); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 获取对讲通道失败!", oError.errorCode, oError.errorMsg); + } + }); +} + +// 开始对讲 +function clickStartVoiceTalk() { + var szDeviceIdentify = $("#ip").val(), + iAudioChannel = parseInt($("#audiochannels").val(), 10), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (isNaN(iAudioChannel)) { + alert("请选择对讲通道!"); + return; + } + + WebVideoCtrl.I_StartVoiceTalk(szDeviceIdentify, iAudioChannel).then(() => { + szInfo = "开始对讲成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + var szInfo = " 开始对讲失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 停止对讲 +function clickStopVoiceTalk() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_StopVoiceTalk().then(() => { + szInfo = "停止对讲成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + var szInfo = " 停止对讲失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 启用电子放大 +function clickEnableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_EnableEZoom().then(() => { + szInfo = "启用电子放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "启用电子放大失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + + }); + } +} + +// 禁用电子放大 +function clickDisableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_DisableEZoom().then(() => { + szInfo = "禁用电子放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "禁用电子放大失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 启用3D放大 +function clickEnable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Enable3DZoom().then(() => { + szInfo = "启用3D放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "启用3D放大失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 禁用3D放大 +function clickDisable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Disable3DZoom().then(() => { + szInfo = "禁用3D放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "禁用3D放大失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// 全屏 +function clickFullScreen() { + WebVideoCtrl.I_FullScreen(true).then(() => { + showOPInfo("全屏成功"); + }, (oError) => { + showOPInfo("全屏失败!", oError.errorCode, oError.errorMsg); + }); +} + +// PTZ控制 9为自动,1,2,3,4,5,6,7,8为方向PTZ +var g_bPTZAuto = false; +function mouseDownPTZControl(iPTZIndex) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iPTZSpeed = $("#ptzspeed").val(); + + if (bZeroChannel) {// 零通道不支持云台 + return; + } + + if (oWndInfo != null) { + if (9 == iPTZIndex && g_bPTZAuto) { + iPTZSpeed = 0;// 自动开启后,速度置为0可以关闭自动 + } else { + g_bPTZAuto = false;// 点击其他方向,自动肯定会被关闭 + } + + WebVideoCtrl.I_PTZControl(iPTZIndex, false, { + iPTZSpeed: iPTZSpeed, + success: function (xmlDoc) { + if (9 == iPTZIndex && g_bPTZAuto) { + showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!"); + } else { + showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台成功!"); + } + if (9 == iPTZIndex) { + g_bPTZAuto = !g_bPTZAuto; + } + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 方向PTZ停止 +function mouseUpPTZControl() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(1, true, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 设置预置点 +function clickSetPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_SetPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 调用预置点 +function clickGoPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_GoPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 搜索录像 +var g_iSearchTimes = 0; +function clickRecordSearch(iType) { + var szDeviceIdentify = $("#ip").val(), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iStreamType = parseInt($("#record_streamtype").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(); + if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) { + alert("开始时间大于结束时间"); + return; + } + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// 零通道不支持录像搜索 + return; + } + + if (0 == iType) {// 首次搜索 + $("#searchlist").empty(); + g_iSearchTimes = 0; + } + + //如果是前端设备,需要将搜索时间转换为UTC时间 + WebVideoCtrl.I_RecordSearch(szDeviceIdentify, iChannelID, szStartTime, szEndTime, { + iStreamType: iStreamType, + iSearchPos: g_iSearchTimes, + success: function (xmlDoc) { + if ("MORE" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + for(var i = 0, nLen = $(xmlDoc).find("searchMatchItem").length; i < nLen; i++) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if(szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size=")); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = "下载"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI); + ++g_iSearchTimes; + } + + clickRecordSearch(1);// 继续搜索 + } else if ("OK" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + var iLength = $(xmlDoc).find("searchMatchItem").length; + for(var i = 0; i < iLength; i++) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if(szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size=")); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = "下载"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI); + ++g_iSearchTimes; + } + showOPInfo(szDeviceIdentify + " 搜索录像文件成功!"); + } else if("NO MATCHES" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + setTimeout(function() { + g_iSearchTimes = 0; + showOPInfo(szDeviceIdentify + " 没有录像文件!"); + }, 50); + } + }, + error: function (oError) { + g_iSearchTimes = 0; + showOPInfo(szDeviceIdentify + " 搜索录像文件失败!", oError.errorCode, oError.errorMsg); + } + }); +} + +// 开始回放 +function clickStartPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = "", + bChecked = $("#transstream").prop("checked"), + iRet = -1; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// 零通道不支持回放 + return; + } + + var startPlayback = function () { + if (bChecked) {// 启用转码回放 + var oTransCodeParam = { + TransFrameRate: "14",// 0:全帧率,5:1,6:2,7:4,8:6,9:8,10:10,11:12,12:16,14:15,15:18,13:20,16:22 + TransResolution: "1",// 255:Auto,3:4CIF,2:QCIF,1:CIF + TransBitrate: "19"// 2:32K,3:48K,4:64K,5:80K,6:96K,7:128K,8:160K,9:192K,10:224K,11:256K,12:320K,13:384K,14:448K,15:512K,16:640K,17:768K,18:896K,19:1024K,20:1280K,21:1536K,22:1792K,23:2048K,24:3072K,25:4096K,26:8192K + }; + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + oTransCodeParam: oTransCodeParam, + success: function () { + szInfo = "开始回放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "开始回放失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } else { + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + success: function () { + szInfo = "开始回放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "开始回放失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } + }; + + if (oWndInfo != null) {// 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + startPlayback(); + } + }); + } else { + startPlayback(); + } +} + +// 停止回放 +function clickStopPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "停止回放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "停止回放失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 开始倒放 +function clickReversePlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// 零通道不支持倒放 + return; + } + + var reversePlayback = function () { + WebVideoCtrl.I_ReversePlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime + }).then(() => { + szInfo = "开始倒放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "开始倒放失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + }; + + if (oWndInfo != null) {// 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + reversePlayback(); + } + }); + } else { + reversePlayback(); + } +} + +// 单帧 +function clickFrame() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Frame({ + success: function () { + szInfo = "单帧播放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "单帧播放失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 暂停 +function clickPause() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Pause({ + success: function () { + szInfo = "暂停成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "暂停失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 恢复 +function clickResume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Resume({ + success: function () { + szInfo = "恢复成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "恢复失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 慢放 +function clickPlaySlow() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlaySlow({ + success: function () { + szInfo = "慢放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "慢放失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 快放 +function clickPlayFast() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlayFast({ + success: function () { + szInfo = "快放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "快放失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// OSD时间 +function clickGetOSDTime() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_GetOSDTime({ + success: function (szOSDTime) { + $("#osdtime").val(szOSDTime); + showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 下载录像 +var g_iDownloadID = -1; +var g_tDownloadProcess = 0; +function clickStartDownloadRecord(i) { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd" + i).data("fileName"), + szPlaybackURI = $("#downloadTd" + i).data("playbackURI"); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_StartDownloadRecord(szDeviceIdentify, szPlaybackURI, szFileName, { + bDateDir: true //是否生成日期文件 + }).then((iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + i + ")", 1000); + }, (oError) => { + WebVideoCtrl.I_GetLastError().then((iErrorValue) => { + if (34 == iErrorValue) { + showOPInfo(szDeviceIdentify + " 已下载!"); + } else if (33 == iErrorValue) { + showOPInfo(szDeviceIdentify + " 空间不足!"); + } else { + showOPInfo(szDeviceIdentify + " 下载失败!"); + } + }); + }); +} +function clickStartDownloadRecordByTime() { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd0").data("fileName"), + szPlaybackURI = $("#downloadTd0").data("playbackURI"), + szStartTime = $("#downloadstarttime").val(), + szEndTime = $("#downloadendtime").val(); + if (null == szDeviceIdentify) { + return; + } + if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) { + alert("开始时间大于结束时间"); + return; + } + WebVideoCtrl.I_StartDownloadRecordByTime(szDeviceIdentify, szPlaybackURI, szFileName, szStartTime,szEndTime,{ + bDateDir: true //是否生成日期文件 + }).then((iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + 0 + ")", 1000); + }, (oError) => { + showOPInfo(szDeviceIdentify + " 下载失败!"); + }); +} + +function clickStopDownload() { + WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID).then(() => { + showOPInfo("停止下载成功!"); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + $("#downProcess").remove(); + }, (oError) => { + showOPInfo(szDeviceIdentify + " 停止下载失败!", oError.errorCode, oError.errorMsg); + }); +} +// 下载进度 +async function downProcess() { + var iStatus = await WebVideoCtrl.I_GetDownloadStatus(g_iDownloadID); + if (0 == iStatus) { + $("#downProcess").css({ + width: $("#searchlist").width() + "px", + height: "100px", + lineHeight: "100px", + left: $("#searchdiv").offset().left + "px", + top: $("#searchdiv").offset().top + "px" + }); + var iProcess = await WebVideoCtrl.I_GetDownloadProgress(g_iDownloadID); + if (iProcess < 0) { + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } else if (iProcess < 100) { + $("#downProcess").text(iProcess + "%"); + } else { + $("#downProcess").text("100%"); + setTimeout(function () { + $("#downProcess").remove(); + }, 1000); + + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + showOPInfo("录像下载完成!请到插件保存路径中查看。"); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } + } else { + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } +} + +// 导出配置文件 +function clickExportDeviceConfig() { + var szDeviceIdentify = $("#ip").val(), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + var szDevicePassWord = $("#edfpassword").val(); + + WebVideoCtrl.I_ExportDeviceConfig(szDeviceIdentify,szDevicePassWord).then(() => { + szInfo = "导出配置文件成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "导出配置文件失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 导入配置文件 +function clickImportDeviceConfig() { + var szDeviceIdentify = $("#ip").val(), + szFileName = $("#configFile").val(), + szDevicePassWord = $("#edfpassword").val(), + szInfo = ""; + if (null == szDeviceIdentify) { + return; + } + + if ("" == szFileName) { + alert("请选择配置文件!"); + return; + } + + WebVideoCtrl.I_ImportDeviceConfig(szDeviceIdentify, szFileName,szDevicePassWord).then(() => { + szInfo = "导入成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function (xmlDoc) { + $("
重启中...
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg); + } + }); + }, (oError) => { + szInfo = "导入失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// 重连 +function reconnect(szDeviceIdentify) { + WebVideoCtrl.I_Reconnect(szDeviceIdentify, { + timeout: 3000, + success: function (xmlDoc) { + $("#restartDiv").remove(); + }, + error: function () { + setTimeout(function () {reconnect(szDeviceIdentify);}, 5000); + } + }); +} + +// 开始升级 +var g_tUpgrade = 0; +function clickStartUpgrade(szDeviceIdentify) { + var szDeviceIdentify = $("#ip").val(), + szFileName = $("#upgradeFile").val(); + + if (null == szDeviceIdentify) { + return; + } + + if ("" == szFileName) { + alert("请选择升级文件!"); + return; + } + WebVideoCtrl.I_StartUpgrade(szDeviceIdentify, szFileName).then(function(){ + g_tUpgrade = setInterval("getUpgradeStatus('" + szDeviceIdentify + "')", 1000); + },function(){ + clearInterval(g_tUpgrade); + showOPInfo(szDeviceIdentify + " 升级失败!"); + }); +} + +// 获取升级状态 +async function getUpgradeStatus(szDeviceIdentify) { + var bUpdating = await WebVideoCtrl.I_UpgradeStatus(szDeviceIdentify); + if (bUpdating) { + var iProcess = await WebVideoCtrl.I_UpgradeProgress(szDeviceIdentify); + if (iProcess < 0) { + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + showOPInfo(szDeviceIdentify + " 获取进度失败!"); + return; + } else if (iProcess < 100) { + if (0 == $("#restartDiv").length) { + $("
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + } + $("#restartDiv").text(iProcess + "%"); + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function (xmlDoc) { + $("
重启中...
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg); + } + }); + } + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function () { + $("
重启中...
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 检查插件版本 +function clickCheckPluginVersion() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_CheckPluginVersion().then((bNeedUpdate) => { + if (bNeedUpdate) { + alert("检测到新的插件版本!"); + } else { + alert("您的插件版本已经是最新的!"); + } + }, () => { + showOPInfo(szDeviceIdentify + " 检测插件新版本失败"); + }); +} + +function clickRestoreDefault() { + var szDeviceIdentify = $("#ip").val(), + szMode = "basic"; + WebVideoCtrl.I_RestoreDefault(szDeviceIdentify, szMode).then(() => { + $("#restartDiv").remove(); + showOPInfo(szDeviceIdentify + " 恢复默认参数成功!"); + }, (oError) => { + showOPInfo(szDeviceIdentify + " 恢复默认参数失败!", oError.errorCode, oError.errorMsg); + }); +} + +function PTZZoomIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(10, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZZoomout() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZZoomStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFocusIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFoucusOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(13, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFoucusStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(15, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止成功!"); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止失败!", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// 切换模式 +function changeIPMode(iType) { + var arrPort = [0, 7071, 80]; + + $("#serverport").val(arrPort[iType]); +} + +// 获取设备IP,B1暂不支持 +// function clickGetDeviceIP() { +// var iDeviceMode = parseInt($("#devicemode").val(), 10), +// szAddress = $("#serveraddress").val(), +// iPort = parseInt($("#serverport").val(), 10) || 0, +// szDeviceID = $("#deviceid").val(), +// szDeviceInfo = ""; + +// szDeviceInfo = WebVideoCtrl.I_GetIPInfoByMode(iDeviceMode, szAddress, iPort, szDeviceID); + +// if ("" == szDeviceInfo) { +// showOPInfo("设备IP和端口解析失败!"); +// } else { +// showOPInfo("设备IP和端口解析成功!"); + +// var arrTemp = szDeviceInfo.split("-"); +// $("#loginip").val(arrTemp[0]); +// $("#deviceport").val(arrTemp[1]); +// } +// } + +// 启用多边形绘制 +var g_bEnableDraw = false; +function clickEnableDraw() { + WebVideoCtrl.I_SetPlayModeType(6).then(() => { + g_bEnableDraw = true; + showOPInfo("启用绘制成功!"); + }, (oError) => { + showOPInfo("启用绘制失败!", oError.errorCode, oError.errorMsg); + }); +} + +// 禁用多边形绘制 +function clickDisableDraw() { + WebVideoCtrl.I_SetSnapDrawMode(0, -1).then(() => { + g_bEnableDraw = false; + showOPInfo("禁用绘制成功!"); + }, (oError) => { + showOPInfo("禁用绘制失败!", oError.errorCode, oError.errorMsg); + }); +} + +// 添加图形,最多不超过16个图形 +function clickAddSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var szName = encodeString($("#snapName").val()); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "" + szId + ""; // [1, 32] + szInfo += "0"; //如果想绘制多边形,polygonType指需要改为1 + szInfo += "17"; // [MinClosed, 17] + szInfo += "4"; // [4, 17] + szInfo += "#" + szId + "#" + szName + ""; + szInfo += "false"; + szInfo += "02550"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => { + showOPInfo("添加图形成功!"); + }); + WebVideoCtrl.I_SetSnapDrawMode(g_iWndIndex, 2); +} + +// 删除图形 +function clickDelSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var aShapes = []; + aShapes.push({ + polygonType: 0, + id: szId + }); + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex, aShapes); +} + +// 获取图形,保存到自己数据库中 +function clickGetSnapPolygon() { + WebVideoCtrl.I_GetSnapPolygonInfo(g_iWndIndex).then((szXml) => { + alert(szXml); + }); +} + +// 设置图形,页面打开时可以设置以前设置过的图形 +function clickSetSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "1"; + szInfo += "1"; + szInfo += "#1#设置1"; + szInfo += "true"; + szInfo += "02550"; + szInfo += ""; + szInfo += "0.7379030.229730"; + szInfo += "0.9475810.804054"; + szInfo += "0.3629030.777027"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + szInfo += "2"; + szInfo += "0"; + szInfo += "#2#设置2"; + szInfo += "true"; + szInfo += "2552550"; + szInfo += ""; + szInfo += "0.20.2"; + szInfo += "0.80.2"; + szInfo += "0.80.8"; + szInfo += "0.20.8"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => { + showOPInfo("设置图形成功!"); + }, (oError) => { + showOPInfo("设置图形失败!", oError.errorCode, oError.errorMsg); + }); +} + +// 清空图形 +function clickDelAllSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex).then(() => { + showOPInfo("清空图形成功!"); + }, (oError) => { + showOPInfo("清空图形失败!", oError.errorCode, oError.errorMsg); + }); +} + +// 设备抓图 +function clickDeviceCapturePic() { + var szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + var bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false; + var iChannelID = parseInt($("#channels").val(), 10); + var iResolutionWidth = parseInt($("#resolutionWidth").val(), 10); + var iResolutionHeight = parseInt($("#resolutionHeight").val(), 10); + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// 零通道不支持设备抓图 + return; + } + + var szPicName = szDeviceIdentify + "_" + iChannelID + "_" + new Date().getTime(); + var iRet = WebVideoCtrl.I_DeviceCapturePic(szDeviceIdentify, iChannelID, szPicName, { + bDateDir: true, //是否生成日期文件 + iResolutionWidth: iResolutionWidth, + iResolutionHeight: iResolutionHeight + }); + + if (0 == iRet) { + szInfo = "设备抓图成功!"; + } else { + szInfo = "设备抓图失败!"; + } + showOPInfo(szDeviceIdentify + " " + szInfo); +} + +function loadXML(szXml) { + if(null == szXml || "" == szXml) { + return null; + } + + var oXmlDoc = null; + + if (window.DOMParser) { + var oParser = new DOMParser(); + oXmlDoc = oParser.parseFromString(szXml, "text/xml"); + } else { + oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + oXmlDoc.async = false; + oXmlDoc.loadXML(szXml); + } + + return oXmlDoc; +} + +function toXMLStr(oXmlDoc) { + var szXmlDoc = ""; + + try { + var oSerializer = new XMLSerializer(); + szXmlDoc = oSerializer.serializeToString(oXmlDoc); + } catch (e) { + try { + szXmlDoc = oXmlDoc.xml; + } catch (e) { + return ""; + } + } + if (szXmlDoc.indexOf("" + szXmlDoc; + } + + return szXmlDoc; +} + +function encodeString(str) { + if (str) { + return str.replace(/&/g, '&').replace(//g, '>'); + } else { + return ""; + } +} \ No newline at end of file diff --git a/hkws/webs/cn/demo2.html b/hkws/webs/cn/demo2.html new file mode 100644 index 0000000000..531edc83bf --- /dev/null +++ b/hkws/webs/cn/demo2.html @@ -0,0 +1,462 @@ + + + + + + + + + + + +
+
+ +
+ 登录 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IP地址端口号
用户名密码
设备端口(可选参数) + 窗口分割数  + +
RTSP端口(可选参数)
+ + + +
已登录设备 + + 通道列表 + +
+ + + + + +
+
+
+ 数字通道 + + + + + + + +
+
+
+
+
+
+
+ 本地配置 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
播放性能 + + 图像尺寸 + +
规则信息 + + 抓图文件格式 + +
录像文件打包大小 + + 协议类型 + +
叠加POS信息 + +
码流秘钥 + +
录像文件保存路径 
回放下载保存路径 
预览抓图保存路径 
回放抓图保存路径 
回放剪辑保存路径 
   修改参数后,需要刷新界面后生效。
+
+
+
+
+ 预览 + + + + + + + + + + + + + + + + + + + + + + +
码流类型 + +
音量 +  (范围:0~100) + + + +
对讲通道 + + + + + +
+ + + + +
+ + + + + +
+
+
+ 绘图 + + + + + + + + + + +
+ + +
+ 图形ID: + 名称: +
+ + + + + +
+
+
+ 云台控制 + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + +
云台速度 + +
预置点号
+ + +
+ + + + + + + + + + + + + +
+
+
+ 回放 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
码流类型 + +
开始时间 + (时间格式:2013-11-11 12:34:56) +
结束时间 + + + +
按时间下载开始时间 + (时间格式:2013-11-11 12:34:56) +
按时间下载结束时间 + + (相机不支持) +
+
+
+
+
+ + + + +  启用转码码流 +
+ + + + +
+ + + +   +
+
+
+ 系统维护 + + + + + + + + + + + + + +
+ + +
+ + +
+    +
+    +
+
+
+
+
+ 操作信息 +
+
+
+ 事件回调信息 +
+
+
+ + + + + \ No newline at end of file diff --git a/hkws/webs/cn/demo2.js b/hkws/webs/cn/demo2.js new file mode 100644 index 0000000000..c81cd61ed7 --- /dev/null +++ b/hkws/webs/cn/demo2.js @@ -0,0 +1,2470 @@ +// 初始化插件 + +// 全局保存当前选中窗口 +var g_iWndIndex = 0; //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口 +var g_oLocalConfig = null; //本地配置 + +//错误码 +//通用错误 +var ERROR_CODE_UNKNOWN = 1000; //未知错误 +var ERROR_CODE_NETWORKERROR = 1001; //网络错误 +var ERROR_CODE_PARAMERROR = 1002; //缺少插件元素 + +//登录模块 +var ERROR_CODE_LOGIN_NOLOGIN = 2000; // 未登录 +var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; //设备已登录,重复登录 +var ERROR_CODE_LOGIN_NOSUPPORT = 2002; //当前设备不支持Digest登录 + +//预览播放 +var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; //插件初始化失败 +var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; //当前窗口已经在预览 +var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; //回放异常 +var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; //回放停止 +var ERROR_CODE_PLAY_NOFREESPACE = 3004; //录像过程中,硬盘容量不足 + +//对讲 +var ERROR_CODE_TALK_FAIL = 5000; //语音对讲失败 + +var version = "V3.3.0build20230322"; +$(function () { + // 初始化插件参数及插入插件 + WebVideoCtrl.I_InitPlugin({ + bEmbed: true, + bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持 + iWndowType: 1, + // aIframe: ["test1"], + cbSelWnd: function (xmlDoc) { + g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10); + var szInfo = "当前选择的窗口编号:" + g_iWndIndex; + showCBInfo(szInfo); + }, + cbDoubleClickWnd: function (iWndIndex, bFullScreen) { + var szInfo = "当前放大的窗口编号:" + iWndIndex; + if (!bFullScreen) { + szInfo = "当前还原的窗口编号:" + iWndIndex; + } + showCBInfo(szInfo); + }, + cbEvent: function (iEventType, iParam1, iParam2) { + if (2 == iEventType) { + // 回放正常结束 + showCBInfo("窗口" + iParam1 + "回放结束!"); + } else if (-1 == iEventType) { + showCBInfo("设备" + iParam1 + "网络错误!"); + } else if (3001 == iEventType) { + clickStopRecord(g_szRecordType, iParam1); + } + }, + cbInitPluginComplete: function () { + WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then( + () => { + // 检查插件是否最新 + WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => { + if (bFlag) { + alert( + "检测到新的插件版本,双击开发包目录里的HCWebSDKPlugin.exe升级!" + ); + } + }); + }, + () => { + alert( + "插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPlugin.exe安装!" + ); + } + ); + }, + }); + + // 窗口事件绑定 + $(window).bind({ + resize: function () { + //WebVideoCtrl.I_Resize($("body").width(), $("body").height()); + }, + }); + + //初始化日期时间 + var szCurTime = dateFormat(new Date(), "yyyy-MM-dd"); + $("#starttime").val(szCurTime + " 00:00:00"); + $("#endtime").val(szCurTime + " 23:59:59"); + $("#downloadstarttime").val(szCurTime + " 00:00:00"); + $("#downloadendtime").val(szCurTime + " 23:59:59"); +}); + +// 显示操作信息 +function showOPInfo(szInfo, status, xmlDoc) { + var szTip = + "
" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo; + if (typeof status != "undefined" && status != 200) { + var szStatusString = $(xmlDoc).find("statusString").eq(0).text(); + var szSubStatusCode = $(xmlDoc).find("subStatusCode").eq(0).text(); + if ("" === szSubStatusCode) { + if ("" === szSubStatusCode && "" === szStatusString) { + szTip += "(" + status + ")"; + } else { + szTip += "(" + status + ", " + szStatusString + ")"; + } + } else { + szTip += "(" + status + ", " + szSubStatusCode + ")"; + } + } + szTip += "
"; + + $("#opinfo").html(szTip + $("#opinfo").html()); +} + +// 显示回调信息 +function showCBInfo(szInfo) { + szInfo = + "
" + + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + + " " + + szInfo + + "
"; + $("#cbinfo").html(szInfo + $("#cbinfo").html()); +} + +// 格式化时间 +function dateFormat(oDate, fmt) { + var o = { + "M+": oDate.getMonth() + 1, //月份 + "d+": oDate.getDate(), //日 + "h+": oDate.getHours(), //小时 + "m+": oDate.getMinutes(), //分 + "s+": oDate.getSeconds(), //秒 + "q+": Math.floor((oDate.getMonth() + 3) / 3), //季度 + S: oDate.getMilliseconds(), //毫秒 + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + (oDate.getFullYear() + "").substr(4 - RegExp.$1.length) + ); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) + ); + } + } + return fmt; +} + +// 获取窗口尺寸 +function getWindowSize() { + var nWidth = $(this).width() + $(this).scrollLeft(), + nHeight = $(this).height() + $(this).scrollTop(); + + return { width: nWidth, height: nHeight }; +} + +// 打开选择框 0:文件夹 1:文件 +function clickOpenFileDlg(id, iType) { + WebVideoCtrl.I_OpenFileDlg(iType).then( + function (szDirPath) { + if (szDirPath != -1 && szDirPath != "" && szDirPath != null) { + $("#" + id).val(szDirPath); + } + }, + function () { + showOPInfo("打开文件路径失败"); + } + ); +} + +// 获取本地参数 +function clickGetLocalCfg() { + WebVideoCtrl.I_GetLocalCfg().then( + (oLocalConfig) => { + g_oLocalConfig = oLocalConfig; + $("#netsPreach").val(oLocalConfig.buffNumberType); + $("#wndSize").val(oLocalConfig.playWndType); + $("#rulesInfo").val(oLocalConfig.ivsMode); + $("#captureFileFormat").val(oLocalConfig.captureFileFormat); + $("#packSize").val(oLocalConfig.packgeSize); + $("#recordPath").val(oLocalConfig.recordPath); + $("#downloadPath").val(oLocalConfig.downloadPath); + $("#previewPicPath").val(oLocalConfig.capturePath); + $("#playbackPicPath").val(oLocalConfig.playbackPicPath); + $("#devicePicPath").val(oLocalConfig.deviceCapturePath); + $("#playbackFilePath").val(oLocalConfig.playbackFilePath); + $("#protocolType").val(oLocalConfig.protocolType); + $("#ivsMode").val(oLocalConfig.ivsMode); + $("#backOverlay").val(oLocalConfig.backOverlay); + $("#secretKey").val("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F"); + showOPInfo("本地配置获取成功!"); + }, + (oError) => { + var szInfo = "本地配置获取失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 设置本地参数 +async function clickSetLocalCfg() { + g_oLocalConfig.buffNumberType = $("#netsPreach").val(); + g_oLocalConfig.playWndType = $("#wndSize").val(); + g_oLocalConfig.ivsMode = $("#rulesInfo").val(); + g_oLocalConfig.captureFileFormat = $("#captureFileFormat").val(); + g_oLocalConfig.packgeSize = $("#packSize").val(); + g_oLocalConfig.recordPath = $("#recordPath").val(); + g_oLocalConfig.downloadPath = $("#downloadPath").val(); + g_oLocalConfig.capturePath = $("#previewPicPath").val(); + g_oLocalConfig.playbackPicPath = $("#playbackPicPath").val(); + g_oLocalConfig.deviceCapturePath = $("#devicePicPath").val(); + g_oLocalConfig.playbackFilePath = $("#playbackFilePath").val(); + g_oLocalConfig.protocolType = $("#protocolType").val(); + g_oLocalConfig.ivsMode = $("#ivsMode").val(); + g_oLocalConfig.backOverlay = $("#backOverlay").val(); + if ("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F" !== $("#secretKey").val()) { + g_oLocalConfig.secretKey = await WebVideoCtrl.I_GetEncryptString( + $("#secretKey").val() + ); + } + WebVideoCtrl.I_SetLocalCfg(g_oLocalConfig).then( + () => { + showOPInfo("本地配置设置成功!"); + }, + (oError) => { + var szInfo = "本地配置设置失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 窗口分割数 +function changeWndNum(iType) { + if ("1*2" === iType || "2*1" === iType) { + WebVideoCtrl.I_ArrangeWindow(iType).then( + () => { + showOPInfo("窗口分割成功!"); + }, + (oError) => { + var szInfo = "窗口分割失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + } + ); + } else { + iType = parseInt(iType, 10); + WebVideoCtrl.I_ChangeWndNum(iType).then( + () => { + showOPInfo("窗口分割成功!"); + }, + (oError) => { + var szInfo = "窗口分割失败!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + } + ); + } +} + +// 登录 +function clickLogin() { + var szIP = $("#loginip").val(), + szPort = $("#port").val(), + szUsername = $("#username").val(), + szPassword = $("#password").val(); + + if ("" == szIP || "" == szPort) { + return; + } + + var szDeviceIdentify = szIP + "_" + szPort; + + WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, { + timeout: 3000, + success: function (xmlDoc) { + showOPInfo(szDeviceIdentify + " 登录成功!"); + $("#ip").prepend( + "" + ); + setTimeout(function () { + $("#ip").val(szDeviceIdentify); + setTimeout(function () { + getChannelInfo(); + }, 1000); + getDevicePort(); + }, 10); + }, + error: function (oError) { + if (ERROR_CODE_LOGIN_REPEATLOGIN === status) { + showOPInfo(szDeviceIdentify + " 已登录过!"); + } else { + showOPInfo( + szDeviceIdentify + " 登录失败!", + oError.errorCode, + oError.errorMsg + ); + } + }, + }); +} + +// 退出 +function clickLogout() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_Logout(szDeviceIdentify).then( + () => { + showOPInfo(szDeviceIdentify + " " + "退出成功!"); + }, + () => { + showOPInfo(szDeviceIdentify + " " + "退出失败!"); + } + ); +} + +// 获取设备信息 +function clickGetDeviceInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetDeviceInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var arrStr = []; + arrStr.push( + "设备名称:" + $(xmlDoc).find("deviceName").eq(0).text() + "\r\n" + ); + arrStr.push( + "设备ID:" + $(xmlDoc).find("deviceID").eq(0).text() + "\r\n" + ); + arrStr.push("型号:" + $(xmlDoc).find("model").eq(0).text() + "\r\n"); + arrStr.push( + "设备序列号:" + $(xmlDoc).find("serialNumber").eq(0).text() + "\r\n" + ); + arrStr.push( + "MAC地址:" + $(xmlDoc).find("macAddress").eq(0).text() + "\r\n" + ); + arrStr.push( + "主控版本:" + + $(xmlDoc).find("firmwareVersion").eq(0).text() + + " " + + $(xmlDoc).find("firmwareReleasedDate").eq(0).text() + + "\r\n" + ); + arrStr.push( + "编码版本:" + + $(xmlDoc).find("encoderVersion").eq(0).text() + + " " + + $(xmlDoc).find("encoderReleasedDate").eq(0).text() + + "\r\n" + ); + + showOPInfo(szDeviceIdentify + " 获取设备信息成功!"); + alert(arrStr.join("")); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 获取设备信息失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); +} + +// 获取通道 +function getChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + oSel = $("#channels").empty(); + + if (null == szDeviceIdentify) { + return; + } + + // 模拟通道 + WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("VideoInputChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Camera " + (i < 9 ? "0" + (i + 1) : i + 1); + } + oSel.append( + "" + ); + }); + showOPInfo(szDeviceIdentify + " 获取模拟通道成功!"); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 获取模拟通道失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + // 数字通道 + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(), + online = $(this).find("online").eq(0).text(); + if ("false" == online) { + // 过滤禁用的数字通道 + return true; + } + if ("" == name) { + name = "IPCamera " + (i < 9 ? "0" + (i + 1) : i + 1); + } + oSel.append( + "" + ); + }); + showOPInfo(szDeviceIdentify + " 获取数字通道成功!"); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 获取数字通道失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + // 零通道 + WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("ZeroVideoChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : i + 1); + } + if ("true" == $(this).find("enabled").eq(0).text()) { + // 过滤禁用的零通道 + oSel.append( + "" + ); + } + }); + showOPInfo(szDeviceIdentify + " 获取零通道成功!"); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 获取零通道失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); +} + +// 获取端口 +function getDevicePort() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then( + (oPort) => { + $("#deviceport").val(oPort.iDevicePort); + $("#rtspport").val(oPort.iRtspPort); + + showOPInfo(szDeviceIdentify + " 获取端口成功!"); + }, + (oError) => { + var szInfo = "获取端口失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 获取数字通道 +async function clickGetDigitalChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + iAnalogChannelNum = 0; + + $("#digitalchannellist").empty(); + + if (null == szDeviceIdentify) { + return; + } + + // 模拟通道 + try { + var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo( + szDeviceIdentify, + {} + ); + iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length; + } finally { + // 数字通道 + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function () { + var id = parseInt($(this).find("id").eq(0).text(), 10), + ipAddress = $(this).find("ipAddress").eq(0).text(), + srcInputPort = $(this).find("srcInputPort").eq(0).text(), + managePortNo = $(this).find("managePortNo").eq(0).text(), + online = $(this).find("online").eq(0).text(), + proxyProtocol = $(this).find("proxyProtocol").eq(0).text(); + + var objTr = $("#digitalchannellist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.innerHTML = + id - iAnalogChannelNum < 10 + ? "D0" + (id - iAnalogChannelNum) + : "D" + (id - iAnalogChannelNum); + objTd = objTr.insertCell(1); + objTd.width = "25%"; + objTd.innerHTML = ipAddress; + objTd = objTr.insertCell(2); + objTd.width = "15%"; + objTd.innerHTML = srcInputPort; + objTd = objTr.insertCell(3); + objTd.width = "20%"; + objTd.innerHTML = managePortNo; + objTd = objTr.insertCell(4); + objTd.width = "15%"; + objTd.innerHTML = "true" == online ? "在线" : "离线"; + objTd = objTr.insertCell(5); + objTd.width = "25%"; + objTd.innerHTML = proxyProtocol; + }); + showOPInfo(szDeviceIdentify + " 获取数字通道成功!"); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 没有数字通道!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} +// 开始预览 +function clickStartRealPlay(iStreamType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false, + szInfo = ""; + + if ("undefined" === typeof iStreamType) { + iStreamType = parseInt($("#streamtype").val(), 10); + } + + if (null == szDeviceIdentify) { + return; + } + var startRealPlay = function () { + WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, { + iStreamType: iStreamType, + iChannelID: iChannelID, + bZeroChannel: bZeroChannel, + iPort: iRtspPort, + success: function () { + szInfo = "开始预览成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 开始预览失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + }; + + if (oWndInfo != null) { + // 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + startRealPlay(); + }, + }); + } else { + startRealPlay(); + } +} +function setTextOverlay() { + var szDeviceIdentify = $("#ip").val(); + var szInfo = ""; + var that = this; + var iChannelID = parseInt($("#channels").val(), 10); + var szUrl = "ISAPI/System/Video/inputs/channels/" + iChannelID + "/overlays"; + WebVideoCtrl.I_GetTextOverlay(szUrl, szDeviceIdentify, { + success: function (data) { + $(data).find("TextOverlay").eq(0).find("displayText").eq(0).text("我tet"); + $(data).find("TextOverlay").eq(0).find("positionX").eq(0).text("20"); + $(data).find("TextOverlay").eq(0).find("positionY").eq(0).text("30"); + var xmldoc = toXMLStr(data); + var newOptions = { + type: "PUT", + data: xmldoc, + success: function () { + szInfo = "绘制osd信息成功"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 设置osd信息失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }; + + WebVideoCtrl.I_SendHTTPRequest(szDeviceIdentify, szUrl, newOptions); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 设置osd信息失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); +} +// 停止预览 +function clickStopRealPlay() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "停止预览成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 停止预览失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 打开声音 +function clickOpenSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var allWndInfo = WebVideoCtrl.I_GetWindowStatus(); + // 循环遍历所有窗口,如果有窗口打开了声音,先关闭 + for (var i = 0, iLen = allWndInfo.length; i < iLen; i++) { + oWndInfo = allWndInfo[i]; + if (oWndInfo.bSound) { + WebVideoCtrl.I_CloseSound(oWndInfo.iIndex); + break; + } + } + + WebVideoCtrl.I_OpenSound().then( + () => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "打开声音成功!"); + }, + (oError) => { + var szInfo = " 打开声音失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 关闭声音 +function clickCloseSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_CloseSound().then( + () => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "关闭声音成功!"); + }, + (oError) => { + var szInfo = " 关闭声音失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 设置音量 +function clickSetVolume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iVolume = parseInt($("#volume").val(), 10), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_SetVolume(iVolume).then( + () => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "设置音量成功"); + }, + (oError) => { + var szInfo = " 设置音量失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 抓图 +async function clickCapturePic(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var oLocalConfig = await WebVideoCtrl.I_GetLocalCfg(); + var szCaptureFileFormat = "0"; + if (oLocalConfig) { + szCaptureFileFormat = oLocalConfig.captureFileFormat; + } + + var szChannelID = $("#channels").val(); + var szPicName = + oWndInfo.szDeviceIdentify + + "_" + + szChannelID + + "_" + + new Date().getTime(); + //如果是回放抓图,需要增加如下前缀:"playback_" + if ("playback" === szType) { + szPicName = + "playback_" + + oWndInfo.szDeviceIdentify + + "_" + + szChannelID + + "_" + + new Date().getTime(); + } + + szPicName += "0" === szCaptureFileFormat ? ".jpg" : ".bmp"; + + WebVideoCtrl.I_CapturePic(szPicName, { + bDateDir: true, //是否生成日期文件 + }).then( + function () { + szInfo = "抓图成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + function (oError) { + szInfo = " 抓图失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} +// 抓图 +function clickCapturePicData() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + if (oWndInfo != null) { + WebVideoCtrl.I_CapturePicData().then( + function (data) { + console.log(data); + szInfo = "抓图上传成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + function () { + szInfo = "抓图失败!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + } + ); + } +} + +// 开始录像 +var g_szRecordType = ""; +function clickStartRecord(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + g_szRecordType = szType; + + if (oWndInfo != null) { + var szChannelID = $("#channels").val(), + szFileName = + oWndInfo.szDeviceIdentify + + "_" + + szChannelID + + "_" + + new Date().getTime(); + + WebVideoCtrl.I_StartRecord(szFileName, { + bDateDir: true, //是否生成日期文件 + success: function () { + if ("realplay" === szType) { + szInfo = "开始录像成功!"; + } else if ("playback" === szType) { + szInfo = "开始剪辑成功!"; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ("realplay" === szType) { + szInfo = " 开始录像失败!"; + } else if ("playback" === szType) { + szInfo = " 开始剪辑失败!"; + } + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 停止录像 +function clickStopRecord(szType, iWndIndex) { + if ("undefined" === typeof iWndIndex) { + iWndIndex = g_iWndIndex; + } + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_StopRecord({ + success: function () { + if ("realplay" === szType) { + szInfo = "停止录像成功!"; + } else if ("playback" === szType) { + szInfo = "停止剪辑成功!"; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ("realplay" === szType) { + szInfo = "停止录像失败!"; + } else if ("playback" === szType) { + szInfo = "停止剪辑失败!"; + } + sshowOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 获取对讲通道 +function clickGetAudioInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetAudioInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oAudioChannels = $(xmlDoc).find("TwoWayAudioChannel"), + oSel = $("#audiochannels").empty(); + $.each(oAudioChannels, function () { + var id = $(this).find("id").eq(0).text(); + + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " 获取对讲通道成功!"); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 获取对讲通道失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); +} + +// 开始对讲 +function clickStartVoiceTalk() { + var szDeviceIdentify = $("#ip").val(), + iAudioChannel = parseInt($("#audiochannels").val(), 10), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (isNaN(iAudioChannel)) { + alert("请选择对讲通道!"); + return; + } + + WebVideoCtrl.I_StartVoiceTalk(szDeviceIdentify, iAudioChannel).then( + () => { + szInfo = "开始对讲成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + var szInfo = " 开始对讲失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 停止对讲 +function clickStopVoiceTalk() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_StopVoiceTalk().then( + () => { + szInfo = "停止对讲成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + var szInfo = " 停止对讲失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 启用电子放大 +function clickEnableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_EnableEZoom().then( + () => { + szInfo = "启用电子放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "启用电子放大失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 禁用电子放大 +function clickDisableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_DisableEZoom().then( + () => { + szInfo = "禁用电子放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "禁用电子放大失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 启用3D放大 +function clickEnable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Enable3DZoom().then( + () => { + szInfo = "启用3D放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "启用3D放大失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 禁用3D放大 +function clickDisable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Disable3DZoom().then( + () => { + szInfo = "禁用3D放大成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "禁用3D放大失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + } +} + +// 全屏 +function clickFullScreen() { + WebVideoCtrl.I_FullScreen(true).then( + () => { + showOPInfo("全屏成功"); + }, + (oError) => { + showOPInfo("全屏失败!", oError.errorCode, oError.errorMsg); + } + ); +} + +// PTZ控制 9为自动,1,2,3,4,5,6,7,8为方向PTZ +var g_bPTZAuto = false; +function mouseDownPTZControl(iPTZIndex) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false, + iPTZSpeed = $("#ptzspeed").val(); + + if (bZeroChannel) { + // 零通道不支持云台 + return; + } + + if (oWndInfo != null) { + if (9 == iPTZIndex && g_bPTZAuto) { + iPTZSpeed = 0; // 自动开启后,速度置为0可以关闭自动 + } else { + g_bPTZAuto = false; // 点击其他方向,自动肯定会被关闭 + } + + WebVideoCtrl.I_PTZControl(iPTZIndex, false, { + iPTZSpeed: iPTZSpeed, + success: function (xmlDoc) { + if (9 == iPTZIndex && g_bPTZAuto) { + showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!"); + } else { + showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台成功!"); + } + if (9 == iPTZIndex) { + g_bPTZAuto = !g_bPTZAuto; + } + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 开启云台失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 方向PTZ停止 +function mouseUpPTZControl() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(1, true, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 停止云台失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 设置预置点 +function clickSetPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_SetPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 设置预置点失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 调用预置点 +function clickGoPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_GoPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 调用预置点失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 搜索录像 +var g_iSearchTimes = 0; +function clickRecordSearch(iType) { + var szDeviceIdentify = $("#ip").val(), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false, + iStreamType = parseInt($("#record_streamtype").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(); + if ( + Date.parse(szEndTime.replace(/-/g, "/")) - + Date.parse(szStartTime.replace(/-/g, "/")) < + 0 + ) { + alert("开始时间大于结束时间"); + return; + } + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) { + // 零通道不支持录像搜索 + return; + } + + if (0 == iType) { + // 首次搜索 + $("#searchlist").empty(); + g_iSearchTimes = 0; + } + + //如果是前端设备,需要将搜索时间转换为UTC时间 + WebVideoCtrl.I_RecordSearch( + szDeviceIdentify, + iChannelID, + szStartTime, + szEndTime, + { + iStreamType: iStreamType, + iSearchPos: g_iSearchTimes, + success: function (xmlDoc) { + if ("MORE" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + for ( + var i = 0, nLen = $(xmlDoc).find("searchMatchItem").length; + i < nLen; + i++ + ) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if (szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring( + szPlaybackURI.indexOf("name=") + 5, + szPlaybackURI.indexOf("&size=") + ); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = szStartTime.replace("T", " ").replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = szEndTime.replace("T", " ").replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = + "下载"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data( + "playbackURI", + szPlaybackURI + ); + ++g_iSearchTimes; + } + + clickRecordSearch(1); // 继续搜索 + } else if ("OK" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + var iLength = $(xmlDoc).find("searchMatchItem").length; + for (var i = 0; i < iLength; i++) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if (szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring( + szPlaybackURI.indexOf("name=") + 5, + szPlaybackURI.indexOf("&size=") + ); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = szStartTime.replace("T", " ").replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = szEndTime.replace("T", " ").replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = + "下载"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data( + "playbackURI", + szPlaybackURI + ); + ++g_iSearchTimes; + } + showOPInfo(szDeviceIdentify + " 搜索录像文件成功!"); + } else if ( + "NO MATCHES" === $(xmlDoc).find("responseStatusStrg").eq(0).text() + ) { + setTimeout(function () { + g_iSearchTimes = 0; + showOPInfo(szDeviceIdentify + " 没有录像文件!"); + }, 50); + } + }, + error: function (oError) { + g_iSearchTimes = 0; + showOPInfo( + szDeviceIdentify + " 搜索录像文件失败!", + oError.errorCode, + oError.errorMsg + ); + }, + } + ); +} + +// 开始回放 +function clickStartPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = "", + bChecked = $("#transstream").prop("checked"), + iRet = -1; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) { + // 零通道不支持回放 + return; + } + + var startPlayback = function () { + if (bChecked) { + // 启用转码回放 + var oTransCodeParam = { + TransFrameRate: "14", // 0:全帧率,5:1,6:2,7:4,8:6,9:8,10:10,11:12,12:16,14:15,15:18,13:20,16:22 + TransResolution: "1", // 255:Auto,3:4CIF,2:QCIF,1:CIF + TransBitrate: "19", // 2:32K,3:48K,4:64K,5:80K,6:96K,7:128K,8:160K,9:192K,10:224K,11:256K,12:320K,13:384K,14:448K,15:512K,16:640K,17:768K,18:896K,19:1024K,20:1280K,21:1536K,22:1792K,23:2048K,24:3072K,25:4096K,26:8192K + }; + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + oTransCodeParam: oTransCodeParam, + success: function () { + szInfo = "开始回放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "开始回放失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } else { + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + success: function () { + szInfo = "开始回放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "开始回放失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } + }; + + if (oWndInfo != null) { + // 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + startPlayback(); + }, + }); + } else { + startPlayback(); + } +} + +// 停止回放 +function clickStopPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "停止回放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "停止回放失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 开始倒放 +function clickReversePlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) { + // 零通道不支持倒放 + return; + } + + var reversePlayback = function () { + WebVideoCtrl.I_ReversePlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + }).then( + () => { + szInfo = "开始倒放成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "开始倒放失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + } + ); + }; + + if (oWndInfo != null) { + // 已经在播放了,先停止 + WebVideoCtrl.I_Stop({ + success: function () { + reversePlayback(); + }, + }); + } else { + reversePlayback(); + } +} + +// 单帧 +function clickFrame() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Frame({ + success: function () { + szInfo = "单帧播放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "单帧播放失败!"; + showOPInfo( + szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 暂停 +function clickPause() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Pause({ + success: function () { + szInfo = "暂停成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "暂停失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 恢复 +function clickResume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Resume({ + success: function () { + szInfo = "恢复成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "恢复失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 慢放 +function clickPlaySlow() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlaySlow({ + success: function () { + szInfo = "慢放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "慢放失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 快放 +function clickPlayFast() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlayFast({ + success: function () { + szInfo = "快放成功!"; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "快放失败!"; + showOPInfo( + oWndInfo.szDeviceIdentify + szInfo, + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// OSD时间 +function clickGetOSDTime() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_GetOSDTime({ + success: function (szOSDTime) { + $("#osdtime").val(szOSDTime); + showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 获取OSD时间失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 下载录像 +var g_iDownloadID = -1; +var g_tDownloadProcess = 0; +function clickStartDownloadRecord(i) { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd" + i).data("fileName"), + szPlaybackURI = $("#downloadTd" + i).data("playbackURI"); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_StartDownloadRecord( + szDeviceIdentify, + szPlaybackURI, + szFileName, + { + bDateDir: true, //是否生成日期文件 + } + ).then( + (iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + i + ")", 1000); + }, + (oError) => { + WebVideoCtrl.I_GetLastError().then((iErrorValue) => { + if (34 == iErrorValue) { + showOPInfo(szDeviceIdentify + " 已下载!"); + } else if (33 == iErrorValue) { + showOPInfo(szDeviceIdentify + " 空间不足!"); + } else { + showOPInfo(szDeviceIdentify + " 下载失败!"); + } + }); + } + ); +} +function clickStartDownloadRecordByTime() { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd0").data("fileName"), + szPlaybackURI = $("#downloadTd0").data("playbackURI"), + szStartTime = $("#downloadstarttime").val(), + szEndTime = $("#downloadendtime").val(); + if (null == szDeviceIdentify) { + return; + } + if ( + Date.parse(szEndTime.replace(/-/g, "/")) - + Date.parse(szStartTime.replace(/-/g, "/")) < + 0 + ) { + alert("开始时间大于结束时间"); + return; + } + WebVideoCtrl.I_StartDownloadRecordByTime( + szDeviceIdentify, + szPlaybackURI, + szFileName, + szStartTime, + szEndTime, + { + bDateDir: true, //是否生成日期文件 + } + ).then( + (iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + 0 + ")", 1000); + }, + (oError) => { + showOPInfo(szDeviceIdentify + " 下载失败!"); + } + ); +} + +function clickStopDownload() { + WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID).then( + () => { + showOPInfo("停止下载成功!"); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + $("#downProcess").remove(); + }, + (oError) => { + showOPInfo( + szDeviceIdentify + " 停止下载失败!", + oError.errorCode, + oError.errorMsg + ); + } + ); +} +// 下载进度 +async function downProcess() { + var iStatus = await WebVideoCtrl.I_GetDownloadStatus(g_iDownloadID); + if (0 == iStatus) { + $("#downProcess").css({ + width: $("#searchlist").width() + "px", + height: "100px", + lineHeight: "100px", + left: $("#searchdiv").offset().left + "px", + top: $("#searchdiv").offset().top + "px", + }); + var iProcess = await WebVideoCtrl.I_GetDownloadProgress(g_iDownloadID); + if (iProcess < 0) { + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } else if (iProcess < 100) { + $("#downProcess").text(iProcess + "%"); + } else { + $("#downProcess").text("100%"); + setTimeout(function () { + $("#downProcess").remove(); + }, 1000); + + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + showOPInfo("录像下载完成!"); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } + } else { + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } +} + +// 导出配置文件 +function clickExportDeviceConfig() { + var szDeviceIdentify = $("#ip").val(), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + var szDevicePassWord = $("#edfpassword").val(); + + WebVideoCtrl.I_ExportDeviceConfig(szDeviceIdentify, szDevicePassWord).then( + () => { + szInfo = "导出配置文件成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + (oError) => { + szInfo = "导出配置文件失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 导入配置文件 +function clickImportDeviceConfig() { + var szDeviceIdentify = $("#ip").val(), + szFileName = $("#configFile").val(), + szDevicePassWord = $("#edfpassword").val(), + szInfo = ""; + if (null == szDeviceIdentify) { + return; + } + + if ("" == szFileName) { + alert("请选择配置文件!"); + return; + } + + WebVideoCtrl.I_ImportDeviceConfig( + szDeviceIdentify, + szFileName, + szDevicePassWord + ).then( + () => { + szInfo = "导入成功!"; + showOPInfo(szDeviceIdentify + " " + szInfo); + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function (xmlDoc) { + $("
重启中...
").appendTo( + "body" + ); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0, + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 重启失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + }, + (oError) => { + szInfo = "导入失败!"; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + ); +} + +// 重连 +function reconnect(szDeviceIdentify) { + WebVideoCtrl.I_Reconnect(szDeviceIdentify, { + timeout: 3000, + success: function (xmlDoc) { + $("#restartDiv").remove(); + }, + error: function () { + setTimeout(function () { + reconnect(szDeviceIdentify); + }, 5000); + }, + }); +} + +// 开始升级 +var g_tUpgrade = 0; +function clickStartUpgrade(szDeviceIdentify) { + var szDeviceIdentify = $("#ip").val(), + szFileName = $("#upgradeFile").val(); + + if (null == szDeviceIdentify) { + return; + } + + if ("" == szFileName) { + alert("请选择升级文件!"); + return; + } + WebVideoCtrl.I_StartUpgrade(szDeviceIdentify, szFileName).then( + function () { + g_tUpgrade = setInterval( + "getUpgradeStatus('" + szDeviceIdentify + "')", + 1000 + ); + }, + function () { + clearInterval(g_tUpgrade); + showOPInfo(szDeviceIdentify + " 升级失败!"); + } + ); +} + +// 获取升级状态 +async function getUpgradeStatus(szDeviceIdentify) { + var bUpdating = await WebVideoCtrl.I_UpgradeStatus(szDeviceIdentify); + if (bUpdating) { + var iProcess = await WebVideoCtrl.I_UpgradeProgress(szDeviceIdentify); + if (iProcess < 0) { + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + showOPInfo(szDeviceIdentify + " 获取进度失败!"); + return; + } else if (iProcess < 100) { + if (0 == $("#restartDiv").length) { + $("
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0, + }); + } + $("#restartDiv").text(iProcess + "%"); + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function (xmlDoc) { + $("
重启中...
").appendTo( + "body" + ); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0, + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 重启失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function () { + $("
重启中...
").appendTo( + "body" + ); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0, + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo( + szDeviceIdentify + " 重启失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 检查插件版本 +function clickCheckPluginVersion() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_CheckPluginVersion().then( + (bNeedUpdate) => { + if (bNeedUpdate) { + alert("检测到新的插件版本!"); + } else { + alert("您的插件版本已经是最新的!"); + } + }, + () => { + showOPInfo(szDeviceIdentify + " 检测插件新版本失败"); + } + ); +} + +function clickRestoreDefault() { + var szDeviceIdentify = $("#ip").val(), + szMode = "basic"; + WebVideoCtrl.I_RestoreDefault(szDeviceIdentify, szMode).then( + () => { + $("#restartDiv").remove(); + showOPInfo(szDeviceIdentify + " 恢复默认参数成功!"); + }, + (oError) => { + showOPInfo( + szDeviceIdentify + " 恢复默认参数失败!", + oError.errorCode, + oError.errorMsg + ); + } + ); +} + +function PTZZoomIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(10, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 调焦+失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZZoomout() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 调焦-失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZZoomStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 调焦停止失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZFocusIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 聚焦+失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZFoucusOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(13, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 聚焦-失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZFoucusStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 聚焦停止失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZIrisIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 光圈+失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZIrisOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(15, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 光圈-失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +function PTZIrisStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止成功!"); + }, + error: function (oError) { + showOPInfo( + oWndInfo.szDeviceIdentify + " 光圈停止失败!", + oError.errorCode, + oError.errorMsg + ); + }, + }); + } +} + +// 切换模式 +function changeIPMode(iType) { + var arrPort = [0, 7071, 80]; + + $("#serverport").val(arrPort[iType]); +} + +// 获取设备IP,B1暂不支持 +// function clickGetDeviceIP() { +// var iDeviceMode = parseInt($("#devicemode").val(), 10), +// szAddress = $("#serveraddress").val(), +// iPort = parseInt($("#serverport").val(), 10) || 0, +// szDeviceID = $("#deviceid").val(), +// szDeviceInfo = ""; + +// szDeviceInfo = WebVideoCtrl.I_GetIPInfoByMode(iDeviceMode, szAddress, iPort, szDeviceID); + +// if ("" == szDeviceInfo) { +// showOPInfo("设备IP和端口解析失败!"); +// } else { +// showOPInfo("设备IP和端口解析成功!"); + +// var arrTemp = szDeviceInfo.split("-"); +// $("#loginip").val(arrTemp[0]); +// $("#deviceport").val(arrTemp[1]); +// } +// } + +// 启用多边形绘制 +var g_bEnableDraw = false; +function clickEnableDraw() { + WebVideoCtrl.I_SetPlayModeType(6).then( + () => { + g_bEnableDraw = true; + showOPInfo("启用绘制成功!"); + }, + (oError) => { + showOPInfo("启用绘制失败!", oError.errorCode, oError.errorMsg); + } + ); +} + +// 禁用多边形绘制 +function clickDisableDraw() { + WebVideoCtrl.I_SetSnapDrawMode(0, -1).then( + () => { + g_bEnableDraw = false; + showOPInfo("禁用绘制成功!"); + }, + (oError) => { + showOPInfo("禁用绘制失败!", oError.errorCode, oError.errorMsg); + } + ); +} + +// 添加图形,最多不超过16个图形 +function clickAddSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var szName = encodeString($("#snapName").val()); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "" + szId + ""; // [1, 32] + szInfo += "0"; //如果想绘制多边形,polygonType指需要改为1 + szInfo += "17"; // [MinClosed, 17] + szInfo += "4"; // [4, 17] + szInfo += "#" + szId + "#" + szName + ""; + szInfo += "false"; + szInfo += "02550"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => { + showOPInfo("添加图形成功!"); + }); + WebVideoCtrl.I_SetSnapDrawMode(g_iWndIndex, 2); +} + +// 删除图形 +function clickDelSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var aShapes = []; + aShapes.push({ + polygonType: 0, + id: szId, + }); + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex, aShapes); +} + +// 获取图形,保存到自己数据库中 +function clickGetSnapPolygon() { + WebVideoCtrl.I_GetSnapPolygonInfo(g_iWndIndex).then((szXml) => { + alert(szXml); + }); +} + +// 设置图形,页面打开时可以设置以前设置过的图形 +function clickSetSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "1"; + szInfo += "1"; + szInfo += "#1#设置1"; + szInfo += "true"; + szInfo += "02550"; + szInfo += ""; + szInfo += "0.7379030.229730"; + szInfo += "0.9475810.804054"; + szInfo += "0.3629030.777027"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + szInfo += "2"; + szInfo += "0"; + szInfo += "#2#设置2"; + szInfo += "true"; + szInfo += "2552550"; + szInfo += ""; + szInfo += "0.20.2"; + szInfo += "0.80.2"; + szInfo += "0.80.8"; + szInfo += "0.20.8"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then( + () => { + showOPInfo("设置图形成功!"); + }, + (oError) => { + showOPInfo("设置图形失败!", oError.errorCode, oError.errorMsg); + } + ); +} + +// 清空图形 +function clickDelAllSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex).then( + () => { + showOPInfo("清空图形成功!"); + }, + (oError) => { + showOPInfo("清空图形失败!", oError.errorCode, oError.errorMsg); + } + ); +} + +// 设备抓图 +function clickDeviceCapturePic() { + var szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + var bZeroChannel = + $("#channels option") + .eq($("#channels").get(0).selectedIndex) + .attr("bZero") == "true" + ? true + : false; + var iChannelID = parseInt($("#channels").val(), 10); + var iResolutionWidth = parseInt($("#resolutionWidth").val(), 10); + var iResolutionHeight = parseInt($("#resolutionHeight").val(), 10); + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) { + // 零通道不支持设备抓图 + return; + } + + var szPicName = + szDeviceIdentify + "_" + iChannelID + "_" + new Date().getTime(); + var iRet = WebVideoCtrl.I_DeviceCapturePic( + szDeviceIdentify, + iChannelID, + szPicName, + { + bDateDir: true, //是否生成日期文件 + iResolutionWidth: iResolutionWidth, + iResolutionHeight: iResolutionHeight, + } + ); + + if (0 == iRet) { + szInfo = "设备抓图成功!"; + } else { + szInfo = "设备抓图失败!"; + } + showOPInfo(szDeviceIdentify + " " + szInfo); +} + +function loadXML(szXml) { + if (null == szXml || "" == szXml) { + return null; + } + + var oXmlDoc = null; + + if (window.DOMParser) { + var oParser = new DOMParser(); + oXmlDoc = oParser.parseFromString(szXml, "text/xml"); + } else { + oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + oXmlDoc.async = false; + oXmlDoc.loadXML(szXml); + } + + return oXmlDoc; +} + +function toXMLStr(oXmlDoc) { + var szXmlDoc = ""; + + try { + var oSerializer = new XMLSerializer(); + szXmlDoc = oSerializer.serializeToString(oXmlDoc); + } catch (e) { + try { + szXmlDoc = oXmlDoc.xml; + } catch (e) { + return ""; + } + } + if (szXmlDoc.indexOf("" + szXmlDoc; + } + + return szXmlDoc; +} + +function encodeString(str) { + if (str) { + return str + .replace(/&/g, "&") + .replace(//g, ">"); + } else { + return ""; + } +} diff --git a/hkws/webs/cn/index.html b/hkws/webs/cn/index.html new file mode 100644 index 0000000000..49ddd4e06c --- /dev/null +++ b/hkws/webs/cn/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/hkws/webs/codebase.zip b/hkws/webs/codebase.zip new file mode 100644 index 0000000000..17098a40f4 Binary files /dev/null and b/hkws/webs/codebase.zip differ diff --git a/hkws/webs/codebase/HCWebSDKPlugin.exe b/hkws/webs/codebase/HCWebSDKPlugin.exe new file mode 100644 index 0000000000..80a030ac7f Binary files /dev/null and b/hkws/webs/codebase/HCWebSDKPlugin.exe differ diff --git a/hkws/webs/codebase/jsVideoPlugin-1.0.0.min.js b/hkws/webs/codebase/jsVideoPlugin-1.0.0.min.js new file mode 100644 index 0000000000..428ea24865 --- /dev/null +++ b/hkws/webs/codebase/jsVideoPlugin-1.0.0.min.js @@ -0,0 +1,37 @@ +/*! {"version":"V1.0.0 build231120","playCrtl":"V7.4.0.1","pluginVersion":"V3.0.7.50","localServiceVersion":"V1.0.38"} */ +(function webpackUniversalModuleDefinition(e,t){if(typeof exports==="object"&&typeof module==="object")module.exports=t();else if(typeof define==="function"&&define.amd)define([],t);else{var n=t();for(var i in n)(typeof exports==="object"?exports:e)[i]=n[i]}})(window,function(){return function(n){var i={};function r(e){if(i[e]){return i[e].exports}var t=i[e]={i:e,l:false,exports:{}};n[e].call(t.exports,t,t.exports,r);t.l=true;return t.exports}r.m=n;r.c=i;r.d=function(e,t,n){if(!r.o(e,t)){Object.defineProperty(e,t,{enumerable:true,get:n})}};r.r=function(e){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(e,"__esModule",{value:true})};r.t=function(t,e){if(e&1)t=r(t);if(e&8)return t;if(e&4&&typeof t==="object"&&t&&t.__esModule)return t;var n=Object.create(null);r.r(n);Object.defineProperty(n,"default",{enumerable:true,value:t});if(e&2&&typeof t!="string")for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n};r.n=function(e){var t=e&&e.__esModule?function n(){return e["default"]}:function i(){return e};r.d(t,"a",t);return t};r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};r.p="";return r(r.s=60)}([function(e,t){(function(){e.exports={Element:1,Attribute:2,Text:3,CData:4,EntityReference:5,EntityDeclaration:6,ProcessingInstruction:7,Comment:8,Document:9,DocType:10,DocumentFragment:11,NotationDeclaration:12,Declaration:201,Raw:202,AttributeDeclaration:203,ElementDeclaration:204,Dummy:205}}).call(this)},function(nn,rn,e){var on,sn; +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +(function(e,t){"use strict";if(true&&typeof nn.exports==="object"){nn.exports=e.document?t(e,true):function(e){if(!e.document){throw new Error("jQuery requires a window with a document")}return t(e)}}else{t(e)}})(typeof window!=="undefined"?window:this,function(C,L){"use strict";var t=[];var F=Object.getPrototypeOf;var a=t.slice;var W=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)};var N=t.push;var B=t.indexOf;var z={};var J=z.toString;var H=z.hasOwnProperty;var U=H.toString;var j=U.call(Object);var v={};var m=function m(e){return typeof e==="function"&&typeof e.nodeType!=="number"&&typeof e.item!=="function"};var y=function y(e){return e!=null&&e===e.window};var k=C.document;var G={type:true,src:true,nonce:true,noModule:true};function V(e,t,n){n=n||k;var i,r,o=n.createElement("script");o.text=e;if(t){for(i in G){r=t[i]||t.getAttribute&&t.getAttribute(i);if(r){o.setAttribute(i,r)}}}n.head.appendChild(o).parentNode.removeChild(o)}function g(e){if(e==null){return e+""}return typeof e==="object"||typeof e==="function"?z[J.call(e)]||"object":typeof e}var Y="3.6.0",T=function(e,t){return new T.fn.init(e,t)};T.fn=T.prototype={jquery:Y,constructor:T,length:0,toArray:function(){return a.call(this)},get:function(e){if(e==null){return a.call(this)}return e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=T.merge(this.constructor(),e);t.prevObject=this;return t},each:function(e){return T.each(this,e)},map:function(n){return this.pushStack(T.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(T.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(T.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e}var e= +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +function(L){var e,p,P,o,F,v,W,N,S,u,l,_,b,r,C,m,s,a,y,k="sizzle"+1*new Date,f=L.document,T=0,B=0,z=i(),J=i(),H=i(),g=i(),U=function(e,t){if(e===t){l=true}return 0},j={}.hasOwnProperty,t=[],G=t.pop,V=t.push,R=t.push,Y=t.slice,w=function(e,t){var n=0,i=e.length;for(;n+~]|"+c+")"+c+"*"),te=new RegExp(c+"|>"),ne=new RegExp(K),ie=new RegExp("^"+n+"$"),h={ID:new RegExp("^#("+n+")"),CLASS:new RegExp("^\\.("+n+")"),TAG:new RegExp("^("+n+"|[*])"),ATTR:new RegExp("^"+Z),PSEUDO:new RegExp("^"+K),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+c+"*(even|odd|(([+-]|)(\\d*)n|)"+c+"*(?:([+-]|)"+c+"*(\\d+)|))"+c+"*\\)|)","i"),bool:new RegExp("^(?:"+X+")$","i"),needsContext:new RegExp("^"+c+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+c+"*((?:-\\d)?\\d*)"+c+"*\\)|)(?=[^-]|$)","i")},re=/HTML$/i,oe=/^(?:input|select|textarea|button)$/i,se=/^h\d$/i,d=/^[^{]+\{\s*\[native \w/,ae=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ue=/[+~]/,x=new RegExp("\\\\[\\da-fA-F]{1,6}"+c+"?|\\\\([^\\r\\n\\f])","g"),I=function(e,t){var n="0x"+e.slice(1)-65536;return t?t:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,n&1023|56320)},le=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,fe=function(e,t){if(t){if(e==="\0"){return"�"}return e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" "}return"\\"+e},ce=function(){_()},he=Se(function(e){return e.disabled===true&&e.nodeName.toLowerCase()==="fieldset"},{dir:"parentNode",next:"legend"});try{R.apply(t=Y.call(f.childNodes),f.childNodes);t[f.childNodes.length].nodeType}catch(M){R={apply:t.length?function(e,t){V.apply(e,Y.call(t))}:function(e,t){var n=e.length,i=0;while(e[n++]=t[i++]){}e.length=n-1}}}function E(e,t,n,i){var r,o,s,a,u,l,f,c=t&&t.ownerDocument,h=t?t.nodeType:9;n=n||[];if(typeof e!=="string"||!e||h!==1&&h!==9&&h!==11){return n}if(!i){_(t);t=t||b;if(C){if(h!==11&&(u=ae.exec(e))){if(r=u[1]){if(h===9){if(s=t.getElementById(r)){if(s.id===r){n.push(s);return n}}else{return n}}else{if(c&&(s=c.getElementById(r))&&y(t,s)&&s.id===r){n.push(s);return n}}}else if(u[2]){R.apply(n,t.getElementsByTagName(e));return n}else if((r=u[3])&&p.getElementsByClassName&&t.getElementsByClassName){R.apply(n,t.getElementsByClassName(r));return n}}if(p.qsa&&!g[e+" "]&&(!m||!m.test(e))&&(h!==1||t.nodeName.toLowerCase()!=="object")){f=e;c=t;if(h===1&&(te.test(e)||ee.test(e))){c=ue.test(e)&&ge(t.parentNode)||t;if(c!==t||!p.scope){if(a=t.getAttribute("id")){a=a.replace(le,fe)}else{t.setAttribute("id",a=k)}}l=v(e);o=l.length;while(o--){l[o]=(a?"#"+a:":scope")+" "+Pe(l[o])}f=l.join(",")}try{R.apply(n,c.querySelectorAll(f));return n}catch(d){g(e,true)}finally{if(a===k){t.removeAttribute("id")}}}}}return N(e.replace(D,"$1"),t,n,i)}function i(){var n=[];function i(e,t){if(n.push(e+" ")>P.cacheLength){delete i[n.shift()]}return i[e+" "]=t}return i}function q(e){e[k]=true;return e}function A(e){var t=b.createElement("fieldset");try{return!!e(t)}catch(M){return false}finally{if(t.parentNode){t.parentNode.removeChild(t)}t=null}}function de(e,t){var n=e.split("|"),i=n.length;while(i--){P.attrHandle[n[i]]=t}}function pe(e,t){var n=t&&e,i=n&&e.nodeType===1&&t.nodeType===1&&e.sourceIndex-t.sourceIndex;if(i){return i}if(n){while(n=n.nextSibling){if(n===t){return-1}}}return e?1:-1}function ve(n){return function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type===n}}function me(n){return function(e){var t=e.nodeName.toLowerCase();return(t==="input"||t==="button")&&e.type===n}}function ye(t){return function(e){if("form"in e){if(e.parentNode&&e.disabled===false){if("label"in e){if("label"in e.parentNode){return e.parentNode.disabled===t}else{return e.disabled===t}}return e.isDisabled===t||e.isDisabled!==!t&&he(e)===t}return e.disabled===t}else if("label"in e){return e.disabled===t}return false}}function O(s){return q(function(o){o=+o;return q(function(e,t){var n,i=s([],e.length,o),r=i.length;while(r--){if(e[n=i[r]]){e[n]=!(t[n]=e[n])}}})})}function ge(e){return e&&typeof e.getElementsByTagName!=="undefined"&&e}p=E.support={};F=E.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!re.test(t||n&&n.nodeName||"HTML")};_=E.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:f;if(i==b||i.nodeType!==9||!i.documentElement){return b}b=i;r=b.documentElement;C=!F(b);if(f!=b&&(n=b.defaultView)&&n.top!==n){if(n.addEventListener){n.addEventListener("unload",ce,false)}else if(n.attachEvent){n.attachEvent("onunload",ce)}}p.scope=A(function(e){r.appendChild(e).appendChild(b.createElement("div"));return typeof e.querySelectorAll!=="undefined"&&!e.querySelectorAll(":scope fieldset div").length});p.attributes=A(function(e){e.className="i";return!e.getAttribute("className")});p.getElementsByTagName=A(function(e){e.appendChild(b.createComment(""));return!e.getElementsByTagName("*").length});p.getElementsByClassName=d.test(b.getElementsByClassName);p.getById=A(function(e){r.appendChild(e).id=k;return!b.getElementsByName||!b.getElementsByName(k).length});if(p.getById){P.filter["ID"]=function(e){var t=e.replace(x,I);return function(e){return e.getAttribute("id")===t}};P.find["ID"]=function(e,t){if(typeof t.getElementById!=="undefined"&&C){var n=t.getElementById(e);return n?[n]:[]}}}else{P.filter["ID"]=function(e){var n=e.replace(x,I);return function(e){var t=typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id");return t&&t.value===n}};P.find["ID"]=function(e,t){if(typeof t.getElementById!=="undefined"&&C){var n,i,r,o=t.getElementById(e);if(o){n=o.getAttributeNode("id");if(n&&n.value===e){return[o]}r=t.getElementsByName(e);i=0;while(o=r[i++]){n=o.getAttributeNode("id");if(n&&n.value===e){return[o]}}}return[]}}}P.find["TAG"]=p.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!=="undefined"){return t.getElementsByTagName(e)}else if(p.qsa){return t.querySelectorAll(e)}}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if(e==="*"){while(n=o[r++]){if(n.nodeType===1){i.push(n)}}return i}return o};P.find["CLASS"]=p.getElementsByClassName&&function(e,t){if(typeof t.getElementsByClassName!=="undefined"&&C){return t.getElementsByClassName(e)}};s=[];m=[];if(p.qsa=d.test(b.querySelectorAll)){A(function(e){var t;r.appendChild(e).innerHTML=""+"";if(e.querySelectorAll("[msallowcapture^='']").length){m.push("[*^$]="+c+"*(?:''|\"\")")}if(!e.querySelectorAll("[selected]").length){m.push("\\["+c+"*(?:value|"+X+")")}if(!e.querySelectorAll("[id~="+k+"-]").length){m.push("~=")}t=b.createElement("input");t.setAttribute("name","");e.appendChild(t);if(!e.querySelectorAll("[name='']").length){m.push("\\["+c+"*name"+c+"*="+c+"*(?:''|\"\")")}if(!e.querySelectorAll(":checked").length){m.push(":checked")}if(!e.querySelectorAll("a#"+k+"+*").length){m.push(".#.+[+~]")}e.querySelectorAll("\\\f");m.push("[\\r\\n\\f]")});A(function(e){e.innerHTML=""+"";var t=b.createElement("input");t.setAttribute("type","hidden");e.appendChild(t).setAttribute("name","D");if(e.querySelectorAll("[name=d]").length){m.push("name"+c+"*[*^$|!~]?=")}if(e.querySelectorAll(":enabled").length!==2){m.push(":enabled",":disabled")}r.appendChild(e).disabled=true;if(e.querySelectorAll(":disabled").length!==2){m.push(":enabled",":disabled")}e.querySelectorAll("*,:x");m.push(",.*:")})}if(p.matchesSelector=d.test(a=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.oMatchesSelector||r.msMatchesSelector)){A(function(e){p.disconnectedMatch=a.call(e,"*");a.call(e,"[s!='']:x");s.push("!=",K)})}m=m.length&&new RegExp(m.join("|"));s=s.length&&new RegExp(s.join("|"));t=d.test(r.compareDocumentPosition);y=t||d.test(r.contains)?function(e,t){var n=e.nodeType===9?e.documentElement:e,i=t&&t.parentNode;return e===i||!!(i&&i.nodeType===1&&(n.contains?n.contains(i):e.compareDocumentPosition&&e.compareDocumentPosition(i)&16))}:function(e,t){if(t){while(t=t.parentNode){if(t===e){return true}}}return false};U=t?function(e,t){if(e===t){l=true;return 0}var n=!e.compareDocumentPosition-!t.compareDocumentPosition;if(n){return n}n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1;if(n&1||!p.sortDetached&&t.compareDocumentPosition(e)===n){if(e==b||e.ownerDocument==f&&y(f,e)){return-1}if(t==b||t.ownerDocument==f&&y(f,t)){return 1}return u?w(u,e)-w(u,t):0}return n&4?-1:1}:function(e,t){if(e===t){l=true;return 0}var n,i=0,r=e.parentNode,o=t.parentNode,s=[e],a=[t];if(!r||!o){return e==b?-1:t==b?1:r?-1:o?1:u?w(u,e)-w(u,t):0}else if(r===o){return pe(e,t)}n=e;while(n=n.parentNode){s.unshift(n)}n=t;while(n=n.parentNode){a.unshift(n)}while(s[i]===a[i]){i++}return i?pe(s[i],a[i]):s[i]==f?-1:a[i]==f?1:0};return b};E.matches=function(e,t){return E(e,null,null,t)};E.matchesSelector=function(e,t){_(e);if(p.matchesSelector&&C&&!g[t+" "]&&(!s||!s.test(t))&&(!m||!m.test(t))){try{var n=a.call(e,t);if(n||p.disconnectedMatch||e.document&&e.document.nodeType!==11){return n}}catch(M){g(t,true)}}return E(t,b,null,[e]).length>0};E.contains=function(e,t){if((e.ownerDocument||e)!=b){_(e)}return y(e,t)};E.attr=function(e,t){if((e.ownerDocument||e)!=b){_(e)}var n=P.attrHandle[t.toLowerCase()],i=n&&j.call(P.attrHandle,t.toLowerCase())?n(e,t,!C):undefined;return i!==undefined?i:p.attributes||!C?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null};E.escape=function(e){return(e+"").replace(le,fe)};E.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};E.uniqueSort=function(e){var t,n=[],i=0,r=0;l=!p.detectDuplicates;u=!p.sortStable&&e.slice(0);e.sort(U);if(l){while(t=e[r++]){if(t===e[r]){i=n.push(r)}}while(i--){e.splice(n[i],1)}}u=null;return e};o=E.getText=function(e){var t,n="",i=0,r=e.nodeType;if(!r){while(t=e[i++]){n+=o(t)}}else if(r===1||r===9||r===11){if(typeof e.textContent==="string"){return e.textContent}else{for(e=e.firstChild;e;e=e.nextSibling){n+=o(e)}}}else if(r===3||r===4){return e.nodeValue}return n};P=E.selectors={cacheLength:50,createPseudo:q,match:h,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(x,I);e[3]=(e[3]||e[4]||e[5]||"").replace(x,I);if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1].slice(0,3)==="nth"){if(!e[3]){E.error(e[0])}e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd"));e[5]=+(e[7]+e[8]||e[3]==="odd")}else if(e[3]){E.error(e[0])}return e},PSEUDO:function(e){var t,n=!e[6]&&e[2];if(h["CHILD"].test(e[0])){return null}if(e[3]){e[2]=e[4]||e[5]||""}else if(n&&ne.test(n)&&(t=v(n,true))&&(t=n.indexOf(")",n.length-t)-n.length)){e[0]=e[0].slice(0,t);e[2]=n.slice(0,t)}return e.slice(0,3)}},filter:{TAG:function(e){var t=e.replace(x,I).toLowerCase();return e==="*"?function(){return true}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+c+")"+e+"("+c+"|$)"))&&z(e,function(e){return t.test(typeof e.className==="string"&&e.className||typeof e.getAttribute!=="undefined"&&e.getAttribute("class")||"")})},ATTR:function(n,i,r){return function(e){var t=E.attr(e,n);if(t==null){return i==="!="}if(!i){return true}t+="";return i==="="?t===r:i==="!="?t!==r:i==="^="?r&&t.indexOf(r)===0:i==="*="?r&&t.indexOf(r)>-1:i==="$="?r&&t.slice(-r.length)===r:i==="~="?(" "+t.replace($," ")+" ").indexOf(r)>-1:i==="|="?t===r||t.slice(0,r.length+1)===r+"-":false}},CHILD:function(p,e,t,v,m){var y=p.slice(0,3)!=="nth",g=p.slice(-4)!=="last",w=e==="of-type";return v===1&&m===0?function(e){return!!e.parentNode}:function(e,t,n){var i,r,o,s,a,u,l=y!==g?"nextSibling":"previousSibling",f=e.parentNode,c=w&&e.nodeName.toLowerCase(),h=!n&&!w,d=false;if(f){if(y){while(l){s=e;while(s=s[l]){if(w?s.nodeName.toLowerCase()===c:s.nodeType===1){return false}}u=l=p==="only"&&!u&&"nextSibling"}return true}u=[g?f.firstChild:f.lastChild];if(g&&h){s=f;o=s[k]||(s[k]={});r=o[s.uniqueID]||(o[s.uniqueID]={});i=r[p]||[];a=i[0]===T&&i[1];d=a&&i[2];s=a&&f.childNodes[a];while(s=++a&&s&&s[l]||(d=a=0)||u.pop()){if(s.nodeType===1&&++d&&s===e){r[p]=[T,a,d];break}}}else{if(h){s=e;o=s[k]||(s[k]={});r=o[s.uniqueID]||(o[s.uniqueID]={});i=r[p]||[];a=i[0]===T&&i[1];d=a}if(d===false){while(s=++a&&s&&s[l]||(d=a=0)||u.pop()){if((w?s.nodeName.toLowerCase()===c:s.nodeType===1)&&++d){if(h){o=s[k]||(s[k]={});r=o[s.uniqueID]||(o[s.uniqueID]={});r[p]=[T,d]}if(s===e){break}}}}}d-=m;return d===v||d%v===0&&d/v>=0}}},PSEUDO:function(e,o){var t,s=P.pseudos[e]||P.setFilters[e.toLowerCase()]||E.error("unsupported pseudo: "+e);if(s[k]){return s(o)}if(s.length>1){t=[e,e,"",o];return P.setFilters.hasOwnProperty(e.toLowerCase())?q(function(e,t){var n,i=s(e,o),r=i.length;while(r--){n=w(e,i[r]);e[n]=!(t[n]=i[r])}}):function(e){return s(e,0,t)}}return s}},pseudos:{not:q(function(e){var i=[],r=[],a=W(e.replace(D,"$1"));return a[k]?q(function(e,t,n,i){var r,o=a(e,null,i,[]),s=e.length;while(s--){if(r=o[s]){e[s]=!(t[s]=r)}}}):function(e,t,n){i[0]=e;a(i,null,n,r);i[0]=null;return!r.pop()}}),has:q(function(t){return function(e){return E(t,e).length>0}}),contains:q(function(t){t=t.replace(x,I);return function(e){return(e.textContent||o(e)).indexOf(t)>-1}}),lang:q(function(n){if(!ie.test(n||"")){E.error("unsupported lang: "+n)}n=n.replace(x,I).toLowerCase();return function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang")){t=t.toLowerCase();return t===n||t.indexOf(n+"-")===0}}while((e=e.parentNode)&&e.nodeType===1);return false}}),target:function(e){var t=L.location&&L.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===b.activeElement&&(!b.hasFocus||b.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ye(false),disabled:ye(true),checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling){if(e.nodeType<6){return false}}return true},parent:function(e){return!P.pseudos["empty"](e)},header:function(e){return se.test(e.nodeName)},input:function(e){return oe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},text:function(e){var t;return e.nodeName.toLowerCase()==="input"&&e.type==="text"&&((t=e.getAttribute("type"))==null||t.toLowerCase()==="text")},first:O(function(){return[0]}),last:O(function(e,t){return[t-1]}),eq:O(function(e,t,n){return[n<0?n+t:n]}),even:O(function(e,t){var n=0;for(;nt?t:n;for(;--i>=0;){e.push(i)}return e}),gt:O(function(e,t,n){var i=n<0?n+t:n;for(;++i1?function(e,t,n){var i=r.length;while(i--){if(!r[i](e,t,n)){return false}}return true}:r[0]}function be(e,t,n){var i=0,r=t.length;for(;i-1){e[r]=!(t[r]=s)}}}}else{h=Ce(h===t?h.splice(l,h.length):h);if(y){y(null,t,h,i)}else{R.apply(t,h)}}})}function Te(e){var r,t,n,i=e.length,o=P.relative[e[0].type],s=o||P.relative[" "],a=o?1:0,u=Se(function(e){return e===r},s,true),l=Se(function(e){return w(r,e)>-1},s,true),f=[function(e,t,n){var i=!o&&(n||t!==S)||((r=t).nodeType?u(e,t,n):l(e,t,n));r=null;return i}];for(;a1&&_e(f),a>1&&Pe(e.slice(0,a-1).concat({value:e[a-2].type===" "?"*":""})).replace(D,"$1"),t,a0,w=m.length>0,e=function(e,t,n,i,r){var o,s,a,u=0,l="0",f=e&&[],c=[],h=S,d=e||w&&P.find["TAG"]("*",r),p=T+=h==null?1:Math.random()||.1,v=d.length;if(r){S=t==b||t||r}for(;l!==v&&(o=d[l])!=null;l++){if(w&&o){s=0;if(!t&&o.ownerDocument!=b){_(o);n=!C}while(a=m[s++]){if(a(o,t||b,n)){i.push(o);break}}if(r){T=p}}if(g){if(o=!a&&o){u--}if(e){f.push(o)}}}u+=l;if(g&&l!==u){s=0;while(a=y[s++]){a(f,c,t,n)}if(e){if(u>0){while(l--){if(!(f[l]||c[l])){c[l]=G.call(i)}}}c=Ce(c)}R.apply(i,c);if(r&&!e&&c.length>0&&u+y.length>1){E.uniqueSort(i)}}if(r){T=p;S=h}return f};return g?q(e):e}W=E.compile=function(e,t){var n,i=[],r=[],o=H[e+" "];if(!o){if(!t){t=v(e)}n=t.length;while(n--){o=Te(t[n]);if(o[k]){i.push(o)}else{r.push(o)}}o=H(e,Re(r,i));o.selector=e}return o};N=E.select=function(e,t,n,i){var r,o,s,a,u,l=typeof e==="function"&&e,f=!i&&v(e=l.selector||e);n=n||[];if(f.length===1){o=f[0]=f[0].slice(0);if(o.length>2&&(s=o[0]).type==="ID"&&t.nodeType===9&&C&&P.relative[o[1].type]){t=(P.find["ID"](s.matches[0].replace(x,I),t)||[])[0];if(!t){return n}else if(l){t=t.parentNode}e=e.slice(o.shift().value.length)}r=h["needsContext"].test(e)?0:o.length;while(r--){s=o[r];if(P.relative[a=s.type]){break}if(u=P.find[a]){if(i=u(s.matches[0].replace(x,I),ue.test(o[0].type)&&ge(t.parentNode)||t)){o.splice(r,1);e=i.length&&Pe(o);if(!e){R.apply(n,i);return n}break}}}}(l||W(e,f))(i,t,!C,n,!t||ue.test(e)&&ge(t.parentNode)||t);return n};p.sortStable=k.split("").sort(U).join("")===k;p.detectDuplicates=!!l;_();p.sortDetached=A(function(e){return e.compareDocumentPosition(b.createElement("fieldset"))&1});if(!A(function(e){e.innerHTML="";return e.firstChild.getAttribute("href")==="#"})){de("type|href|height|width",function(e,t,n){if(!n){return e.getAttribute(t,t.toLowerCase()==="type"?1:2)}})}if(!p.attributes||!A(function(e){e.innerHTML="";e.firstChild.setAttribute("value","");return e.firstChild.getAttribute("value")===""})){de("value",function(e,t,n){if(!n&&e.nodeName.toLowerCase()==="input"){return e.defaultValue}})}if(!A(function(e){return e.getAttribute("disabled")==null})){de(X,function(e,t,n){var i;if(!n){return e[t]===true?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}})}return E}(C);T.find=e;T.expr=e.selectors;T.expr[":"]=T.expr.pseudos;T.uniqueSort=T.unique=e.uniqueSort;T.text=e.getText;T.isXMLDoc=e.isXML;T.contains=e.contains;T.escapeSelector=e.escape;var i=function(e,t,n){var i=[],r=n!==undefined;while((e=e[t])&&e.nodeType!==9){if(e.nodeType===1){if(r&&T(e).is(n)){break}i.push(e)}}return i};var Z=function(e,t){var n=[];for(;e;e=e.nextSibling){if(e.nodeType===1&&e!==t){n.push(e)}}return n};var K=T.expr.match.needsContext;function l(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var $=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Q(e,n,i){if(m(n)){return T.grep(e,function(e,t){return!!n.call(e,t,e)!==i})}if(n.nodeType){return T.grep(e,function(e){return e===n!==i})}if(typeof n!=="string"){return T.grep(e,function(e){return B.call(n,e)>-1!==i})}return T.filter(n,e,i)}T.filter=function(e,t,n){var i=t[0];if(n){e=":not("+e+")"}if(t.length===1&&i.nodeType===1){return T.find.matchesSelector(i,e)?[i]:[]}return T.find.matches(e,T.grep(t,function(e){return e.nodeType===1}))};T.fn.extend({find:function(e){var t,n,i=this.length,r=this;if(typeof e!=="string"){return this.pushStack(T(e).filter(function(){for(t=0;t1?T.uniqueSort(n):n},filter:function(e){return this.pushStack(Q(this,e||[],false))},not:function(e){return this.pushStack(Q(this,e||[],true))},is:function(e){return!!Q(this,typeof e==="string"&&K.test(e)?T(e):e||[],false).length}});var ee,te=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,ne=T.fn.init=function(e,t,n){var i,r;if(!e){return this}n=n||ee;if(typeof e==="string"){if(e[0]==="<"&&e[e.length-1]===">"&&e.length>=3){i=[null,e,null]}else{i=te.exec(e)}if(i&&(i[1]||!t)){if(i[1]){t=t instanceof T?t[0]:t;T.merge(this,T.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:k,true));if($.test(i[1])&&T.isPlainObject(t)){for(i in t){if(m(this[i])){this[i](t[i])}else{this.attr(i,t[i])}}}return this}else{r=k.getElementById(i[2]);if(r){this[0]=r;this.length=1}return this}}else if(!t||t.jquery){return(t||n).find(e)}else{return this.constructor(t).find(e)}}else if(e.nodeType){this[0]=e;this.length=1;return this}else if(m(e)){return n.ready!==undefined?n.ready(e):e(T)}return T.makeArray(e,this)};ne.prototype=T.fn;ee=T(k);var ie=/^(?:parents|prev(?:Until|All))/,re={children:true,contents:true,next:true,prev:true};T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter(function(){var e=0;for(;e-1:n.nodeType===1&&T.find.matchesSelector(n,e))){o.push(n);break}}}}return this.pushStack(o.length>1?T.uniqueSort(o):o)},index:function(e){if(!e){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1}if(typeof e==="string"){return B.call(T(e),this[0])}return B.call(this,e.jquery?e[0]:e)},add:function(e,t){return this.pushStack(T.uniqueSort(T.merge(this.get(),T(e,t))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function oe(e,t){while((e=e[t])&&e.nodeType!==1){}return e}T.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return i(e,"parentNode")},parentsUntil:function(e,t,n){return i(e,"parentNode",n)},next:function(e){return oe(e,"nextSibling")},prev:function(e){return oe(e,"previousSibling")},nextAll:function(e){return i(e,"nextSibling")},prevAll:function(e){return i(e,"previousSibling")},nextUntil:function(e,t,n){return i(e,"nextSibling",n)},prevUntil:function(e,t,n){return i(e,"previousSibling",n)},siblings:function(e){return Z((e.parentNode||{}).firstChild,e)},children:function(e){return Z(e.firstChild)},contents:function(e){if(e.contentDocument!=null&&F(e.contentDocument)){return e.contentDocument}if(l(e,"template")){e=e.content||e}return T.merge([],e.childNodes)}},function(i,r){T.fn[i]=function(e,t){var n=T.map(this,r,e);if(i.slice(-5)!=="Until"){t=e}if(t&&typeof t==="string"){n=T.filter(t,n)}if(this.length>1){if(!re[i]){T.uniqueSort(n)}if(ie.test(i)){n.reverse()}}return this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function se(e){var n={};T.each(e.match(R)||[],function(e,t){n[t]=true});return n}T.Callbacks=function(i){i=typeof i==="string"?se(i):T.extend({},i);var r,e,t,n,o=[],s=[],a=-1,u=function(){n=n||i.once;t=r=true;for(;s.length;a=-1){e=s.shift();while(++a-1){o.splice(n,1);if(n<=a){a--}}});return this},has:function(e){return e?T.inArray(e,o)>-1:o.length>0},empty:function(){if(o){o=[]}return this},disable:function(){n=s=[];o=e="";return this},disabled:function(){return!o},lock:function(){n=s=[];if(!e&&!r){o=e=""}return this},locked:function(){return!!n},fireWith:function(e,t){if(!n){t=t||[];t=[e,t.slice?t.slice():t];s.push(t);if(!r){u()}}return this},fire:function(){l.fireWith(this,arguments);return this},fired:function(){return!!t}};return l};function c(e){return e}function ae(e){throw e}function ue(e,t,n,i){var r;try{if(e&&m(r=e.promise)){r.call(e).done(t).fail(n)}else if(e&&m(r=e.then)){r.call(e,t,n)}else{t.apply(undefined,[e].slice(i))}}catch(e){n.apply(undefined,[e])}}T.extend({Deferred:function(e){var o=[["notify","progress",T.Callbacks("memory"),T.Callbacks("memory"),2],["resolve","done",T.Callbacks("once memory"),T.Callbacks("once memory"),0,"resolved"],["reject","fail",T.Callbacks("once memory"),T.Callbacks("once memory"),1,"rejected"]],r="pending",s={state:function(){return r},always:function(){a.done(arguments).fail(arguments);return this},"catch":function(e){return s.then(null,e)},pipe:function(){var r=arguments;return T.Deferred(function(i){T.each(o,function(e,t){var n=m(r[t[4]])&&r[t[4]];a[t[1]](function(){var e=n&&n.apply(this,arguments);if(e&&m(e.promise)){e.promise().progress(i.notify).done(i.resolve).fail(i.reject)}else{i[t[0]+"With"](this,n?[e]:arguments)}})});r=null}).promise()},then:function(t,n,i){var l=0;function f(o,s,a,u){return function(){var n=this,i=arguments,t=function(){var e,t;if(o=l){if(a!==ae){n=undefined;i=[e]}s.rejectWith(n,i)}}};if(o){r()}else{if(T.Deferred.getStackHook){r.stackTrace=T.Deferred.getStackHook()}C.setTimeout(r)}}}return T.Deferred(function(e){o[0][3].add(f(0,e,m(i)?i:c,e.notifyWith));o[1][3].add(f(0,e,m(t)?t:c));o[2][3].add(f(0,e,m(n)?n:ae))}).promise()},promise:function(e){return e!=null?T.extend(e,s):s}},a={};T.each(o,function(e,t){var n=t[2],i=t[5];s[t[1]]=n.add;if(i){n.add(function(){r=i},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock)}n.add(t[3].fire);a[t[0]]=function(){a[t[0]+"With"](this===a?undefined:this,arguments);return this};a[t[0]+"With"]=n.fireWith});s.promise(a);if(e){e.call(a,a)}return a},when:function(e){var n=arguments.length,t=n,i=Array(t),r=a.call(arguments),o=T.Deferred(),s=function(t){return function(e){i[t]=this;r[t]=arguments.length>1?a.call(arguments):e;if(!--n){o.resolveWith(i,r)}}};if(n<=1){ue(e,o.done(s(t)).resolve,o.reject,!n);if(o.state()==="pending"||m(r[t]&&r[t].then)){return o.then()}}while(t--){ue(r[t],s(t),o.reject)}return o.promise()}});var le=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;T.Deferred.exceptionHook=function(e,t){if(C.console&&C.console.warn&&e&&le.test(e.name)){C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)}};T.readyException=function(e){C.setTimeout(function(){throw e})};var fe=T.Deferred();T.fn.ready=function(e){fe.then(e)["catch"](function(e){T.readyException(e)});return this};T.extend({isReady:false,readyWait:1,ready:function(e){if(e===true?--T.readyWait:T.isReady){return}T.isReady=true;if(e!==true&&--T.readyWait>0){return}fe.resolveWith(k,[T])}});T.ready.then=fe.then;function ce(){k.removeEventListener("DOMContentLoaded",ce);C.removeEventListener("load",ce);T.ready()}if(k.readyState==="complete"||k.readyState!=="loading"&&!k.documentElement.doScroll){C.setTimeout(T.ready)}else{k.addEventListener("DOMContentLoaded",ce);C.addEventListener("load",ce)}var f=function(e,t,n,i,r,o,s){var a=0,u=e.length,l=n==null;if(g(n)==="object"){r=true;for(a in n){f(e,t,a,n[a],true,o,s)}}else if(i!==undefined){r=true;if(!m(i)){s=true}if(l){if(s){t.call(e,i);t=null}else{l=t;t=function(e,t,n){return l.call(T(e),n)}}}if(t){for(;a1,null,true)},removeData:function(e){return this.each(function(){d.remove(this,e)})}});T.extend({queue:function(e,t,n){var i;if(e){t=(t||"fx")+"queue";i=P.get(e,t);if(n){if(!i||Array.isArray(n)){i=P.access(e,t,T.makeArray(n))}else{i.push(n)}}return i||[]}},dequeue:function(e,t){t=t||"fx";var n=T.queue(e,t),i=n.length,r=n.shift(),o=T._queueHooks(e,t),s=function(){T.dequeue(e,t)};if(r==="inprogress"){r=n.shift();i--}if(r){if(t==="fx"){n.unshift("inprogress")}delete o.stop;r.call(e,s,o)}if(!i&&o){o.empty.fire()}},_queueHooks:function(e,t){var n=t+"queueHooks";return P.get(e,n)||P.access(e,n,{empty:T.Callbacks("once memory").add(function(){P.remove(e,[t+"queue",n])})})}});T.fn.extend({queue:function(t,n){var e=2;if(typeof t!=="string"){n=t;t="fx";e--}if(arguments.length\x20\t\r\n\f]*)/i;var Te=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=k.createDocumentFragment(),t=e.appendChild(k.createElement("div")),n=k.createElement("input");n.setAttribute("type","radio");n.setAttribute("checked","checked");n.setAttribute("name","t");t.appendChild(n);v.checkClone=t.cloneNode(true).cloneNode(true).lastChild.checked;t.innerHTML="";v.noCloneChecked=!!t.cloneNode(true).lastChild.defaultValue;t.innerHTML="";v.option=!!t.lastChild})();var x={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};x.tbody=x.tfoot=x.colgroup=x.caption=x.thead;x.th=x.td;if(!v.option){x.optgroup=x.option=[1,""]}function I(e,t){var n;if(typeof e.getElementsByTagName!=="undefined"){n=e.getElementsByTagName(t||"*")}else if(typeof e.querySelectorAll!=="undefined"){n=e.querySelectorAll(t||"*")}else{n=[]}if(t===undefined||t&&l(e,t)){return T.merge([e],n)}return n}function Re(e,t){var n=0,i=e.length;for(;n-1){if(r){r.push(o)}continue}l=b(o);s=I(c.appendChild(o),"script");if(l){Re(s)}if(n){f=0;while(o=s[f++]){if(Te.test(o.type||"")){n.push(o)}}}}return c}var Ie=/^([^.]*)(?:\.(.+)|)/;function s(){return true}function u(){return false}function Ee(e,t){return e===qe()===(t==="focus")}function qe(){try{return k.activeElement}catch(e){}}function Ae(e,t,n,i,r,o){var s,a;if(typeof t==="object"){if(typeof n!=="string"){i=i||n;n=undefined}for(a in t){Ae(e,a,n,i,t[a],o)}return e}if(i==null&&r==null){r=n;i=n=undefined}else if(r==null){if(typeof n==="string"){r=i;i=undefined}else{r=i;i=n;n=undefined}}if(r===false){r=u}else if(!r){return e}if(o===1){s=r;r=function(e){T().off(e);return s.apply(this,arguments)};r.guid=s.guid||(s.guid=T.guid++)}return e.each(function(){T.event.add(this,t,r,i,n)})}T.event={global:{},add:function(t,e,n,i,r){var o,s,a,u,l,f,c,h,d,p,v,m=P.get(t);if(!w(t)){return}if(n.handler){o=n;n=o.handler;r=o.selector}if(r){T.find.matchesSelector(_,r)}if(!n.guid){n.guid=T.guid++}if(!(u=m.events)){u=m.events=Object.create(null)}if(!(s=m.handle)){s=m.handle=function(e){return typeof T!=="undefined"&&T.event.triggered!==e.type?T.event.dispatch.apply(t,arguments):undefined}}e=(e||"").match(R)||[""];l=e.length;while(l--){a=Ie.exec(e[l])||[];d=v=a[1];p=(a[2]||"").split(".").sort();if(!d){continue}c=T.event.special[d]||{};d=(r?c.delegateType:c.bindType)||d;c=T.event.special[d]||{};f=T.extend({type:d,origType:v,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&T.expr.match.needsContext.test(r),namespace:p.join(".")},o);if(!(h=u[d])){h=u[d]=[];h.delegateCount=0;if(!c.setup||c.setup.call(t,i,p,s)===false){if(t.addEventListener){t.addEventListener(d,s)}}}if(c.add){c.add.call(t,f);if(!f.handler.guid){f.handler.guid=n.guid}}if(r){h.splice(h.delegateCount++,0,f)}else{h.push(f)}T.event.global[d]=true}},remove:function(e,t,n,i,r){var o,s,a,u,l,f,c,h,d,p,v,m=P.hasData(e)&&P.get(e);if(!m||!(u=m.events)){return}t=(t||"").match(R)||[""];l=t.length;while(l--){a=Ie.exec(t[l])||[];d=v=a[1];p=(a[2]||"").split(".").sort();if(!d){for(d in u){T.event.remove(e,d+t[l],n,i,true)}continue}c=T.event.special[d]||{};d=(i?c.delegateType:c.bindType)||d;h=u[d]||[];a=a[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)");s=o=h.length;while(o--){f=h[o];if((r||v===f.origType)&&(!n||n.guid===f.guid)&&(!a||a.test(f.namespace))&&(!i||i===f.selector||i==="**"&&f.selector)){h.splice(o,1);if(f.selector){h.delegateCount--}if(c.remove){c.remove.call(e,f)}}}if(s&&!h.length){if(!c.teardown||c.teardown.call(e,p,m.handle)===false){T.removeEvent(e,d,m.handle)}delete u[d]}}if(T.isEmptyObject(u)){P.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,s,a=new Array(arguments.length),u=T.event.fix(e),l=(P.get(this,"events")||Object.create(null))[u.type]||[],f=T.event.special[u.type]||{};a[0]=u;for(t=1;t=1)){for(;l!==this;l=l.parentNode||this){if(l.nodeType===1&&!(e.type==="click"&&l.disabled===true)){o=[];s={};for(n=0;n-1:T.find(r,this,null,[l]).length}if(s[r]){o.push(i)}}if(o.length){a.push({elem:l,handlers:o})}}}}l=this;if(u\s*$/g;function We(e,t){if(l(e,"table")&&l(t.nodeType!==11?t:t.firstChild,"tr")){return T(e).children("tbody")[0]||e}return e}function Ne(e){e.type=(e.getAttribute("type")!==null)+"/"+e.type;return e}function Be(e){if((e.type||"").slice(0,5)==="true/"){e.type=e.type.slice(5)}else{e.removeAttribute("type")}return e}function ze(e,t){var n,i,r,o,s,a,u;if(t.nodeType!==1){return}if(P.hasData(e)){o=P.get(e);u=o.events;if(u){P.remove(t,"handle events");for(r in u){for(n=0,i=u[r].length;n1&&typeof d==="string"&&!v.checkClone&&Le.test(d)){return n.each(function(e){var t=n.eq(e);if(p){i[0]=d.call(this,e,t.html())}E(t,i,r,o)})}if(c){e=xe(i,n[0].ownerDocument,false,n,o);t=e.firstChild;if(e.childNodes.length===1){e=t}if(t||o){s=T.map(I(e,"script"),Ne);a=s.length;for(;f0){Re(s,!u&&I(e,"script"))}return a},cleanData:function(e){var t,n,i,r=T.event.special,o=0;for(;(n=e[o])!==undefined;o++){if(w(n)){if(t=n[P.expando]){if(t.events){for(i in t.events){if(r[i]){T.event.remove(n,i)}else{T.removeEvent(n,i,t.handle)}}}n[P.expando]=undefined}if(n[d.expando]){n[d.expando]=undefined}}}}});T.fn.extend({detach:function(e){return He(this,e,true)},remove:function(e){return He(this,e)},text:function(e){return f(this,function(e){return e===undefined?T.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){this.textContent=e}})},null,e,arguments.length)},append:function(){return E(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=We(this,e);t.appendChild(e)}})},prepend:function(){return E(this,arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=We(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return E(this,arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this)}})},after:function(){return E(this,arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this.nextSibling)}})},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){if(e.nodeType===1){T.cleanData(I(e,false));e.textContent=""}}return this},clone:function(e,t){e=e==null?false:e;t=t==null?e:t;return this.map(function(){return T.clone(this,e,t)})},html:function(e){return f(this,function(e){var t=this[0]||{},n=0,i=this.length;if(e===undefined&&t.nodeType===1){return t.innerHTML}if(typeof e==="string"&&!Me.test(e)&&!x[(ke.exec(e)||["",""])[1].toLowerCase()]){e=T.htmlPrefilter(e);try{for(;n=0){u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-a-.5))||0}return u}function at(e,t,n){var i=je(e),r=!v.boxSizingReliable()||n,o=r&&T.css(e,"boxSizing",false,i)==="border-box",s=o,a=Ye(e,t,i),u="offset"+t[0].toUpperCase()+t.slice(1);if(Ue.test(a)){if(!n){return a}a="auto"}if((!v.boxSizingReliable()&&o||!v.reliableTrDimensions()&&l(e,"tr")||a==="auto"||!parseFloat(a)&&T.css(e,"display",false,i)==="inline")&&e.getClientRects().length){o=T.css(e,"boxSizing",false,i)==="border-box";s=u in e;if(s){a=e[u]}}a=parseFloat(a)||0;return a+st(e,t,n||(o?"border":"content"),s,i,a)+"px"}T.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ye(e,"opacity");return n===""?"1":n}}}},cssNumber:{animationIterationCount:true,columnCount:true,fillOpacity:true,flexGrow:true,flexShrink:true,fontWeight:true,gridArea:true,gridColumn:true,gridColumnEnd:true,gridColumnStart:true,gridRow:true,gridRowEnd:true,gridRowStart:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{},style:function(e,t,n,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style){return}var r,o,s,a=h(t),u=nt.test(t),l=e.style;if(!u){t=et(a)}s=T.cssHooks[t]||T.cssHooks[a];if(n!==undefined){o=typeof n;if(o==="string"&&(r=p.exec(n))&&r[1]){n=_e(e,t,r);o="number"}if(n==null||n!==n){return}if(o==="number"&&!u){n+=r&&r[3]||(T.cssNumber[a]?"":"px")}if(!v.clearCloneStyle&&n===""&&t.indexOf("background")===0){l[t]="inherit"}if(!s||!("set"in s)||(n=s.set(e,n,i))!==undefined){if(u){l.setProperty(t,n)}else{l[t]=n}}}else{if(s&&"get"in s&&(r=s.get(e,false,i))!==undefined){return r}return l[t]}},css:function(e,t,n,i){var r,o,s,a=h(t),u=nt.test(t);if(!u){t=et(a)}s=T.cssHooks[t]||T.cssHooks[a];if(s&&"get"in s){r=s.get(e,true,n)}if(r===undefined){r=Ye(e,t,i)}if(r==="normal"&&t in rt){r=rt[t]}if(n===""||n){o=parseFloat(r);return n===true||isFinite(o)?o||0:r}return r}});T.each(["height","width"],function(e,l){T.cssHooks[l]={get:function(e,t,n){if(t){return tt.test(T.css(e,"display"))&&(!e.getClientRects().length||!e.getBoundingClientRect().width)?Ge(e,it,function(){return at(e,l,n)}):at(e,l,n)}},set:function(e,t,n){var i,r=je(e),o=!v.scrollboxSize()&&r.position==="absolute",s=o||n,a=s&&T.css(e,"boxSizing",false,r)==="border-box",u=n?st(e,l,n,a,r):0;if(a&&o){u-=Math.ceil(e["offset"+l[0].toUpperCase()+l.slice(1)]-parseFloat(r[l])-st(e,l,"border",false,r)-.5)}if(u&&(i=p.exec(t))&&(i[3]||"px")!=="px"){e.style[l]=t;t=T.css(e,l)}return ot(e,t,u)}}});T.cssHooks.marginLeft=Xe(v.reliableMarginLeft,function(e,t){if(t){return(parseFloat(Ye(e,"marginLeft"))||e.getBoundingClientRect().left-Ge(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}});T.each({margin:"",padding:"",border:"Width"},function(r,o){T.cssHooks[r+o]={expand:function(e){var t=0,n={},i=typeof e==="string"?e.split(" "):[e];for(;t<4;t++){n[r+S[t]+o]=i[t]||i[t-2]||i[0]}return n}};if(r!=="margin"){T.cssHooks[r+o].set=ot}});T.fn.extend({css:function(e,t){return f(this,function(e,t,n){var i,r,o={},s=0;if(Array.isArray(t)){i=je(e);r=t.length;for(;s1)}});function o(e,t,n,i,r){return new o.prototype.init(e,t,n,i,r)}T.Tween=o;o.prototype={constructor:o,init:function(e,t,n,i,r,o){this.elem=e;this.prop=n;this.easing=r||T.easing._default;this.options=t;this.start=this.now=this.cur();this.end=i;this.unit=o||(T.cssNumber[n]?"":"px")},cur:function(){var e=o.propHooks[this.prop];return e&&e.get?e.get(this):o.propHooks._default.get(this)},run:function(e){var t,n=o.propHooks[this.prop];if(this.options.duration){this.pos=t=T.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration)}else{this.pos=t=e}this.now=(this.end-this.start)*t+this.start;if(this.options.step){this.options.step.call(this.elem,this.now,this)}if(n&&n.set){n.set(this)}else{o.propHooks._default.set(this)}return this}};o.prototype.init.prototype=o.prototype;o.propHooks={_default:{get:function(e){var t;if(e.elem.nodeType!==1||e.elem[e.prop]!=null&&e.elem.style[e.prop]==null){return e.elem[e.prop]}t=T.css(e.elem,e.prop,"");return!t||t==="auto"?0:t},set:function(e){if(T.fx.step[e.prop]){T.fx.step[e.prop](e)}else if(e.elem.nodeType===1&&(T.cssHooks[e.prop]||e.elem.style[et(e.prop)]!=null)){T.style(e.elem,e.prop,e.now+e.unit)}else{e.elem[e.prop]=e.now}}}};o.propHooks.scrollTop=o.propHooks.scrollLeft={set:function(e){if(e.elem.nodeType&&e.elem.parentNode){e.elem[e.prop]=e.now}}};T.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"};T.fx=o.prototype.init;T.fx.step={};var q,ut,lt=/^(?:toggle|show|hide)$/,ft=/queueHooks$/;function ct(){if(ut){if(k.hidden===false&&C.requestAnimationFrame){C.requestAnimationFrame(ct)}else{C.setTimeout(ct,T.fx.interval)}T.fx.tick()}}function ht(){C.setTimeout(function(){q=undefined});return q=Date.now()}function dt(e,t){var n,i=0,r={height:e};t=t?1:0;for(;i<4;i+=2-t){n=S[i];r["margin"+n]=r["padding"+n]=e}if(t){r.opacity=r.width=e}return r}function pt(e,t,n){var i,r=(A.tweeners[t]||[]).concat(A.tweeners["*"]),o=0,s=r.length;for(;o1)},removeAttr:function(e){return this.each(function(){T.removeAttr(this,e)})}});T.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(o===3||o===8||o===2){return}if(typeof e.getAttribute==="undefined"){return T.prop(e,t,n)}if(o!==1||!T.isXMLDoc(e)){r=T.attrHooks[t.toLowerCase()]||(T.expr.match.bool.test(t)?yt:undefined)}if(n!==undefined){if(n===null){T.removeAttr(e,t);return}if(r&&"set"in r&&(i=r.set(e,n,t))!==undefined){return i}e.setAttribute(t,n+"");return n}if(r&&"get"in r&&(i=r.get(e,t))!==null){return i}i=T.find.attr(e,t);return i==null?undefined:i},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&t==="radio"&&l(e,"input")){var n=e.value;e.setAttribute("type",t);if(n){e.value=n}return t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(R);if(r&&e.nodeType===1){while(n=r[i++]){e.removeAttribute(n)}}}});yt={set:function(e,t,n){if(t===false){T.removeAttr(e,n)}else{e.setAttribute(n,n)}return n}};T.each(T.expr.match.bool.source.match(/\w+/g),function(e,t){var s=gt[t]||T.find.attr;gt[t]=function(e,t,n){var i,r,o=t.toLowerCase();if(!n){r=gt[o];gt[o]=i;i=s(e,t,n)!=null?o:null;gt[o]=r}return i}});var wt=/^(?:input|select|textarea|button)$/i,Pt=/^(?:a|area)$/i;T.fn.extend({prop:function(e,t){return f(this,T.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[T.propFix[e]||e]})}});T.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(o===3||o===8||o===2){return}if(o!==1||!T.isXMLDoc(e)){t=T.propFix[t]||t;r=T.propHooks[t]}if(n!==undefined){if(r&&"set"in r&&(i=r.set(e,n,t))!==undefined){return i}return e[t]=n}if(r&&"get"in r&&(i=r.get(e,t))!==null){return i}return e[t]},propHooks:{tabIndex:{get:function(e){var t=T.find.attr(e,"tabindex");if(t){return parseInt(t,10)}if(wt.test(e.nodeName)||Pt.test(e.nodeName)&&e.href){return 0}return-1}}},propFix:{"for":"htmlFor","class":"className"}});if(!v.optSelected){T.propHooks.selected={get:function(e){var t=e.parentNode;if(t&&t.parentNode){t.parentNode.selectedIndex}return null},set:function(e){var t=e.parentNode;if(t){t.selectedIndex;if(t.parentNode){t.parentNode.selectedIndex}}}}}T.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){T.propFix[this.toLowerCase()]=this});function O(e){var t=e.match(R)||[];return t.join(" ")}function M(e){return e.getAttribute&&e.getAttribute("class")||""}function St(e){if(Array.isArray(e)){return e}if(typeof e==="string"){return e.match(R)||[]}return[]}T.fn.extend({addClass:function(t){var e,n,i,r,o,s,a,u=0;if(m(t)){return this.each(function(e){T(this).addClass(t.call(this,e,M(this)))})}e=St(t);if(e.length){while(n=this[u++]){r=M(n);i=n.nodeType===1&&" "+O(r)+" ";if(i){s=0;while(o=e[s++]){if(i.indexOf(" "+o+" ")<0){i+=o+" "}}a=O(i);if(r!==a){n.setAttribute("class",a)}}}}return this},removeClass:function(t){var e,n,i,r,o,s,a,u=0;if(m(t)){return this.each(function(e){T(this).removeClass(t.call(this,e,M(this)))})}if(!arguments.length){return this.attr("class","")}e=St(t);if(e.length){while(n=this[u++]){r=M(n);i=n.nodeType===1&&" "+O(r)+" ";if(i){s=0;while(o=e[s++]){while(i.indexOf(" "+o+" ")>-1){i=i.replace(" "+o+" "," ")}}a=O(i);if(r!==a){n.setAttribute("class",a)}}}}return this},toggleClass:function(r,t){var o=typeof r,s=o==="string"||Array.isArray(r);if(typeof t==="boolean"&&s){return t?this.addClass(r):this.removeClass(r)}if(m(r)){return this.each(function(e){T(this).toggleClass(r.call(this,e,M(this),t),t)})}return this.each(function(){var e,t,n,i;if(s){t=0;n=T(this);i=St(r);while(e=i[t++]){if(n.hasClass(e)){n.removeClass(e)}else{n.addClass(e)}}}else if(r===undefined||o==="boolean"){e=M(this);if(e){P.set(this,"__className__",e)}if(this.setAttribute){this.setAttribute("class",e||r===false?"":P.get(this,"__className__")||"")}}})},hasClass:function(e){var t,n,i=0;t=" "+e+" ";while(n=this[i++]){if(n.nodeType===1&&(" "+O(M(n))+" ").indexOf(t)>-1){return true}}return false}});var _t=/\r/g;T.fn.extend({val:function(n){var i,e,r,t=this[0];if(!arguments.length){if(t){i=T.valHooks[t.type]||T.valHooks[t.nodeName.toLowerCase()];if(i&&"get"in i&&(e=i.get(t,"value"))!==undefined){return e}e=t.value;if(typeof e==="string"){return e.replace(_t,"")}return e==null?"":e}return}r=m(n);return this.each(function(e){var t;if(this.nodeType!==1){return}if(r){t=n.call(this,e,T(this).val())}else{t=n}if(t==null){t=""}else if(typeof t==="number"){t+=""}else if(Array.isArray(t)){t=T.map(t,function(e){return e==null?"":e+""})}i=T.valHooks[this.type]||T.valHooks[this.nodeName.toLowerCase()];if(!i||!("set"in i)||i.set(this,t,"value")===undefined){this.value=t}})}});T.extend({valHooks:{option:{get:function(e){var t=T.find.attr(e,"value");return t!=null?t:O(T.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,s=e.type==="select-one",a=s?null:[],u=s?o+1:r.length;if(o<0){i=u}else{i=s?o:0}for(;i-1){n=true}}if(!n){e.selectedIndex=-1}return o}}}});T.each(["radio","checkbox"],function(){T.valHooks[this]={set:function(e,t){if(Array.isArray(t)){return e.checked=T.inArray(T(e).val(),t)>-1}}};if(!v.checkOn){T.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value}}});v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};T.extend(T.event,{trigger:function(e,t,n,i){var r,o,s,a,u,l,f,c,h=[n||k],d=H.call(e,"type")?e.type:e,p=H.call(e,"namespace")?e.namespace.split("."):[];o=c=s=n=n||k;if(n.nodeType===3||n.nodeType===8){return}if(bt.test(d+T.event.triggered)){return}if(d.indexOf(".")>-1){p=d.split(".");d=p.shift();p.sort()}u=d.indexOf(":")<0&&"on"+d;e=e[T.expando]?e:new T.Event(d,typeof e==="object"&&e);e.isTrigger=i?2:3;e.namespace=p.join(".");e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;e.result=undefined;if(!e.target){e.target=n}t=t==null?[e]:T.makeArray(t,[e]);f=T.event.special[d]||{};if(!i&&f.trigger&&f.trigger.apply(n,t)===false){return}if(!i&&!f.noBubble&&!y(n)){a=f.delegateType||d;if(!bt.test(a+d)){o=o.parentNode}for(;o;o=o.parentNode){h.push(o);s=o}if(s===(n.ownerDocument||k)){h.push(s.defaultView||s.parentWindow||C)}}r=0;while((o=h[r++])&&!e.isPropagationStopped()){c=o;e.type=r>1?a:f.bindType||d;l=(P.get(o,"events")||Object.create(null))[e.type]&&P.get(o,"handle");if(l){l.apply(o,t)}l=u&&o[u];if(l&&l.apply&&w(o)){e.result=l.apply(o,t);if(e.result===false){e.preventDefault()}}}e.type=d;if(!i&&!e.isDefaultPrevented()){if((!f._default||f._default.apply(h.pop(),t)===false)&&w(n)){if(u&&m(n[d])&&!y(n)){s=n[u];if(s){n[u]=null}T.event.triggered=d;if(e.isPropagationStopped()){c.addEventListener(d,Ct)}n[d]();if(e.isPropagationStopped()){c.removeEventListener(d,Ct)}T.event.triggered=undefined;if(s){n[u]=s}}}}return e.result},simulate:function(e,t,n){var i=T.extend(new T.Event,n,{type:e,isSimulated:true});T.event.trigger(i,null,t)}});T.fn.extend({trigger:function(e,t){return this.each(function(){T.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n){return T.event.trigger(e,t,n,true)}}});if(!v.focusin){T.each({focus:"focusin",blur:"focusout"},function(n,i){var r=function(e){T.event.simulate(i,e.target,T.event.fix(e))};T.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=P.access(e,i);if(!t){e.addEventListener(n,r,true)}P.access(e,i,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=P.access(e,i)-1;if(!t){e.removeEventListener(n,r,true);P.remove(e,i)}else{P.access(e,i,t)}}}})}var kt=C.location;var Tt={guid:Date.now()};var Rt=/\?/;T.parseXML=function(e){var t,n;if(!e||typeof e!=="string"){return null}try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(i){}n=t&&t.getElementsByTagName("parsererror")[0];if(!t||n){T.error("Invalid XML: "+(n?T.map(n.childNodes,function(e){return e.textContent}).join("\n"):e))}return t};var Dt=/\[\]$/,xt=/\r?\n/g,It=/^(?:submit|button|image|reset|file)$/i,Et=/^(?:input|select|textarea|keygen)/i;function qt(n,e,i,r){var t;if(Array.isArray(e)){T.each(e,function(e,t){if(i||Dt.test(n)){r(n,t)}else{qt(n+"["+(typeof t==="object"&&t!=null?e:"")+"]",t,i,r)}})}else if(!i&&g(e)==="object"){for(t in e){qt(n+"["+t+"]",e[t],i,r)}}else{r(n,e)}}T.param=function(e,t){var n,i=[],r=function(e,t){var n=m(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(n==null?"":n)};if(e==null){return""}if(Array.isArray(e)||e.jquery&&!T.isPlainObject(e)){T.each(e,function(){r(this.name,this.value)})}else{for(n in e){qt(n,e[n],t,r)}}return i.join("&")};T.fn.extend({serialize:function(){return T.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=T.prop(this,"elements");return e?T.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!T(this).is(":disabled")&&Et.test(this.nodeName)&&!It.test(e)&&(this.checked||!r.test(e))}).map(function(e,t){var n=T(this).val();if(n==null){return null}if(Array.isArray(n)){return T.map(n,function(e){return{name:t.name,value:e.replace(xt,"\r\n")}})}return{name:t.name,value:n.replace(xt,"\r\n")}}).get()}});var At=/%20/g,Ot=/#.*$/,Mt=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Wt=/^(?:GET|HEAD)$/,Nt=/^\/\//,Bt={},zt={},Jt="*/".concat("*"),Ht=k.createElement("a");Ht.href=kt.href;function Ut(o){return function(e,t){if(typeof e!=="string"){t=e;e="*"}var n,i=0,r=e.toLowerCase().match(R)||[];if(m(t)){while(n=r[i++]){if(n[0]==="+"){n=n.slice(1)||"*";(o[n]=o[n]||[]).unshift(t)}else{(o[n]=o[n]||[]).push(t)}}}}}function jt(t,r,o,s){var a={},u=t===zt;function l(e){var i;a[e]=true;T.each(t[e]||[],function(e,t){var n=t(r,o,s);if(typeof n==="string"&&!u&&!a[n]){r.dataTypes.unshift(n);l(n);return false}else if(u){return!(i=n)}});return i}return l(r.dataTypes[0])||!a["*"]&&l("*")}function Gt(e,t){var n,i,r=T.ajaxSettings.flatOptions||{};for(n in t){if(t[n]!==undefined){(r[n]?e:i||(i={}))[n]=t[n]}}if(i){T.extend(true,e,i)}return e}function Vt(e,t,n){var i,r,o,s,a=e.contents,u=e.dataTypes;while(u[0]==="*"){u.shift();if(i===undefined){i=e.mimeType||t.getResponseHeader("Content-Type")}}if(i){for(r in a){if(a[r]&&a[r].test(i)){u.unshift(r);break}}}if(u[0]in n){o=u[0]}else{for(r in n){if(!u[0]||e.converters[r+" "+u[0]]){o=r;break}if(!s){s=r}}o=o||s}if(o){if(o!==u[0]){u.unshift(o)}return n[o]}}function Yt(e,t,n,i){var r,o,s,a,u,l={},f=e.dataTypes.slice();if(f[1]){for(s in e.converters){l[s.toLowerCase()]=e.converters[s]}}o=f.shift();while(o){if(e.responseFields[o]){n[e.responseFields[o]]=t}if(!u&&i&&e.dataFilter){t=e.dataFilter(t,e.dataType)}u=o;o=f.shift();if(o){if(o==="*"){o=u}else if(u!=="*"&&u!==o){s=l[u+" "+o]||l["* "+o];if(!s){for(r in l){a=r.split(" ");if(a[1]===o){s=l[u+" "+a[0]]||l["* "+a[0]];if(s){if(s===true){s=l[r]}else if(l[r]!==true){o=a[0];f.unshift(a[1])}break}}}}if(s!==true){if(s&&e["throws"]){t=s(t)}else{try{t=s(t)}catch(c){return{state:"parsererror",error:s?c:"No conversion from "+u+" to "+o}}}}}}}return{state:"success",data:t}}T.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kt.href,type:"GET",isLocal:Ft.test(kt.protocol),global:true,processData:true,"async":true,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":true,"text json":JSON.parse,"text xml":T.parseXML},flatOptions:{url:true,context:true}},ajaxSetup:function(e,t){return t?Gt(Gt(e,T.ajaxSettings),t):Gt(T.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(zt),ajax:function(e,t){if(typeof e==="object"){t=e;e=undefined}t=t||{};var f,c,h,n,d,i,p,v,r,o,m=T.ajaxSetup({},t),y=m.context||m,g=m.context&&(y.nodeType||y.jquery)?T(y):T.event,w=T.Deferred(),P=T.Callbacks("once memory"),S=m.statusCode||{},s={},a={},u="canceled",_={readyState:0,getResponseHeader:function(e){var t;if(p){if(!n){n={};while(t=Lt.exec(h)){n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}}t=n[e.toLowerCase()+" "]}return t==null?null:t.join(", ")},getAllResponseHeaders:function(){return p?h:null},setRequestHeader:function(e,t){if(p==null){e=a[e.toLowerCase()]=a[e.toLowerCase()]||e;s[e]=t}return this},overrideMimeType:function(e){if(p==null){m.mimeType=e}return this},statusCode:function(e){var t;if(e){if(p){_.always(e[_.status])}else{for(t in e){S[t]=[S[t],e[t]]}}}return this},abort:function(e){var t=e||u;if(f){f.abort(t)}l(0,t);return this}};w.promise(_);m.url=((e||m.url||kt.href)+"").replace(Nt,kt.protocol+"//");m.type=t.method||t.type||m.method||m.type;m.dataTypes=(m.dataType||"*").toLowerCase().match(R)||[""];if(m.crossDomain==null){i=k.createElement("a");try{i.href=m.url;i.href=i.href;m.crossDomain=Ht.protocol+"//"+Ht.host!==i.protocol+"//"+i.host}catch(b){m.crossDomain=true}}if(m.data&&m.processData&&typeof m.data!=="string"){m.data=T.param(m.data,m.traditional)}jt(Bt,m,t,_);if(p){return _}v=T.event&&m.global;if(v&&T.active++===0){T.event.trigger("ajaxStart")}m.type=m.type.toUpperCase();m.hasContent=!Wt.test(m.type);c=m.url.replace(Ot,"");if(!m.hasContent){o=m.url.slice(c.length);if(m.data&&(m.processData||typeof m.data==="string")){c+=(Rt.test(c)?"&":"?")+m.data;delete m.data}if(m.cache===false){c=c.replace(Mt,"$1");o=(Rt.test(c)?"&":"?")+"_="+Tt.guid+++o}m.url=c+o}else if(m.data&&m.processData&&(m.contentType||"").indexOf("application/x-www-form-urlencoded")===0){m.data=m.data.replace(At,"+")}if(m.ifModified){if(T.lastModified[c]){_.setRequestHeader("If-Modified-Since",T.lastModified[c])}if(T.etag[c]){_.setRequestHeader("If-None-Match",T.etag[c])}}if(m.data&&m.hasContent&&m.contentType!==false||t.contentType){_.setRequestHeader("Content-Type",m.contentType)}_.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+(m.dataTypes[0]!=="*"?", "+Jt+"; q=0.01":""):m.accepts["*"]);for(r in m.headers){_.setRequestHeader(r,m.headers[r])}if(m.beforeSend&&(m.beforeSend.call(y,_,m)===false||p)){return _.abort()}u="abort";P.add(m.complete);_.done(m.success);_.fail(m.error);f=jt(zt,m,t,_);if(!f){l(-1,"No Transport")}else{_.readyState=1;if(v){g.trigger("ajaxSend",[_,m])}if(p){return _}if(m["async"]&&m.timeout>0){d=C.setTimeout(function(){_.abort("timeout")},m.timeout)}try{p=false;f.send(s,l)}catch(b){if(p){throw b}l(-1,b)}}function l(e,t,n,i){var r,o,s,a,u,l=t;if(p){return}p=true;if(d){C.clearTimeout(d)}f=undefined;h=i||"";_.readyState=e>0?4:0;r=e>=200&&e<300||e===304;if(n){a=Vt(m,_,n)}if(!r&&T.inArray("script",m.dataTypes)>-1&&T.inArray("json",m.dataTypes)<0){m.converters["text script"]=function(){}}a=Yt(m,a,_,r);if(r){if(m.ifModified){u=_.getResponseHeader("Last-Modified");if(u){T.lastModified[c]=u}u=_.getResponseHeader("etag");if(u){T.etag[c]=u}}if(e===204||m.type==="HEAD"){l="nocontent"}else if(e===304){l="notmodified"}else{l=a.state;o=a.data;s=a.error;r=!s}}else{s=l;if(e||!l){l="error";if(e<0){e=0}}}_.status=e;_.statusText=(t||l)+"";if(r){w.resolveWith(y,[o,l,_])}else{w.rejectWith(y,[_,l,s])}_.statusCode(S);S=undefined;if(v){g.trigger(r?"ajaxSuccess":"ajaxError",[_,m,r?o:s])}P.fireWith(y,[_,l]);if(v){g.trigger("ajaxComplete",[_,m]);if(!--T.active){T.event.trigger("ajaxStop")}}}return _},getJSON:function(e,t,n){return T.get(e,t,n,"json")},getScript:function(e,t){return T.get(e,undefined,t,"script")}});T.each(["get","post"],function(e,r){T[r]=function(e,t,n,i){if(m(t)){i=i||n;n=t;t=undefined}return T.ajax(T.extend({url:e,type:r,dataType:i,data:t,success:n},T.isPlainObject(e)&&e))}});T.ajaxPrefilter(function(e){var t;for(t in e.headers){if(t.toLowerCase()==="content-type"){e.contentType=e.headers[t]||""}}});T._evalUrl=function(e,t,n){return T.ajax({url:e,type:"GET",dataType:"script",cache:true,"async":false,global:false,converters:{"text script":function(){}},dataFilter:function(e){T.globalEval(e,t,n)}})};T.fn.extend({wrapAll:function(e){var t;if(this[0]){if(m(e)){e=e.call(this[0])}t=T(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){t.insertBefore(this[0])}t.map(function(){var e=this;while(e.firstElementChild){e=e.firstElementChild}return e}).append(this)}return this},wrapInner:function(n){if(m(n)){return this.each(function(e){T(this).wrapInner(n.call(this,e))})}return this.each(function(){var e=T(this),t=e.contents();if(t.length){t.wrapAll(n)}else{e.append(n)}})},wrap:function(t){var n=m(t);return this.each(function(e){T(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){this.parent(e).not("body").each(function(){T(this).replaceWith(this.childNodes)});return this}});T.expr.pseudos.hidden=function(e){return!T.expr.pseudos.visible(e)};T.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)};T.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Xt={0:200,1223:204},Zt=T.ajaxSettings.xhr();v.cors=!!Zt&&"withCredentials"in Zt;v.ajax=Zt=!!Zt;T.ajaxTransport(function(o){var s,a;if(v.cors||Zt&&!o.crossDomain){return{send:function(e,t){var n,i=o.xhr();i.open(o.type,o.url,o["async"],o.username,o.password);if(o.xhrFields){for(n in o.xhrFields){i[n]=o.xhrFields[n]}}if(o.mimeType&&i.overrideMimeType){i.overrideMimeType(o.mimeType)}if(!o.crossDomain&&!e["X-Requested-With"]){e["X-Requested-With"]="XMLHttpRequest"}for(n in e){i.setRequestHeader(n,e[n])}s=function(e){return function(){if(s){s=a=i.onload=i.onerror=i.onabort=i.ontimeout=i.onreadystatechange=null;if(e==="abort"){i.abort()}else if(e==="error"){if(typeof i.status!=="number"){t(0,"error")}else{t(i.status,i.statusText)}}else{t(Xt[i.status]||i.status,i.statusText,(i.responseType||"text")!=="text"||typeof i.responseText!=="string"?{binary:i.response}:{text:i.responseText},i.getAllResponseHeaders())}}}};i.onload=s();a=i.onerror=i.ontimeout=s("error");if(i.onabort!==undefined){i.onabort=a}else{i.onreadystatechange=function(){if(i.readyState===4){C.setTimeout(function(){if(s){a()}})}}}s=s("abort");try{i.send(o.hasContent&&o.data||null)}catch(r){if(s){throw r}}},abort:function(){if(s){s()}}}}});T.ajaxPrefilter(function(e){if(e.crossDomain){e.contents.script=false}});T.ajaxSetup({accepts:{script:"text/javascript, application/javascript, "+"application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){T.globalEval(e);return e}}});T.ajaxPrefilter("script",function(e){if(e.cache===undefined){e.cache=false}if(e.crossDomain){e.type="GET"}});T.ajaxTransport("script",function(n){if(n.crossDomain||n.scriptAttrs){var i,r;return{send:function(e,t){i=T(" + + +
+
+ +
+ Digital channel + + + + + + + +
+
+
+
+
+
+
+ Local configuration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Play performance + + Image size + +
Rules + + Snapshot format + +
Package size + + Protocol + +
Save record files to 
Save downloaded files to 
Save snapshots in live view to 
Save snapshots when playback to 
Save clips to 
Save device snapshots to 
 
+
+
+
+
+ Browse + + + + + + + + + + + + + + + + + + + + + +
Stream type + +
Volume +  (Range:0~100) + + + +
Voice channel + + + + + +
+ + + + +
+ + + + + +
+
+
+ drawing + + + + + + + + + + + + + +
+ + +
+ Graph ID: + Name: +
+ + + + +
+ +
+
+
+ PTZ control + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + + + + + + + + + + +
PTZ speed + +
Preset
+ + +
+ + + + + + + + + + + + + +
+
+
+ Playback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Stream type + +
Start time + (Time format:2013-11-11 12:34:56) +
End time + + +
downloadBytime starttime + (Time format:2013-11-11 12:34:56) +
downloadBytime endtime + + +
+
+
+
+
+ + + + +
+ + + + +
+ + + +   +
+
+
+ System maintenance + + + + + + + +
+ + +
+    +
+
+
+
+
+ Operation information +
+
+
+ Event callback information +
+
+
+ + + + + \ No newline at end of file diff --git a/hkws/webs/en/demo.js b/hkws/webs/en/demo.js new file mode 100644 index 0000000000..e020223251 --- /dev/null +++ b/hkws/webs/en/demo.js @@ -0,0 +1,1844 @@ +// Init plugin + +// overall save the current selected window +var g_iWndIndex = 0; //don't have to set the variable; default to use the current selected window without transmiting value when the interface has window parameters +var g_oLocalConfig = null; //local configuration variable + +//Error Code +var ERROR_CODE_UNKNOWN = 1000; +var ERROR_CODE_NETWORKERROR = 1001; +var ERROR_CODE_PARAMERROR = 1002; + +//login +var ERROR_CODE_LOGIN_NOLOGIN = 2000; +var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; +var ERROR_CODE_LOGIN_NOSUPPORT = 2002; + +//preview and playback +var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; +var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; +var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; +var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; +var ERROR_CODE_PLAY_NOFREESPACE = 3004; + +//talk +var ERROR_CODE_TALK_FAIL = 5000; + + +var version="V3.3.0build20230322" +$(function () { + // Init plugin parameters and insert the plugin + WebVideoCtrl.I_InitPlugin({ + bWndFull: true, //Wether support doule clicking to switch the full-screen mode: it's supported by default; true:support, false:not support + iWndowType: 1, + cbSelWnd: function (xmlDoc) { + g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10); + var szInfo = "the selected window index: " + g_iWndIndex; + showCBInfo(szInfo); + }, + cbDoubleClickWnd: function (iWndIndex, bFullScreen) { + var szInfo = "present window number to zoom: " + iWndIndex; + if (!bFullScreen) { + szInfo = "present window number to restore: " + iWndIndex; + } + showCBInfo(szInfo); + }, + cbEvent: function (iEventType, iParam1, iParam2) { + if (2 == iEventType) { + showCBInfo("window " + iParam1 + "playback finished!"); + } else if (-1 == iEventType) { + showCBInfo("device " + iParam1 + "network error!"); + } else if (3001 == iEventType) { + clickStopRecord(g_szRecordType, iParam1); + } + }, + cbInitPluginComplete: function () { + WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(() => { + WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => { + if (bFlag) { + alert("Detect the latest version, please double click HCWebSDKPlugin.exe to update!"); + } + }); + }, () => { + alert("The plugin initialization failed. Please confirm if the plugin has been installed; If not installed, please double click on HCWebSDKPlugin.exe to install it!"); + }); + } + }); + + // window event binding + $(window).bind({ + resize: function () { + //WebVideoCtrl.I_Resize($("body").width(), $("body").height()); + } + }); + + //init date + var szCurTime = dateFormat(new Date(), "yyyy-MM-dd"); + $("#starttime").val(szCurTime + " 00:00:00"); + $("#endtime").val(szCurTime + " 23:59:59"); + $("#downloadstarttime").val(szCurTime + " 00:00:00"); + $("#downloadendtime").val(szCurTime + " 23:59:59"); +}); + +// display operation info +function showOPInfo(szInfo, status, xmlDoc) { + var szTip = "
" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo; + if (typeof status != "undefined" && status != 200) { + var szStatusString = $(xmlDoc).find("statusString").eq(0).text(); + var szSubStatusCode = $(xmlDoc).find("subStatusCode").eq(0).text(); + if ("" === szSubStatusCode) { + if("" === szSubStatusCode && "" === szStatusString){ + szTip += "(" + status + ")"; + } + else{ + szTip += "(" + status + ", " + szStatusString + ")"; + } + } else { + szTip += "(" + status + ", " + szSubStatusCode + ")"; + } + } + szTip += "
"; + + $("#opinfo").html(szTip + $("#opinfo").html()); +} + +// display callback info +function showCBInfo(szInfo) { + szInfo = "
" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "
"; + $("#cbinfo").html(szInfo + $("#cbinfo").html()); +} + +// time format +function dateFormat(oDate, fmt) { + var o = { + "M+": oDate.getMonth() + 1, //month + "d+": oDate.getDate(), //day + "h+": oDate.getHours(), //hour + "m+": oDate.getMinutes(), //minute + "s+": oDate.getSeconds(), //second + "q+": Math.floor((oDate.getMonth() + 3) / 3), //quarter + "S": oDate.getMilliseconds()//millisecond + }; + if (/(y+)/.test(fmt)) { + fmt = fmt.replace(RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length)); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(fmt)) { + fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + } + } + return fmt; +} + +// get window size +function getWindowSize() { + var nWidth = $(this).width() + $(this).scrollLeft(), + nHeight = $(this).height() + $(this).scrollTop(); + + return {width: nWidth, height: nHeight}; +} + +// open option dialog 0: folder, 1: file +function clickOpenFileDlg(id, iType) { + WebVideoCtrl.I_OpenFileDlg(iType).then(function(szDirPath){ + if (szDirPath != -1 && szDirPath != "" && szDirPath != null) { + $("#" + id).val(szDirPath); + } + }, function() { + showOPInfo("Failed to open file path."); + }); +} + +// get local parameters +function clickGetLocalCfg() { + WebVideoCtrl.I_GetLocalCfg().then((oLocalConfig) => { + g_oLocalConfig = oLocalConfig; + $("#netsPreach").val(oLocalConfig.buffNumberType); + $("#wndSize").val(oLocalConfig.playWndType); + $("#rulesInfo").val(oLocalConfig.ivsMode); + $("#captureFileFormat").val(oLocalConfig.captureFileFormat); + $("#packSize").val(oLocalConfig.packgeSize); + $("#recordPath").val(oLocalConfig.recordPath); + $("#downloadPath").val(oLocalConfig.downloadPath); + $("#previewPicPath").val(oLocalConfig.capturePath); + $("#playbackPicPath").val(oLocalConfig.playbackPicPath); + $("#devicePicPath").val(oLocalConfig.deviceCapturePath); + $("#playbackFilePath").val(oLocalConfig.playbackFilePath); + $("#protocolType").val(oLocalConfig.protocolType); + $("#secretKey").val("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F"); + showOPInfo("Get local configuration success."); + }, (oError) => { + var szInfo = "Get local configuration failed."; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// set local parameters +async function clickSetLocalCfg() { + g_oLocalConfig.buffNumberType = $("#netsPreach").val(); + g_oLocalConfig.playWndType = $("#wndSize").val(); + g_oLocalConfig.ivsMode = $("#rulesInfo").val(); + g_oLocalConfig.captureFileFormat = $("#captureFileFormat").val(); + g_oLocalConfig.packgeSize = $("#packSize").val(); + g_oLocalConfig.recordPath = $("#recordPath").val(); + g_oLocalConfig.downloadPath = $("#downloadPath").val(); + g_oLocalConfig.capturePath = $("#previewPicPath").val(); + g_oLocalConfig.playbackPicPath = $("#playbackPicPath").val(); + g_oLocalConfig.deviceCapturePath = $("#devicePicPath").val(); + g_oLocalConfig.playbackFilePath = $("#playbackFilePath").val(); + g_oLocalConfig.protocolType = $("#protocolType").val(); + if ("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F" !== $("#secretKey").val()) { + g_oLocalConfig.secretKey = await WebVideoCtrl.I_GetEncryptString($("#secretKey").val()); + } + WebVideoCtrl.I_SetLocalCfg(g_oLocalConfig).then(() => { + showOPInfo("Set local configuration success."); + }, (oError) => { + var szInfo = "Set local configuration failed."; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// windows number +function changeWndNum(iType) { + iType = parseInt(iType, 10); + WebVideoCtrl.I_ChangeWndNum(iType).then(() => { + showOPInfo("Change window number successful!"); + }, (oError) => { + var szInfo = "Change window number failed!"; + showOPInfo(szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// login +function clickLogin() { + var szIP = $("#loginip").val(), + szPort = $("#port").val(), + szUsername = $("#username").val(), + szPassword = $("#password").val(); + + if ("" == szIP || "" == szPort) { + return; + } + + var szDeviceIdentify = szIP + "_" + szPort; + + WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, { + timeout: 3000, + success: function (xmlDoc) { + showOPInfo(szDeviceIdentify + " login successful"); + $("#ip").prepend(""); + setTimeout(function () { + $("#ip").val(szDeviceIdentify); + setTimeout(function() { + getChannelInfo(); + }, 1000); + getDevicePort(); + }, 10); + }, + error: function (oError) { + if (ERROR_CODE_LOGIN_REPEATLOGIN === status) { + showOPInfo(szDeviceIdentify + " is already login"); + } else { + showOPInfo(szDeviceIdentify + " login failed", oError.errorCode, oError.errorMsg); + } + } + }); +} + +//logout +function clickLogout() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_Logout(szDeviceIdentify).then(() => { + showOPInfo(szDeviceIdentify + " " + "logout successful"); + }, () => { + showOPInfo(szDeviceIdentify + " " + "logout failed"); + }); +} + +// get deivce info +function clickGetDeviceInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetDeviceInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var arrStr = []; + arrStr.push("device name: " + $(xmlDoc).find("deviceName").eq(0).text() + "\r\n"); + arrStr.push("device ID: " + $(xmlDoc).find("deviceID").eq(0).text() + "\r\n"); + arrStr.push("model: " + $(xmlDoc).find("model").eq(0).text() + "\r\n"); + arrStr.push("serial number: " + $(xmlDoc).find("serialNumber").eq(0).text() + "\r\n"); + arrStr.push("MAC address: " + $(xmlDoc).find("macAddress").eq(0).text() + "\r\n"); + arrStr.push("firmware version: " + $(xmlDoc).find("firmwareVersion").eq(0).text() + " " + $(xmlDoc).find("firmwareReleasedDate").eq(0).text() + "\r\n"); + arrStr.push("encoder version: " + $(xmlDoc).find("encoderVersion").eq(0).text() + " " + $(xmlDoc).find("encoderReleasedDate").eq(0).text() + "\r\n"); + + showOPInfo(szDeviceIdentify + " get deivce info success."); + alert(arrStr.join("")); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " get device info failed ", oError.errorCode, oError.errorMsg); + } + }); +} + +// get channel info +function getChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + oSel = $("#channels").empty(); + + if (null == szDeviceIdentify) { + return; + } + + // analog channel + WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("VideoInputChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " get analog channel success."); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " get analog channel failed ", oError.errorCode, oError.errorMsg); + } + }); + // IP channel + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(), + online = $(this).find("online").eq(0).text(); + if ("false" == online) { + return true; + } + if ("" == name) { + name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " get IP channel success."); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " get IP channel failed ", oError.errorCode, oError.errorMsg); + } + }); + // zero-channel info + WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("ZeroVideoChannel"); + + $.each(oChannels, function (i) { + var id = $(this).find("id").eq(0).text(), + name = $(this).find("name").eq(0).text(); + if ("" == name) { + name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1)); + } + if ("true" == $(this).find("enabled").eq(0).text()) { + oSel.append(""); + } + }); + showOPInfo(szDeviceIdentify + " get zero-channel success."); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " get zero-channel failed ", oError.errorCode, oError.errorMsg); + } + }); +} + +//get port +function getDevicePort() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then((oPort) => { + $("#deviceport").val(oPort.iDevicePort); + $("#rtspport").val(oPort.iRtspPort); + + showOPInfo(szDeviceIdentify + " get port success."); + }, (oError) => { + var szInfo = "get port failed."; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// get IP channel +async function clickGetDigitalChannelInfo() { + var szDeviceIdentify = $("#ip").val(), + iAnalogChannelNum = 0; + + $("#digitalchannellist").empty(); + + if (null == szDeviceIdentify) { + return; + } + + try { + var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {}); + iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length; + } finally { + WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oChannels = $(xmlDoc).find("InputProxyChannelStatus"); + + $.each(oChannels, function () { + var id = parseInt($(this).find("id").eq(0).text(), 10), + ipAddress = $(this).find("ipAddress").eq(0).text(), + srcInputPort = $(this).find("srcInputPort").eq(0).text(), + managePortNo = $(this).find("managePortNo").eq(0).text(), + online = $(this).find("online").eq(0).text(), + proxyProtocol = $(this).find("proxyProtocol").eq(0).text(); + + var objTr = $("#digitalchannellist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.innerHTML = (id - iAnalogChannelNum) < 10 ? "D0" + (id - iAnalogChannelNum) : "D" + (id - iAnalogChannelNum); + objTd = objTr.insertCell(1); + objTd.width = "25%"; + objTd.innerHTML = ipAddress; + objTd = objTr.insertCell(2); + objTd.width = "15%"; + objTd.innerHTML = srcInputPort; + objTd = objTr.insertCell(3); + objTd.width = "20%"; + objTd.innerHTML = managePortNo; + objTd = objTr.insertCell(4); + objTd.width = "15%"; + objTd.innerHTML = "true" == online ? "online" : "offline"; + objTd = objTr.insertCell(5); + objTd.width = "25%"; + objTd.innerHTML = proxyProtocol; + }); + showOPInfo(szDeviceIdentify + " get IP channel success."); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " no IP channel ", oError.errorCode, oError.errorMsg); + } + }); + } +} +// strat real play +function clickStartRealPlay(iStreamType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + szInfo = ""; + + if ("undefined" === typeof iStreamType) { + iStreamType = parseInt($("#streamtype").val(), 10); + } + + if (null == szDeviceIdentify) { + return; + } + var startRealPlay = function () { + WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, { + iStreamType: iStreamType, + iChannelID: iChannelID, + bZeroChannel: bZeroChannel, + success: function () { + szInfo = "start real play success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " start real play failed ", oError.errorCode, oError.errorMsg); + } + }); + }; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + startRealPlay(); + } + }); + } else { + startRealPlay(); + } +} +function setTextOverlay() { + var szDeviceIdentify = $("#ip").val(); + var szInfo = ""; + var that = this; + var iChannelID = parseInt($("#channels").val(), 10); + var szUrl = "ISAPI/System/Video/inputs/channels/" + iChannelID + "/overlays"; + WebVideoCtrl.I_GetTextOverlay(szUrl,szDeviceIdentify,{ + success:function(data){ + $(data).find("TextOverlay").eq(0).find("displayText").eq(0).text("test"); + $(data).find("TextOverlay").eq(0).find("positionX").eq(0).text("20"); + $(data).find("TextOverlay").eq(0).find("positionY").eq(0).text("30"); + var xmldoc = toXMLStr(data); + var newOptions = { + type: "PUT", + data: xmldoc, + success: function(){ + szInfo = "set osd info successful"; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function(oError){ + showOPInfo(szDeviceIdentify + " set osd info failed", oError.errorCode, oError.errorMsg); + } + }; + + WebVideoCtrl.I_SendHTTPRequest(szDeviceIdentify,szUrl,newOptions); + }, + error: function(oError){ + showOPInfo(szDeviceIdentify + " set osd info failed ", oError.errorCode, oError.errorMsg); + } + }); +} +// stop real play +function clickStopRealPlay() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "stop real play success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " stop real play failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// open sound +function clickOpenSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var allWndInfo = WebVideoCtrl.I_GetWindowStatus(); + for (var i = 0, iLen = allWndInfo.length; i < iLen; i++) { + oWndInfo = allWndInfo[i]; + if (oWndInfo.bSound) { + WebVideoCtrl.I_CloseSound(oWndInfo.iIndex); + break; + } + } + + WebVideoCtrl.I_OpenSound().then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "open sound successful."); + }, (oError) => { + var szInfo = " open sound failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// close sound +function clickCloseSound() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_CloseSound().then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "close sound success."); + }, (oError) => { + var szInfo = " close sound failed."; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// set volume +function clickSetVolume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iVolume = parseInt($("#volume").val(), 10), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_SetVolume(iVolume).then(() => { + showOPInfo(oWndInfo.szDeviceIdentify + " " + "set volume success."); + }, (oError) => { + var szInfo = " set volume failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// capture +async function clickCapturePic(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + var oLocalConfig = await WebVideoCtrl.I_GetLocalCfg(); + var szCaptureFileFormat = "0"; + if (oLocalConfig) { + szCaptureFileFormat = oLocalConfig.captureFileFormat; + } + + var szChannelID = $("#channels").val(); + var szPicName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + if ("playback" === szType) { + szPicName = "playback_" + oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + } + + szPicName += ("0" === szCaptureFileFormat) ? ".jpg": ".bmp"; + + WebVideoCtrl.I_CapturePic(szPicName, { + bDateDir: true + }).then(function(){ + szInfo = "capture success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, function(oError){ + szInfo = " capture failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} +// capture data +function clickCapturePicData() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + if (oWndInfo != null) { + WebVideoCtrl.I_CapturePicData().then(function(data){ + console.log(data); + szInfo = "get capture data success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + },function(){ + szInfo = "get capture data failed."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }); + } +} + +// start record +var g_szRecordType = ""; +function clickStartRecord(szType) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + g_szRecordType = szType; + + if (oWndInfo != null) { + var szChannelID = $("#channels").val(), + szFileName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime(); + + WebVideoCtrl.I_StartRecord(szFileName, { + bDateDir: true, + success: function () { + if ('realplay' === szType) { + szInfo = "start recording success."; + } else if ('playback' === szType) { + szInfo = "start clip success."; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ('realplay' === szType) { + szInfo = " start recording failed."; + } else if ('playback' === szType) { + szInfo = " start clip failed."; + } + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// stop record +function clickStopRecord(szType, iWndIndex) { + if ("undefined" === typeof iWndIndex) { + iWndIndex = g_iWndIndex; + } + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_StopRecord({ + success: function () { + if ('realplay' === szType) { + szInfo = "stop recording success."; + } else if ('playback' === szType) { + szInfo = "stop clip success."; + } + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + if ('realplay' === szType) { + szInfo = "stop recording failed."; + } else if ('playback' === szType) { + szInfo = "stop clip failed."; + } + sshowOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// get audio channel +function clickGetAudioInfo() { + var szDeviceIdentify = $("#ip").val(); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_GetAudioInfo(szDeviceIdentify, { + success: function (xmlDoc) { + var oAudioChannels = $(xmlDoc).find("TwoWayAudioChannel"), + oSel = $("#audiochannels").empty(); + $.each(oAudioChannels, function () { + var id = $(this).find("id").eq(0).text(); + + oSel.append(""); + }); + showOPInfo(szDeviceIdentify + " get audio channel success."); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " get audio channel failed ", oError.errorCode, oError.errorMsg); + } + }); +} + +// start voice talk +function clickStartVoiceTalk() { + var szDeviceIdentify = $("#ip").val(), + iAudioChannel = parseInt($("#audiochannels").val(), 10), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (isNaN(iAudioChannel)) { + alert("please select channel first."); + return; + } + + WebVideoCtrl.I_StartVoiceTalk(szDeviceIdentify, iAudioChannel).then(() => { + szInfo = "start voice talk success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + var szInfo = " start voice talk failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// stop voice talk +function clickStopVoiceTalk() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_StopVoiceTalk().then(() => { + szInfo = "stop voice talk success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + var szInfo = " stop voice talk failed."; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); +} + +// enable E-zoom +function clickEnableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_EnableEZoom().then(() => { + szInfo = "enable E-zoom success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "enable E-zoom failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + + }); + } +} + +//disable E-zoom +function clickDisableEZoom() { + var szDeviceIdentify = $("#ip").val(); + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_DisableEZoom().then(() => { + szInfo = "disable E-zoom success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "disable E-zoom failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// nable 3D zoom +function clickEnable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Enable3DZoom().then(() => { + szInfo = "enable 3D zoom success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "enable 3D zoom failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// diasble 3D zoom +function clickDisable3DZoom() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + var szDeviceIdentify = $("#ip").val(); + + if (oWndInfo != null) { + WebVideoCtrl.I_Disable3DZoom().then(() => { + szInfo = "diasble 3D zoom success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "diasble 3D zoom failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + } +} + +// full screen +function clickFullScreen() { + WebVideoCtrl.I_FullScreen(true).then(() => { + showOPInfo(" full screen success."); + }, (oError) => { + showOPInfo("full screen failed ", oError.errorCode, oError.errorMsg); + }); +} + +// PTZ control, 9- auto; 1,2,3,4,5,6,7,8 - PTZ direction control by mouse +var g_bPTZAuto = false; +function mouseDownPTZControl(iPTZIndex) { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iPTZSpeed = $("#ptzspeed").val(); + + if (bZeroChannel) {// zero-channel does not support PTZ + return; + } + + if (oWndInfo != null) { + if (9 == iPTZIndex && g_bPTZAuto) { + iPTZSpeed = 0;// you can close auto mode by setting speed to 0 when auto is start already + } else { + g_bPTZAuto = false;// auto mode will be close when you clik other direction + } + + WebVideoCtrl.I_PTZControl(iPTZIndex, false, { + iPTZSpeed: iPTZSpeed, + success: function (xmlDoc) { + if (9 == iPTZIndex && g_bPTZAuto) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop PTZ success."); + } else { + showOPInfo(oWndInfo.szDeviceIdentify + " start PTZ success."); + } + if (9 == iPTZIndex) { + g_bPTZAuto = !g_bPTZAuto; + } + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " start PTZ failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// stop PTZ direction +function mouseUpPTZControl() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(1, true, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop PTZ direction successful."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop PTZ direction failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// set preset +function clickSetPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_SetPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " set preset success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " set preset failed.", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// call preset +function clickGoPreset() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + iPresetID = parseInt($("#preset").val(), 10); + + if (oWndInfo != null) { + WebVideoCtrl.I_GoPreset(iPresetID, { + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " call preset successful."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " call preset failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// record searching +var g_iSearchTimes = 0; +function clickRecordSearch(iType) { + var szDeviceIdentify = $("#ip").val(), + iChannelID = parseInt($("#channels").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iStreamType = parseInt($("#record_streamtype").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(); + if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) { + alert("starttime must earlier than endtime"); + return; + } + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// ero-channel does not support record searching + return; + } + + if (0 == iType) {// search for the first time + $("#searchlist").empty(); + g_iSearchTimes = 0; + } + + WebVideoCtrl.I_RecordSearch(szDeviceIdentify, iChannelID, szStartTime, szEndTime, { + iStreamType: iStreamType, + iSearchPos: g_iSearchTimes, + success: function (xmlDoc) { + if ("MORE" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + for(var i = 0, nLen = $(xmlDoc).find("searchMatchItem").length; i < nLen; i++) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if(szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size=")); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = "download"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI); + ++g_iSearchTimes; + } + + clickRecordSearch(1); + } else if ("OK" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + var iLength = $(xmlDoc).find("searchMatchItem").length; + for(var i = 0; i < iLength; i++) { + var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text(); + if(szPlaybackURI.indexOf("name=") < 0) { + break; + } + var szStartTime = $(xmlDoc).find("startTime").eq(i).text(); + var szEndTime = $(xmlDoc).find("endTime").eq(i).text(); + var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size=")); + + var objTr = $("#searchlist").get(0).insertRow(-1); + var objTd = objTr.insertCell(0); + objTd.id = "downloadTd" + i; + objTd.innerHTML = g_iSearchTimes + 1; + objTd = objTr.insertCell(1); + objTd.width = "30%"; + objTd.innerHTML = szFileName; + objTd = objTr.insertCell(2); + objTd.width = "30%"; + objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(3); + objTd.width = "30%"; + objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", ""); + objTd = objTr.insertCell(4); + objTd.width = "10%"; + objTd.innerHTML = "download"; + $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName); + $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI); + ++g_iSearchTimes; + } + showOPInfo(szDeviceIdentify + " search video file success."); + } else if("NO MATCHES" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) { + setTimeout(function() { + g_iSearchTimes = 0; + showOPInfo(szDeviceIdentify + " no record file."); + }, 50); + } + }, + error: function (oError) { + g_iSearchTimes = 0; + showOPInfo(szDeviceIdentify + " earch record file failed ", oError.errorCode, oError.errorMsg); + } + }); +} + +// start play back +function clickStartPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = "", + bChecked = $("#transstream").prop("checked"), + iRet = -1; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// zero-channel does not support play back + return; + } + + var startPlayback = function () { + if (bChecked) { + var oTransCodeParam = { + TransFrameRate: "16",// 0: full, 5: 1, 6: 2, 7: 4, 8: 6, 9: 8, 10: 10, 11: 12, 12: 16, 14: 15, 15: 18, 13: 20, 16: 22 + TransResolution: "2",// 255: Auto, 3: 4CIF, 2: QCIF, 1: CIF + TransBitrate: "23"// 2: 32K, 3: 48K, 4: 64K, 5: 80K, 6: 96K, 7: 128K, 8: 160K, 9: 192K, 10: 224K, 11: 256K, 12: 320K, 13: 384K, 14: 448K, 15: 512K, 16: 640K, 17: 768K, 18: 896K, 19: 1024K, 20: 1280K, 21: 1536K, 22: 1792K, 23: 2048K, 24: 3072K, 25: 4096K, 26: 8192K + }; + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + oTransCodeParam: oTransCodeParam, + success: function () { + szInfo = "start playback success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "start playback failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } else { + WebVideoCtrl.I_StartPlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime, + success: function () { + szInfo = "start playback success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "start playback failed."; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } + }; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + startPlayback(); + } + }); + } else { + startPlayback(); + } +} + +// stop play back +function clickStopPlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + szInfo = "stop play back success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "stop play back failed."; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +//start reverse play +function clickReversePlayback() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szDeviceIdentify = $("#ip").val(), + iRtspPort = parseInt($("#rtspport").val(), 10), + iStreamType = parseInt($("#record_streamtype").val(), 10), + bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false, + iChannelID = parseInt($("#channels").val(), 10), + szStartTime = $("#starttime").val(), + szEndTime = $("#endtime").val(), + szInfo = ""; + + if (null == szDeviceIdentify) { + return; + } + + if (bZeroChannel) {// zero-channel does not support reverse play + return; + } + + var reversePlayback = function () { + WebVideoCtrl.I_ReversePlayback(szDeviceIdentify, { + iRtspPort: iRtspPort, + iStreamType: iStreamType, + iChannelID: iChannelID, + szStartTime: szStartTime, + szEndTime: szEndTime + }).then(() => { + szInfo = "start reverse play success."; + showOPInfo(szDeviceIdentify + " " + szInfo); + }, (oError) => { + szInfo = "start reverse play failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + }); + }; + + if (oWndInfo != null) { + WebVideoCtrl.I_Stop({ + success: function () { + reversePlayback(); + } + }); + } else { + reversePlayback(); + } +} + +// single frame +function clickFrame() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Frame({ + success: function () { + szInfo = "single frame play success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "single frame play failed "; + showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// pause +function clickPause() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Pause({ + success: function () { + szInfo = "pause success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "pause failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// resume +function clickResume() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_Resume({ + success: function () { + szInfo = "resume success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "resume failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// slow play +function clickPlaySlow() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlaySlow({ + success: function () { + szInfo = "slow play success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "slow play failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// fast play +function clickPlayFast() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex), + szInfo = ""; + + if (oWndInfo != null) { + WebVideoCtrl.I_PlayFast({ + success: function () { + szInfo = "fast play success."; + showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo); + }, + error: function (oError) { + szInfo = "fast play failed "; + showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg); + } + }); + } +} + +// OSD time +function clickGetOSDTime() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_GetOSDTime({ + success: function (szOSDTime) { + $("#osdtime").val(szOSDTime); + showOPInfo(oWndInfo.szDeviceIdentify + " get OSD time success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " get OSD time failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// download video +var g_iDownloadID = -1; +var g_tDownloadProcess = 0; +function clickStartDownloadRecord(i) { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd" + i).data("fileName"), + szPlaybackURI = $("#downloadTd" + i).data("playbackURI"); + + if (null == szDeviceIdentify) { + return; + } + + WebVideoCtrl.I_StartDownloadRecord(szDeviceIdentify, szPlaybackURI, szFileName, { + bDateDir: true + }).then((iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + i + ")", 1000); + }, (oError) => { + WebVideoCtrl.I_GetLastError().then((iErrorValue) => { + if (34 == iErrorValue) { + showOPInfo(szDeviceIdentify + " download already."); + } else if (33 == iErrorValue) { + showOPInfo(szDeviceIdentify + " lack of space."); + } else { + showOPInfo(szDeviceIdentify + " download failed."); + } + }); + }); +} +function clickStartDownloadRecordByTime() { + var szDeviceIdentify = $("#ip").val(), + szChannelID = $("#channels").val(), + szFileName = $("#downloadTd0").data("fileName"), + szPlaybackURI = $("#downloadTd0").data("playbackURI"), + szStartTime = $("#downloadstarttime").val(), + szEndTime = $("#downloadendtime").val(); + if (null == szDeviceIdentify) { + return; + } + if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) { + alert("starttime must earlier than endtime"); + return; + } + WebVideoCtrl.I_StartDownloadRecordByTime(szDeviceIdentify, szPlaybackURI, szFileName, szStartTime,szEndTime,{ + bDateDir: true + }).then((iDownloadID) => { + g_iDownloadID = iDownloadID; + $("
").appendTo("body"); + g_tDownloadProcess = setInterval("downProcess(" + 0 + ")", 1000); + }, (oError) => { + showOPInfo(szDeviceIdentify + " Download Failed."); + }); +} + +function clickStopDownload() { + WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID).then(() => { + showOPInfo("stop download successful."); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + $("#downProcess").remove(); + }, (oError) => { + showOPInfo(szDeviceIdentify + " stop download failed ", oError.errorCode, oError.errorMsg); + }); +} +// download process +async function downProcess() { + var iStatus = await WebVideoCtrl.I_GetDownloadStatus(g_iDownloadID); + if (0 == iStatus) { + $("#downProcess").css({ + width: $("#searchlist").width() + "px", + height: "100px", + lineHeight: "100px", + left: $("#searchdiv").offset().left + "px", + top: $("#searchdiv").offset().top + "px" + }); + var iProcess = await WebVideoCtrl.I_GetDownloadProgress(g_iDownloadID); + if (iProcess < 0) { + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } else if (iProcess < 100) { + $("#downProcess").text(iProcess + "%"); + } else { + $("#downProcess").text("100%"); + setTimeout(function () { + $("#downProcess").remove(); + }, 1000); + + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + showOPInfo("video dowload finish."); + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } + } else { + await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID); + + clearInterval(g_tDownloadProcess); + g_tDownloadProcess = 0; + g_iDownloadID = -1; + } +} + +// reconnection +function reconnect(szDeviceIdentify) { + WebVideoCtrl.I_Reconnect(szDeviceIdentify, { + timeout: 3000, + success: function (xmlDoc) { + $("#restartDiv").remove(); + }, + error: function () { + setTimeout(function () {reconnect(szDeviceIdentify);}, 5000); + } + }); +} + +// start upgrade +var g_tUpgrade = 0; +function clickStartUpgrade(szDeviceIdentify) { + var szDeviceIdentify = $("#ip").val(), + szFileName = $("#upgradeFile").val(); + + if (null == szDeviceIdentify) { + return; + } + + if ("" == szFileName) { + alert("please select upgrade file."); + return; + } + WebVideoCtrl.I_StartUpgrade(szDeviceIdentify, szFileName).then(function(){ + g_tUpgrade = setInterval("getUpgradeStatus('" + szDeviceIdentify + "')", 1000); + },function(){ + clearInterval(g_tUpgrade); + showOPInfo(szDeviceIdentify + " upgrade failed."); + }); +} + +// get upgrade status +async function getUpgradeStatus(szDeviceIdentify) { + var bUpdating = await WebVideoCtrl.I_UpgradeStatus(szDeviceIdentify); + if (bUpdating) { + var iProcess = await WebVideoCtrl.I_UpgradeProgress(szDeviceIdentify); + if (iProcess < 0) { + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + showOPInfo(szDeviceIdentify + " get process failed."); + return; + } else if (iProcess < 100) { + if (0 == $("#restartDiv").length) { + $("
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + } + $("#restartDiv").text(iProcess + "%"); + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function (xmlDoc) { + $("
reboot...
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " reboot failed ", oError.errorCode, oError.errorMsg); + } + }); + } + } else { + await WebVideoCtrl.I_StopUpgrade(); + clearInterval(g_tUpgrade); + g_tUpgrade = 0; + + $("#restartDiv").remove(); + + WebVideoCtrl.I_Restart(szDeviceIdentify, { + success: function () { + $("
reboot...
").appendTo("body"); + var oSize = getWindowSize(); + $("#restartDiv").css({ + width: oSize.width + "px", + height: oSize.height + "px", + lineHeight: oSize.height + "px", + left: 0, + top: 0 + }); + setTimeout("reconnect('" + szDeviceIdentify + "')", 20000); + }, + error: function (oError) { + showOPInfo(szDeviceIdentify + " reboot failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +// check plugin version +function clickCheckPluginVersion() { + var szDeviceIdentify = $("#ip").val(); + WebVideoCtrl.I_CheckPluginVersion().then((bNeedUpdate) => { + if (bNeedUpdate) { + alert("detect the latest plugin version."); + } else { + alert("your plugin version is the latest."); + } + }, () => { + showOPInfo(szDeviceIdentify + " check plugin version failed."); + }); +} + +function clickRestoreDefault() { + var szDeviceIdentify = $("#ip").val(), + szMode = "basic"; + WebVideoCtrl.I_RestoreDefault(szDeviceIdentify, szMode).then(() => { + $("#restartDiv").remove(); + showOPInfo(szDeviceIdentify + " restore default successful."); + }, (oError) => { + showOPInfo(szDeviceIdentify + " restore default failed ", oError.errorCode, oError.errorMsg); + }); +} + +function PTZZoomIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(10, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " Zoom+success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " Zoom+success failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZZoomout() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " Zoom-success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " Zoom-failed.", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZZoomStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(11, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop zoom success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop zoom failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFocusIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " focus+success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " focus+failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFoucusOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(13, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " focus-success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " focus-failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZFoucusStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(12, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop focus success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop focus failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisIn() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " Iris+success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " Iris+failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisOut() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(15, false, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " Iris-success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " Iris-failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + +function PTZIrisStop() { + var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex); + + if (oWndInfo != null) { + WebVideoCtrl.I_PTZControl(14, true, { + iWndIndex: g_iWndIndex, + success: function (xmlDoc) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop Iris success."); + }, + error: function (oError) { + showOPInfo(oWndInfo.szDeviceIdentify + " stop Iris failed ", oError.errorCode, oError.errorMsg); + } + }); + } +} + + +// polygon drawing enabled +var g_bEnableDraw = false; +function clickEnableDraw() { + WebVideoCtrl.I_SetPlayModeType(6).then(() => { + g_bEnableDraw = true; + showOPInfo("drawing enabled succeed."); + }, (oError) => { + showOPInfo("drawing enabled failed ", oError.errorCode, oError.errorMsg); + }); +} + +// polygon drawing disabled +function clickDisableDraw() { + WebVideoCtrl.I_SetSnapDrawMode(0, -1).then(() => { + g_bEnableDraw = false; + showOPInfo("drawing disabled success."); + }, (oError) => { + showOPInfo("drawing disabled failed ", oError.errorCode, oError.errorMsg); + }); +} + +// add the graph +function clickAddSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var szName = encodeString($("#snapName").val()); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "" + szId + ""; // [1, 32] + szInfo += "0"; //if draw polygon, set polygonType 1 + szInfo += "17"; // [MinClosed, 17] + szInfo += "4"; // [4, 17] + szInfo += "#" + szId + "#" + szName + ""; + szInfo += "false"; + szInfo += "02550"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => { + showOPInfo("add graph succeed."); + }); + WebVideoCtrl.I_SetSnapDrawMode(g_iWndIndex, 2); +} + +// delete the graph +function clickDelSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + var szId = $("#snapId").val(); + var aShapes = []; + aShapes.push({ + polygonType: 0, + id: szId + }); + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex, aShapes); +} + +//get graph info +function clickGetSnapPolygon() { + WebVideoCtrl.I_GetSnapPolygonInfo(g_iWndIndex).then((szXml) => { + alert(szXml); + }); +} + +//set graph ifno +function clickSetSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex); + + var szInfo = ""; + szInfo += ""; + szInfo += ""; + szInfo += "1"; + szInfo += "1"; + szInfo += "#1#"; + szInfo += "true"; + szInfo += "02550"; + szInfo += ""; + szInfo += "0.7379030.229730"; + szInfo += "0.9475810.804054"; + szInfo += "0.3629030.777027"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + szInfo += "2"; + szInfo += "0"; + szInfo += "#2#"; + szInfo += "true"; + szInfo += "2552550"; + szInfo += ""; + szInfo += "0.20.2"; + szInfo += "0.80.2"; + szInfo += "0.80.8"; + szInfo += "0.20.8"; + szInfo += ""; + szInfo += ""; + szInfo += ""; + + WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => { + showOPInfo("set the graph succeed."); + }, (oError) => { + showOPInfo("set the graph failed ", oError.errorCode, oError.errorMsg); + }); +} + +// clear the graph +function clickDelAllSnapPolygon() { + if (!g_bEnableDraw) { + return; + } + + WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex).then(() => { + showOPInfo("clear the graph successful."); + }, (oError) => { + showOPInfo("clear the graph failed ", oError.errorCode, oError.errorMsg); + }); +} + + +function loadXML(szXml) { + if(null == szXml || "" == szXml) { + return null; + } + + var oXmlDoc = null; + + if (window.DOMParser) { + var oParser = new DOMParser(); + oXmlDoc = oParser.parseFromString(szXml, "text/xml"); + } else { + oXmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + oXmlDoc.async = false; + oXmlDoc.loadXML(szXml); + } + + return oXmlDoc; +} + +function toXMLStr(oXmlDoc) { + var szXmlDoc = ""; + + try { + var oSerializer = new XMLSerializer(); + szXmlDoc = oSerializer.serializeToString(oXmlDoc); + } catch (e) { + try { + szXmlDoc = oXmlDoc.xml; + } catch (e) { + return ""; + } + } + if (szXmlDoc.indexOf("" + szXmlDoc; + } + + return szXmlDoc; +} + +function encodeString(str) { + if (str) { + return str.replace(/&/g, '&').replace(//g, '>'); + } else { + return ""; + } +} \ No newline at end of file diff --git a/hkws/webs/index.html b/hkws/webs/index.html new file mode 100644 index 0000000000..bcbb01fac4 --- /dev/null +++ b/hkws/webs/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/hkws/webs/jquery-1.7.1.min.js b/hkws/webs/jquery-1.7.1.min.js new file mode 100644 index 0000000000..4803a0c9b5 --- /dev/null +++ b/hkws/webs/jquery-1.7.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,t2=/(trident.*rv:)([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i0&& b[1].indexOf("trident")>-1){b[1]="msie"}return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file