<%+cbi/valueheader%>

<script type="text/javascript">//<![CDATA[
	function padright(str, cnt, pad){
		return str + Array(cnt+1).join(pad);
	}
	function b64EncodeUnicode(str) {
		return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
			return String.fromCharCode('0x' + p1);
		}));
	}
	function b64encutf8safe(str) {
		return b64EncodeUnicode(str).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,'');
	}
	function b64DecodeUnicode(str) {
		return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
			return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
		}).join(''));
	}
	function b64decutf8safe(str) {
		var l;
		str = str.replace(/-/g,"+").replace(/_/g,"/");
		l = str.length;
		l = (4 - l % 4)%4;
		if( l )
			str = padright(str,l,"=");
		return b64DecodeUnicode(str);
	}
	function b64encsafe(str){
		return btoa(str).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,'')
	}
	function b64decsafe(str){
		var l;
		str = str.replace(/-/g,"+").replace(/_/g,"/");
		l = str.length;
		l = (4 - l % 4)%4;
		if( l )
			str = padright(str,l,"=");
		return atob(str);
	}
	function dictvalue(d,key)	{
		var v = d[key];
		if( typeof(v)=='undefined' || v=='' )
			return '';
		return b64decsafe(v);
	}
	function export_ssr_url(btn,urlname,sid) {
		var s = document.getElementById(urlname+'-status');
		if(!s)
			return false;
		var v_server = document.getElementById('cbid.shadowsocksr.'+sid+'.server');
		var v_port = document.getElementById('cbid.shadowsocksr.'+sid+'.server_port');
		var v_protocol = document.getElementById('cbid.shadowsocksr.'+sid+'.protocol');
		var v_method = document.getElementById('cbid.shadowsocksr.'+sid+'.encrypt_method');
		var v_obfs = document.getElementById('cbid.shadowsocksr.'+sid+'.obfs');
		var v_password = document.getElementById('cbid.shadowsocksr.'+sid+'.password');
		var v_obfs_param = document.getElementById('cbid.shadowsocksr.'+sid+'.obfs_param');
		var v_protocol_param = document.getElementById('cbid.shadowsocksr.'+sid+'.protocol_param');
		var v_alias = document.getElementById('cbid.shadowsocksr.'+sid+'.alias');

		var ssr_str = v_server.value+":"+
		v_port.value+":"+
		v_protocol.value+":"+
		v_method.value+":"+
		v_obfs.value+":"+
		b64encsafe(v_password.value)+
		"/?obfsparam="+b64encsafe(v_obfs_param.value)+
		"&protoparam="+b64encsafe(v_protocol_param.value)+
		"&remarks="+b64encutf8safe(v_alias.value);
		var textarea = document.createElement("textarea");
		textarea.textContent = "ssr://"+b64encsafe(ssr_str);
		textarea.style.position = "fixed";
		document.body.appendChild(textarea);
		textarea.select();
		try {
			document.execCommand("copy");  // Security exception may be thrown by some browsers.
			s.innerHTML = "<font color='green'><%:Copy SSR to clipboard successfully.%></font>";
		} catch (ex) {
			s.innerHTML = "<font color='red'><%:Unable to copy SSR to clipboard.%></font>";
		} finally {
			document.body.removeChild(textarea);
		}
		return false;
	}
	function import_ssr_url(btn,urlname,sid) {
		var s = document.getElementById(urlname+'-status');
		if(!s)
			return false;
		var ssrurl = prompt("<%:Paste ssr url here%>", "ssr://");
		if (ssrurl == null || ssrurl == "") {
			s.innerHTML = "<font color='red'><%:User cancelled.%></font>";
			return false;
		}
		s.innerHTML = "<font color='red'><%:Invalid SSR format.%></font>";
		var ssu = ssrurl.match(/ssr:\/\/([A-Za-z0-9_-]+)/i);
		if( !ssu || ssu.length<2 )
			return false;
		var sstr = b64decsafe(ssu[1]);
		var ploc = sstr.indexOf("/?");
		var url0, param="";
		if( ploc>0 ) {
			url0 = sstr.substr(0,ploc);
			param = sstr.substr(ploc+2);
		}
		var ssm = url0.match(/^(.+):([^:]+):([^:]*):([^:]+):([^:]*):([^:]+)/);
		if( !ssm || ssm.length<7 )
			return false;
		var pdict = {};
		if( param.length>2 )
		{
			var a = param.split('&');
			for( var i=0;i<a.length; i++ ) {
				var b = a[i].split('=');
				pdict[decodeURIComponent(b[0])] = decodeURIComponent(b[1] || '');
			}
		}
		document.getElementById('cbid.shadowsocksr.'+sid+'.server').value = ssm[1];
		document.getElementById('cbid.shadowsocksr.'+sid+'.server_port').value = ssm[2];
		document.getElementById('cbid.shadowsocksr.'+sid+'.protocol').value = ssm[3];
		document.getElementById('cbid.shadowsocksr.'+sid+'.encrypt_method').value = ssm[4];
		document.getElementById('cbid.shadowsocksr.'+sid+'.obfs').value = ssm[5];
		document.getElementById('cbid.shadowsocksr.'+sid+'.password').value = b64decsafe(ssm[6]);
		document.getElementById('cbid.shadowsocksr.'+sid+'.obfs_param').value = dictvalue(pdict,'obfsparam');
		document.getElementById('cbid.shadowsocksr.'+sid+'.protocol_param').value = dictvalue(pdict,'protoparam');

		var rem = pdict['remarks'];
		if( typeof(rem)!='undefined' && rem!='' && rem.length>0 )
			document.getElementById('cbid.shadowsocksr.'+sid+'.alias').value = b64decutf8safe(rem);

		s.innerHTML = "<font color='green'><%:Import SSR successfully.%></font>";
		return false;
	}
//]]></script>

<input type="button" class="cbi-button cbi-button-apply" value="<%:Import SSR%>" onclick="return import_ssr_url(this,'<%=self.option%>','<%=self.value%>')" />
<input type="button" class="cbi-button cbi-button-apply" value="<%:Export SSR%>" onclick="return export_ssr_url(this,'<%=self.option%>','<%=self.value%>')" />
<span id="<%=self.option%>-status"><%:ssr://%></span>

<%+cbi/valuefooter%>
