<head>
<style>
.dot-typing{position:relative;left:-9999px;width:10px;height:10px;border-radius:5px;background-color:#9880ff;color:#9880ff;box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff;animation:dotTyping 1.5s infinite linear}@keyframes dotTyping{0%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}16.667%{box-shadow:9984px -10px 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}33.333%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}50%{box-shadow:9984px 0 0 0 #9880ff,9999px -10px 0 0 #9880ff,10014px 0 0 0 #9880ff}66.667%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}83.333%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px -10px 0 0 #9880ff}100%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}}
</style>
</head>
<fieldset class="cbi-section">
	<table width="100%">
	   <tr>
	  	<td colspan="4" width="100%">
	  		<p align="center">
	      <img id="logo" src="data:image/png;base64, " title="Hello, World!" alt="Openclash" width="150" onclick="return homepage()" />
        </p>
	  		<p id="_clashversion" align="center" >
	  		   <b><%:Collecting data...%></b>
	  		</p>
	   </td></tr>
	   <tr><td colspan="4" width="100%">
     	  <p align="center">
    	     <img id="wiki" src="https://img.shields.io/badge/Tutorials--lightgrey?logo=Wikipedia&style=social" loading="lazy" alt="Wiki" width="75px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return wikipage()" />
    	     &nbsp;&nbsp;&nbsp;
    	     <img id="star" src="https://img.shields.io/badge/Star--lightgrey?logo=github&style=social" loading="lazy" alt="star" width="50px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return homepage()" />
    	     &nbsp;&nbsp;&nbsp;
    	     <img id="telegram" src="https://img.shields.io/badge/Telegram--lightgrey?logo=Telegram&style=social" loading="lazy" alt="Telegram" onerror="return imgerrorfuns(this,this.src)" onclick="return telegrampage()" />
    	     &nbsp;&nbsp;&nbsp;
    	     <img id="sponsor" src="https://img.shields.io/badge/Sponsor--lightgrey?logo=ko-fi&style=social" loading="lazy" alt="Sponsor" width="73px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return sponsorpage()" />
        </p>
     </td></tr>
	  <tr><td width="100%" colspan="4">
	  	<p align="center" id="_clashstart">
	  		<b><%:Tip: after started, please wait patiently until the connection is normal%></b>
	  	</p>
	  </td></tr>
		<tr><td width="25%"><%:Main Program%></td><td  width="25%" align="left" id="_clash"><%:Collecting data...%></td><td width="25%"><%:Control Panel Login IP%></td><td width="25%" align="left" id="_daip"><%:Collecting data...%></td></tr>
		<tr><td width="25%"><%:Core Daemons%></td><td width="25%" align="left" id="_watchdog"><%:Collecting data...%></td><td width="25%"><%:Control Panel Login Port%></td><td width="25%" align="left" id="_dapo"><%:Collecting data...%></td></tr>
		<tr><td width="25%"><%:Core Running Mode%></td><td  width="25%" align="left" id="_mode"><%:Collecting data...%></td><td width="25%"><%:Control Panel Login Secret%></td><td width="25%" align="left" id="_dase"><%:Collecting data...%></td></tr>
		<tr><td width="25%"><%:Yacd Control Panel%></td><td width="25%" align="left" id="_web"><%:Collecting data...%></td><td width="25%"><%:Dashboard Control Panel%></td><td width="25%" align="left" id="_webo"><%:Collecting data...%></td></tr>
		<tr id="tool_label2"><td colspan="4"><p align="center">
<span>
&nbsp;&nbsp;<%:Up:%>&nbsp;
	<span id="upload_">
		<font color=green>
		0 KB/S
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:Down:%>&nbsp;
	<span id="download_">
		<font color=green>
		0 KB/S
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:Up Total:%>&nbsp;
	<span id="uploadtotal_">
		<font color=green>
		0 KB
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:Down Total:%>&nbsp;
	<span id="downloadtotal_">
		<font color=green>
		0 KB
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:Connections:%>&nbsp;
	<span id="connect_t">
		<font color=green>
		0
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:Ram:%>&nbsp;
	<span id="mem_t">
		<font color=green>
		0 KB
		</font>
	</span>
</span>

<span>
&nbsp;&nbsp;<%:CPU:%>&nbsp;
	<span id="cpu_t">
		<font color=green>
		0 %
		</font>
	</span>
	&nbsp;&nbsp;
</span>
</p></td></tr>
		<tr height="50px">
			<td width="100%" colspan="4">
				<div id="hid_btn" style="height: 25px;width: 100px;margin: 0 auto;" onclick="hid_btn_action()">
					<div style="margin: 0 auto; top: 50%;" class="dot-typing"></div>
				</div>
			</td>
		</tr>
		<tr id="hid_1"><td width="100%" colspan="4"><p align="center"><b><%:Quick Operation%></b></p></td></tr>
    <tr id="hid_2">
    	<td width="25%" align="center" id="_close_all_connection"><%:Collecting data...%></td>
			<td width="25%" align="center" id="_reload_firewall"><%:Collecting data...%></td>
			<td width="25%" align="center" id="_update_subscribe"><%:Collecting data...%></td>
			<td width="25%" align="center" id="_one_key_update"><%:Collecting data...%></td>
			</tr>
		<tr id="hid_3">
			<td width="50%" colspan="2" align="center" id="_update_other_rules"><%:Collecting data...%></td>
			<td width="50%" colspan="2" align="center" id="_update_geoip"><%:Collecting data...%></td>
			</tr>
</table>
</fieldset>
<fieldset id="state" class="cbi-section">
	<table>
		<tr><td width="100%" colspan="4">
			<p align="center">
				<b><%:Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page%></b>
			</p>
		</td></tr>
		<tr><td width="25%"><%:Node Select Backup%></td><td width="25%" align="left" id="_historychecktime"><%:Collecting data...%></td><td width="25%"><%:lhie1 Rule Update%></td><td width="25%" align="left" id="_lhie1"><%:Collecting data...%></td></tr>
		<tr><td width="25%"><%:ConnersHua Rule Update%></td><td width="25%" align="left" id="_ConnersHua"><%:Collecting data...%></td><td width="25%"><%:ConnersHua Return Rule Update%></td><td width="25%" align="left" id="_ConnersHua_return"><%:Collecting data...%></td></tr>
		<tr><td width="25%"><%:Mainland IP Update%></td><td width="25%" align="left" id="_chnroute"><%:Collecting data...%></td><td width="25%"><%:GEOIP（By MaxMind）Data Update%></td><td width="25%" align="left" id="_ipdb"><%:Collecting data...%></td></tr>
	</table>
</fieldset>
<script type="text/javascript">//<![CDATA[
	var clash = document.getElementById('_clash');
	var mode = document.getElementById('_mode');
	var web = document.getElementById('_web');
	var webo = document.getElementById('_webo');
	var watchdog = document.getElementById('_watchdog');
	var daip = document.getElementById('_daip');
	var dase = document.getElementById('_dase');
	var dapo = document.getElementById('_dapo');
	var clashversion = document.getElementById('_clashversion');
	var close_all_connection = document.getElementById('_close_all_connection');
	var reload_firewall = document.getElementById('_reload_firewall');
	var one_key_update = document.getElementById('_one_key_update');
	var update_subscribe = document.getElementById('_update_subscribe');
	var update_other_rules = document.getElementById('_update_other_rules');
	var update_geoip = document.getElementById('_update_geoip');
	var ipdb = document.getElementById('_ipdb');
	var lhie1 = document.getElementById('_lhie1');
	var ConnersHua = document.getElementById('_ConnersHua');
	var ConnersHua_return = document.getElementById('_ConnersHua_return');
	var chnroute = document.getElementById('_chnroute');
	var historychecktime = document.getElementById('_historychecktime');
	var hid_1 = document.getElementById("hid_1");
	var hid_2 = document.getElementById("hid_2");
	var hid_3 = document.getElementById("hid_3");
	var state = document.getElementById("state");
	var hid_btn = document.getElementById("hid_btn");
	var tool_label2 = document.getElementById('tool_label2');
	var hid_btn_if = true;
	var ws_connect = false;
	var ws_error = false;
	var ws_retry = 0;
	var luci_protocol;
	var ws_t;
	var ws_c;
	var state_refresh;
	state_get();
	
	hid_1.style.display = "none";
	hid_2.style.display = "none";
	hid_3.style.display = "none";
  state.style.display="none";

	XHR.poll(2, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
		if ( x && x.status == 200 ) {
			if ( status.restricted_mode != "1" )
			{
			   clash.innerHTML = status.clash ? '<b><font color=green><%:Running%></font></b>' : '<b><font color=red><%:Not Running%></font></b>';
			}
			else
			{
			   clash.innerHTML = status.clash ? '<b><font color=green><%:Running%> <%:<Limited State>%></font></b>' : '<b><font color=red><%:Not Running%></font></b>';
			}
			if ( status.mode == "fake-ip" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP (Enhance)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "redir-host" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host (Compatible)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "redir-host-tun" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host (TUN)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "fake-ip-tun" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP (TUN)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "redir-host-vpn" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host (Game)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "fake-ip-vpn" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP (Game)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "fake-ip-mix" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP (TUN-Mix)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			else if ( status.mode == "redir-host-mix" )
			{
			   mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host (TUN-Mix)%></font></b>" : '<b><font color=red><%:Not Running%></font></b>';
			}
			watchdog.innerHTML = status.watchdog ? '<b><font color=green><%:Running%></font> </b>' : '<b><font color=red><%:Not Running%></font></b>';
			daip.innerHTML = status.daip ? "<b><font color=green>"+status.daip+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
			dase.innerHTML = status.dase ? "<b><font color=green>"+status.dase+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
			dapo.innerHTML = status.cn_port ? "<b><font color=green>"+status.cn_port+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
			web.innerHTML = status.web ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Open Panel%>" onclick="return ycad_dashboard(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
			webo.innerHTML = status.web ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Open Panel%>" onclick="return net_dashboard(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
			close_all_connection.innerHTML = status.clash ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Close All Connections%>" onclick="return b_close_all_connection(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
			reload_firewall.innerHTML = status.clash ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Reload Firewall Rules%>" onclick="return b_reload_firewall(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
			one_key_update.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check All Components Update%>" onclick="return all_one_key_update(this)"/>';
			update_subscribe.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check Config Update%>" onclick="return b_update_subscribe(this)"/>';
			update_other_rules.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check Third Party Rules Update%>" onclick="return b_update_other_rules(this)"/>';
			update_geoip.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check GEOIP Data Update%>" onclick="return b_update_geoip(this)"/>';
			
			function ws_open() {
				luci_protocol = (window.location.protocol == "http:" ? "ws://" : "wss://") + status.daip + ":" + status.cn_port;
				ws_t = new WebSocket(luci_protocol+"/traffic?token="+status.dase);
				ws_c = new WebSocket(luci_protocol+"/connections?token="+status.dase);
				ws_t.onmessage = ws_tmessage;
				ws_c.onmessage = ws_cmessage;
				ws_t.onerror = ws_terror;
				ws_t.onopen = function (event) {
					ws_connect = true;
					ws_error = false;
				};
			};

			if (status.watchdog) {
				if (!ws_connect && !ws_error) {
					ws_open();
				}
				else if (ws_error && ws_retry < 3)
				{
					ws_retry=ws_retry+1;
					setTimeout(ws_open,1000*3);
				}
				else if (ws_error && ws_retry >= 3)
				{
					setInterval("ws_terror()",1000*2);
				}
			}
			else
			{
				ws_connect = false;
				ws_error = false;
				ws_terror();
			}
		}
	});
	
	function state_get() {
		XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "state")%>', null, function(x, status) {
			if ( x && x.status == 200 ) {
				ipdb.innerHTML = status.ipdb ? "<b><font color=green>"+status.ipdb+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
				lhie1.innerHTML = status.lhie1 ? "<b><font color=green>"+status.lhie1+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
				ConnersHua.innerHTML = status.ConnersHua ? "<b><font color=green>"+status.ConnersHua+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
				ConnersHua_return.innerHTML = status.ConnersHua_return ? "<b><font color=green>"+status.ConnersHua_return+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
				chnroute.innerHTML = status.chnroute ? "<b><font color=green>"+status.chnroute+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
				if ( status.historychecktime != "0" ) {
				   historychecktime.innerHTML = "<b><font color=green>"+status.historychecktime+"</font></b>";
				}
		  	else {
		 	 	 historychecktime.innerHTML = "<b><font color=green>"+"<%:No Backup%>"+"</font></b>";
		 	 }
			}
		});
	}
	
	function hid_btn_action() {
		if (hid_btn_if) {
			hid_1.style.display = "";
			hid_2.style.display = "";
			hid_3.style.display = "";
			state.style.display = "block";
			hid_btn_if = false;
			clearInterval(state_refresh);
			state_refresh=setInterval("state_get()",1000*2);
		} else {
			hid_1.style.display = "none";
			hid_2.style.display = "none";
			hid_3.style.display = "none";
			state.style.display = "none";
			hid_btn_if = true;
			clearInterval(state_refresh);
		}
	}
	
	function winOpen(url)
	{
		var winOpen = window.open(url);
		if(winOpen == null || typeof(winOpen) == 'undefined'){
			window.location.href=url;
		}
	}
	 
	function ws_terror() {
		ws_error = true;
		XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "toolbar_show")%>', null, function(x, status) {
			if (x && x.status == 200 && x.responseText != "") {
				document.getElementById("upload_").innerHTML = "<font color=green>"+status.up+"</font>";
				document.getElementById("download_").innerHTML = "<font color=green>"+status.down+"</font>";
				document.getElementById("uploadtotal_").innerHTML = "<font color=green>"+status.up_total+"</font>";
				document.getElementById("downloadtotal_").innerHTML = "<font color=green>"+status.down_total+"</font>";
				document.getElementById("mem_t").innerHTML = "<font color=green>"+status.mem+"</font>";
				document.getElementById("connect_t").innerHTML = "<font color=green>"+status.connections+"</font>";
				if (status.cpu <= 50) {
					document.getElementById("cpu_t").innerHTML = "<font color=green>"+status.cpu+" %</font>";
				}
				else if (status.cpu >= 50 && status.cpu <= 80) {
					document.getElementById("cpu_t").innerHTML = "<font color=orange>"+status.cpu+" %</font>";
				}
				else {
					document.getElementById("cpu_t").innerHTML = "<font color=red>"+status.cpu+" %</font>";
				}
			}
			else {
				document.getElementById("upload_").innerHTML = "<font color=green>0 B/S</font>";
				document.getElementById("download_").innerHTML = "<font color=green>0 B/S</font>";
				document.getElementById("uploadtotal_").innerHTML = "<font color=green>0 KB</font>";
				document.getElementById("downloadtotal_").innerHTML = "<font color=green>0 KB</font>";
				document.getElementById("mem_t").innerHTML = "<font color=green>0 KB</font>";
				document.getElementById("cpu_t").innerHTML = "<font color=green>0 %</font>";
				document.getElementById("connect_t").innerHTML = "<font color=green>0</font>";
			}
		});
	}
	
	function show_sys() {
		XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "toolbar_show_sys")%>', null, function(x, status) {
			if (x && x.status == 200 && x.responseText != "") {
				document.getElementById("mem_t").innerHTML = "<font color=green>"+status.mem+"</font>";
				if (status.cpu <= 50) {
					document.getElementById("cpu_t").innerHTML = "<font color=green>"+status.cpu+" %</font>";
				}
				else if (status.cpu >= 50 && status.cpu <= 80) {
					document.getElementById("cpu_t").innerHTML = "<font color=orange>"+status.cpu+" %</font>";
				}
				else {
					document.getElementById("cpu_t").innerHTML = "<font color=red>"+status.cpu+" %</font>";
				}
			}
			else {
				document.getElementById("mem_t").innerHTML = "<font color=green>0 KB</font>";
				document.getElementById("cpu_t").innerHTML = "<font color=green>0 %</font>";
			}
		});
	};
	
	function ws_tmessage(event) {
		var data = JSON.parse(event.data)
		document.getElementById("upload_").innerHTML = "<font color=green>"+bytesToSize(data.up)+"/S</font>";
		document.getElementById("download_").innerHTML = "<font color=green>"+bytesToSize(data.down)+"/S</font>";
	};
	
	function ws_cmessage(event) {
		var data = JSON.parse(event.data)
		document.getElementById("uploadtotal_").innerHTML = "<font color=green>"+bytesToSize(data.uploadTotal)+"</font>";
		document.getElementById("downloadtotal_").innerHTML = "<font color=green>"+bytesToSize(data.downloadTotal)+"</font>";
		document.getElementById("connect_t").innerHTML = "<font color=green>"+Object.keys(data.connections).length+"</font>";
		show_sys();
	};
	
	function bytesToSize(bytes) {
		var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
		if (bytes == 0) return '0 B';
		var i = Math.floor(Math.log(bytes) / Math.log(1024));
		return i == 0 ? (bytes / Math.pow(1024, i)) + ' ' + sizes[i] : (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
	};
	  
	  function all_one_key_update(btn)
    {
        btn.value    = '<%:Check All Components Update%>';
        btn.disabled = true;
        var r = confirm("<%:Check and update all Cores and plug-ins?%>")
        if (r == true) {
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "one_key_update_check")%>', null, function(x, status) {
        	if ( x && x.status == 200 ) {
        		if ( status.corever != "0" ) {
        			XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "one_key_update")%>', null, function(x, status) {
              	if ( x && x.status != 200 ) {
            			alert('<%:Check failed, Please try again later!%>')
           			}
              });
						}
						else {
							alert('<%:No compiled version is selected. Please configure it in the General Settings tab!%>')
           	}
        	}
          else {
            alert('<%:Check failed, Please try again later!%>')
          }
        });
				}
				else {
        }
        btn.disabled = false;
        return false; 
    }
    function b_update_other_rules(btn)
    {
        btn.disabled = true;
        btn.value    = '<%:Checking...%>';
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_other_rules")%>', null, function(x, status) {
        if ( x && x.status == 200 ) {
           btn.disabled = false;
           btn.value    = '<%:Check Third Party Rules Update%>';
        }
        else {
        	btn.disabled = false;
          btn.value    = '<%:Check Third Party Rules Update%>';
        }
        return false;
        });
    }
    function b_update_geoip(btn)
    {
        btn.disabled = true;
        btn.value    = '<%:Checking...%>';
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_geoip")%>', null, function(x, status) {
        if ( x && x.status == 200 ) {
           btn.disabled = false;
           btn.value    = '<%:Check GEOIP Data Update%>';
        }
        else {
        	btn.disabled = false;
          btn.value    = '<%:Check GEOIP Data Update%>';
        }
        return false;
        });
    }
    function b_update_subscribe(btn)
    {
        btn.disabled = true;
        btn.value    = '<%:Checking...%>';
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_subscribe")%>', null, function(x, status) {
        if ( x && x.status == 200 ) {
           btn.disabled = false;
           btn.value    = '<%:Check Config Update%>';
        }
        else {
        	btn.disabled = false;
          btn.value    = '<%:Check Config Update%>';
        }
        return false;
        });
    }
	  function b_reload_firewall(btn)
    {
        btn.disabled = true;
        btn.value    = '<%:Reloading...%>';
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "reload_firewall")%>', null, function(x, status) {
        if ( x && x.status == 200 ) {
           btn.disabled = false;
           btn.value    = '<%:Reload Firewall Rules%>';
        }
        else {
        	btn.disabled = false;
          btn.value    = '<%:Firewall Rules Reset Failed%>';
        }
        return false;
        });
    }
	  function b_close_all_connection(btn)
    {
        btn.disabled = true;
        btn.value    = '<%:Reloading...%>';
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "close_all_connection")%>', null, function(x, status) {
        if ( x && x.status == 200 ) {
           btn.disabled = false;
           btn.value    = '<%:Close All Connections%>';
        }
        else {
        	btn.disabled = false;
          btn.value    = '<%:Close All Connections Failed%>';
        }
        return false;
        });
    }
    
	  function ycad_dashboard(btn)
    {
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', status.cn_port, function(x, status) {
        btn.disabled = true;
        btn.value    = '<%:Open Panel%>';
        if (status.daip != "" && window.location.hostname == status.daip) {
        	url1='<%="http://'+window.location.hostname+':'+window.location.port+'/luci-static/openclash?hostname='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
        }
        else {
        	url1='<%="http://'+window.location.hostname+':'+window.location.port+'/luci-static/openclash"%>';
        }
        winOpen(url1);
        return false;
        });
    }
    function net_dashboard(btn)
    {
        XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', status.cn_port, function(x, status) {
        btn.disabled = true;
        btn.value    = '<%:Open Panel%>';
        if (status.daip != "" && window.location.hostname == status.daip) {
        	url2='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/?host='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
        }
        else {
        	url2='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/"%>';
        }
        winOpen(url2);
        return false;
        });
    }
    
    function homepage()
    {
        url3='https://github.com/vernesong/OpenClash';
        winOpen(url3);
    }
    
    function wikipage()
    {
        url5='https://github.com/vernesong/OpenClash/wiki';
        winOpen(url5);
    }
    
    function telegrampage()
    {
        url6='https://t.me/ctcgfw_openwrt_discuss';
        winOpen(url6);
    }
    
    function sponsorpage()
    {
        url7='https://ko-fi.com/vernesong';
        winOpen(url7);
    }
    

	  XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', status.currentversion, function(x, status) {
	     if ( x && x.status == 200 ) {
	        clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" height="21px" onload="return clashversion_check()" onclick="return go_update()">';
	     }
	  });

    function clashversion_check()
    {
    XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "lastversion")%>', status.lastversion, function(x, status) {
       if ( x && x.status == 200 ) {
          if ( status.lastversion != "" )
          {
             clashversion.innerHTML = '<img id="lastver" src="'+status.lastversion+'" alt="lastversion" onerror="return clashversion_error()" onclick="return go_update()">';
          }
       }
        });
    }

    function clashversion_error()
    {
       XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', status.currentversion, function(x, status) {
	        if ( x && x.status == 200 ) {
             clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" height="21px" onclick="return go_update()">';
	        }
	     });
    }
    
    function imgerrorfuns(imgobj,imgSrc){
    	setTimeout(function(){
        imgobj.src=imgSrc;
      },1000*10);
     }
     
    function go_update()
    {
       url4='https://github.com/vernesong/OpenClash/releases';
       winOpen(url4);
    }
    
	var startlog = document.getElementById('_clashstart');
	XHR.poll(6, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', status.startlog, function(x, status) {
	  if ( x && x.status == 200 ) {
		   if ( status.startlog == "\n" || status.startlog == "" ) {
          var rdmdl=Math.floor(Math.random()*12)+1;
          if(rdmdl==1)
          {
             startlog.innerHTML = '<b><font><%:Tip: You can modify the profile on the profile page (for content that is not taken over)%></font></b>';
          }
          if(rdmdl==2)
          {
             startlog.innerHTML = '<b><font><%:Tip: click the version icon above to jump to the client publishing page%></font></b>';
          }
          if(rdmdl==3)
          {
             startlog.innerHTML = '<b><font><%:Tip: do not write configuration files? Try to create one click on the server page%></font></b>';
          }
          if(rdmdl==4)
          {
             startlog.innerHTML = '<b><font><%:Tip: some website are abnormal? Try switching modes or using third-party rules%></font></b>';
          }
          if(rdmdl==5)
          {
             startlog.innerHTML = '<b><font><%:Tip: using the fake IP mode can get a faster access experience%></font></b>';
          }
          if(rdmdl==6)
          {
             startlog.innerHTML = '<b><font><%:Tip: query DNS by TLS & TCP & HTTPS can get better anti pollution effect%></font></b>';
          }
          if(rdmdl==7)
          {
             startlog.innerHTML = '<b><font><%:Tip: openlash will check the configuration file parameters to ensure that it works properly%></font></b>';
          }
          if(rdmdl==8)
          {
             startlog.innerHTML = '<b><font><%:Tip: the nameserver group must have at least one server set when using custom DNS%></font></b>';
          }
          if(rdmdl==9)
          {
             startlog.innerHTML = '<b><font><%:Tip: the website access check shows the connection of the device currently logged in to the Luci page%></font></b>';
          }
          if(rdmdl==10)
          {
             startlog.innerHTML = '<b><font><%:Tip: after started, please wait patiently until the connection is normal%></font></b>';
          }
          if(rdmdl==11)
          {
             startlog.innerHTML = '<b><font><%:Tip: if you don not use IPv6, please turn off the DHCP service of IPv6, otherwise the connection will be abnormal%></font></b>';
          }
          if(rdmdl==12)
          {
             startlog.innerHTML = '<b><font><%:Tip: you can update the version in the global settings page%></font></b>';
          }
       }
	  }
	});
	XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', status.startlog, function(x, status) {
	  if ( x && x.status == 200 ) {
		   if ( status.startlog != "\n" && status.startlog != "" ) {
	     startlog.innerHTML = '<b><font color="green">'+status.startlog+'</font></b>';
	     }
	  }
	});
//]]></script>

