public_backup_.js 230 KB
Newer Older
jose's avatar
jose committed
1
var bt = 
{

	os : 'Linux',

	check_ip : function(ip) //验证 ip

	{

		var reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;

		return reg.test(ip);

	},

	check_ips : function(ips)//验证ip段

	{

		var reg = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(\/\d{1,2})?$/;

		return reg.test(ip);

	},

	check_url : function(url) //验证url

	{

		var reg = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/;

		return reg.test(url);

	},

	check_port : function(port)

	{

		var reg = /^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;

		return reg.test(port);

	},

	check_chinese : function(str)

	{

		var reg = /[\u4e00-\u9fa5]/;

		return reg.test(str);

	},

	check_domain : function(domain) //验证域名

	{	

		var reg = /^([\w\-\*]{1,100}\.){1,4}([\w\-]{1,24}|[\w\-]{1,24}\.[\w\-]{1,24})$/;

		return reg.test(bt.strim(domain));

	},

	check_img : function(fileName) //验证是否图片

	{

		var exts = ['jpg','jpeg','png','bmp','gif','tiff','ico'];

		var check =  bt.check_exts(fileName,exts);

		return check;

	},

	check_zip : function(fileName)

	{

		var ext = fileName.split('.');

		var extName = ext[ext.length-1].toLowerCase();

		if( extName == 'zip') return 0;

		if( extName == 'rar') return 2;

		if( extName == 'gz' || extName == 'tgz') return 1;

		return -1;

	},

	check_text : function(fileName)

	{

		var exts = ['rar','zip','tar.gz','gz','iso','xsl','doc','xdoc','jpeg','jpg','png','gif','bmp','tiff','exe','so','7z','bz'];

		return bt.check_exts(fileName,exts)?false:true;

	},

	check_exts : function(fileName,exts)

	{

		var ext = fileName.split('.');

		if(ext.length < 2) return false;

		var extName = ext[ext.length-1].toLowerCase();		

		for(var i=0;i<exts.length;i++){

			if(extName == exts[i]) return true;

		}

		return false;

	},

	check_version:function(version,cloud_version){

		var arr1 = version.split('.'); //

		var arr2 = cloud_version.split('.');

		var leng = arr1.length>arr2.length?arr1.length:arr2.length;

		while(leng - arr1.length>0){

			arr1.push(0);

		}

		while(leng - arr2.length>0){

			arr2.push(0);

		}

		for (var i=0;i<leng;i++) {

			if(i==leng-1){				

				if(arr1[i]!=arr2[i]) return 2; //子版本匹配不上

			}			

			else{

				if(arr1[i]!=arr2[i]) return -1; //版本匹配不上

			}			

		}

		return 1; //版本正常

	},

	replace_all:function(str,old_data,new_data){

		var reg_str = "/("+old_data+"+)/g"

        var reg = eval(reg_str);      

		return str.replace(reg,new_data);

	},

	get_file_ext : function(fileName)

	{

		var text = fileName.split(".");

		var n = text.length-1;

		text = text[n];

		return text;

	},

	get_file_path : function(filename)

	{

		var arr = filename.split('/');

		path = filename.replace('/'+arr[arr.length-1],"");

		return path;

	},

	get_date:function(a){

		var dd = new Date();

		dd.setTime(dd.getTime() + (a == undefined || isNaN(parseInt(a)) ? 0 : parseInt(a)) * 86400000);

		var y = dd.getFullYear();

		var m = dd.getMonth() + 1;

		var d = dd.getDate();

		return y + "-" + (m < 10 ? ('0' + m) : m) + "-" + (d < 10 ? ('0' + d) : d);

	},

	ltrim:function(str,r){

		var reg_str = "/(^\\"+r+"+)/g"

		var reg = eval(reg_str);

		str = str.replace(reg,"");

		return str;

	},

	rtrim:function(str,r){

		var reg_str = "/(\\"+r+"+$)/g"

		var reg = eval(reg_str);

		str = str.replace(reg,"");

		return str;

        },

        strim: function (str) {

            var reg_str = "/ /g"

            var reg = eval(reg_str);

            str = str.replace(reg, "");

            return str;

        },

	contains : function(str,substr){

		if(str){

			return str.indexOf(substr) >= 0;

		}

		return false;

	},

	format_size : function(bytes ,is_unit,fixed, end_unit) //字节转换,到指定单位结束 is_unit:是否显示单位  fixed:小数点位置 end_unit:结束单位

    {

        if (bytes == undefined) return 0;



		if(is_unit==undefined) is_unit = true;

		if(fixed==undefined) fixed = 2;

        if (end_unit == undefined) end_unit = '';

       

		if(typeof bytes == 'string') bytes = parseInt(bytes);

		var unit = [' B',' KB',' MB',' GB','TB'];

		var c = 1024;

		for(var i=0;i<unit.length;i++){

			var cUnit = unit[i];				

			if(end_unit)

			{

				if(cUnit.trim() == end_unit.trim())

				{

					var val = i == 0 ? bytes : fixed==0? bytes:bytes.toFixed(fixed)

					if(is_unit){

						return  val + cUnit;

					}

					else{

						val = parseFloat(val);		

						return val;					

					}

				}

			}

			else{

				if(bytes < c){

					var val = i == 0 ? bytes : fixed==0? bytes:bytes.toFixed(fixed)

					if(is_unit){

						return  val + cUnit;

					}

					else{

						val = parseFloat(val);		

						return val;

					}

				}

			}

	

			bytes /= c;

		}

	},

	format_data : function(tm,format)

	{

		if(format==undefined) format = "yyyy/MM/dd hh:mm:ss";

		tm  = tm.toString();

		if(tm.length > 10){

			tm = tm.substring(0,10);

		}	

		 var data = new Date(parseInt(tm) * 1000);

		 var o = {

		 "M+" : data.getMonth()+1, //month

		 "d+" : data.getDate(),    //day

		 "h+" : data.getHours(),   //hour

		 "m+" : data.getMinutes(), //minute

		 "s+" : data.getSeconds(), //second

		 "q+" : Math.floor((data.getMonth()+3)/3),  //quarter

		 "S" : data.getMilliseconds() //millisecond

		 }

		 if(/(y+)/.test(format)) format=format.replace(RegExp.$1,

		 (data.getFullYear()+"").substr(4 - RegExp.$1.length));

		 for(var k in o)if(new RegExp("("+ k +")").test(format))

		 format = format.replace(RegExp.$1,

		 RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));

		 

		return format;

	},

	format_path:function(path){

		var reg = /(\\)/g;

		path = path.replace(reg,'/');

		return path;

	},

	get_random : function(len)

	{

		len = len || 32;

		var $chars = 'AaBbCcDdEeFfGHhiJjKkLMmNnPpRSrTsWtXwYxZyz2345678'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1  

		var maxPos = $chars.length;

		var pwd = '';

		for (i = 0; i < len; i++) {

			pwd += $chars.charAt(Math.floor(Math.random() * maxPos));

		}

		return pwd;

	},

	refresh_pwd : function(length,obj)

	{

		if(obj==undefined) obj = 'MyPassword';

		var _input = $("#"+obj);

		if(_input.length>0){			

			 _input.val(bt.get_random(length))

		}

		else{

			$("."+obj).val(bt.get_random(length))

		}

	},

	get_random_num : function(min,max) //生成随机数

	{

		var range = max - min;

	    var rand = Math.random();

	    var num = min + Math.round(rand * range); //四舍五入

	    return num;

	},

	set_cookie : function(key,val)

	{

		var Days = 30;

		var exp = new Date();

		exp.setTime(exp.getTime() + Days*24*60*60*1000);

		document.cookie = key + "="+ escape (val) + ";expires=" + exp.toGMTString();

	},

	get_cookie : function(key)

	{

		var arr,reg=new RegExp("(^| )"+key+"=([^;]*)(;|$)");

		if(arr=document.cookie.match(reg))

		{

			var val = unescape(arr[2]);

			return val== 'undefined'?'':val;

		}

		else{

			return null;

		}

	},

	select_path:function(id){

		_this = this;

		_this.set_cookie("SetName", "");

		

		var loadT = bt.open({

			type: 1,

			area: "650px",

			title: lan.bt.dir,

			closeBtn: 2,

			shift: 5,

			content: "<div class='changepath'><div class='path-top'><button type='button' id='btn_back' class='btn btn-default btn-sm'><span class='glyphicon glyphicon-share-alt'></span> "+lan.public.return+"</button><div class='place' id='PathPlace'>"+lan.bt.path+":<span></span></div></div><div class='path-con'><div class='path-con-left'><dl><dt id='changecomlist' >"+lan.bt.comp+"</dt></dl></div><div class='path-con-right'><ul class='default' id='computerDefautl'></ul><div class='file-list divtable'><table class='table table-hover' style='border:0 none'><thead><tr class='file-list-head'><th width='40%'>"+lan.bt.filename+"</th><th width='20%'>"+lan.bt.etime+"</th><th width='10%'>"+lan.bt.access+"</th><th width='10%'>"+lan.bt.own+"</th><th width='10%'></th></tr></thead><tbody id='tbody' class='list-list'></tbody></table></div></div></div></div><div class='getfile-btn' style='margin-top:0'><button type='button' class='btn btn-default btn-sm pull-left' onclick='CreateFolder()'>"+lan.bt.adddir+"</button><button type='button' class='btn btn-danger btn-sm mr5' onclick=\"layer.close(getCookie('ChangePath'))\">"+lan.public.close+"</button> <button type='button' id='bt_select' class='btn btn-success btn-sm' >"+lan.bt.path_ok+"</button></div>"

		});

		setTimeout(function(){			

			$('#btn_back').click(function(){

				var path = $("#PathPlace").find("span").text();			

				path = bt.rtrim(bt.format_path(path),'/');						

				var back_path = bt.get_file_path(path);

				

				get_file_list(back_path);

			})	

			//选择

			$('#bt_select').click(function(){						

				var path = bt.format_path($("#PathPlace").find("span").text());

				path = bt.rtrim(path,'/')

				$("#"+id).val(path);

				$("."+id).val(path);

				loadT.close();

			})

		},100)

		get_file_list($("#" + id).val())

     

		function get_file_list(path)

        {

            bt.send('GetDir', 'files/GetDir', { path: path, disk: true }, function (rdata) {

                var d = '',a='';                

				if(rdata.DISK != undefined) {

					for(var f = 0; f < rdata.DISK.length; f++) {

						a += "<dd class=\"bt_open_dir\" path =\""+rdata.DISK[f].path+"\"><span class='glyphicon glyphicon-hdd'></span>&nbsp;" + rdata.DISK[f].path + "</dd>"

					}

					$("#changecomlist").html(a)

				}

				for(var f = 0; f < rdata.DIR.length; f++) {

					var g = rdata.DIR[f].split(";");

					var e = g[0];

					if(e.length > 20) {

						e = e.substring(0, 20) + "..."

					}

					if(isChineseChar(e)) {

						if(e.length > 10) {

							e = e.substring(0, 10) + "..."

						}

					}

					d += "<tr><td class=\"bt_open_dir\" path =\"" + rdata.PATH + "/" + g[0] + "\"  title='" + g[0] + "'><span class='glyphicon glyphicon-folder-open'></span>" + e + "</td><td>" + bt.format_data(g[2]) + "</td><td>" + g[3] + "</td><td>" + g[4] + "</td><td><span class='delfile-btn' onclick=\"NewDelFile('" + rdata.PATH + "/" + g[0] + "')\">X</span></td></tr>"

				}

				

				if(rdata.FILES != null && rdata.FILES != "") {

					for(var f = 0; f < rdata.FILES.length; f++) {

						var g = rdata.FILES[f].split(";");

						var e = g[0];

						if(e.length > 20) {

							e = e.substring(0, 20) + "..."

						}

						if(isChineseChar(e)) {

							if(e.length > 10) {

								e = e.substring(0, 10) + "..."

							}

						}

						d += "<tr><td title='" + g[0] + "'><span class='glyphicon glyphicon-file'></span>" + e + "</td><td>" + bt.format_data(g[2]) + "</td><td>" + g[3] + "</td><td>" + g[4] + "</td><td></td></tr>"

					}

				}

				

				$(".default").hide();

				$(".file-list").show();

				$("#tbody").html(d);

				if(rdata.PATH.substr(rdata.PATH.length - 1, 1) != "/") {

					rdata.PATH += "/"

				}

				$("#PathPlace").find("span").html(rdata.PATH);

				

				$('.bt_open_dir').click(function(){	

					get_file_list($(this).attr('path'));

				})

			})

        }





        function ActiveDisk() {

            var a = $("#PathPlace").find("span").text().substring(0, 1);

            switch (a) {

                case "C":

                    $(".path-con-left dd:nth-of-type(1)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                case "D":

                    $(".path-con-left dd:nth-of-type(2)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                case "E":

                    $(".path-con-left dd:nth-of-type(3)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                case "F":

                    $(".path-con-left dd:nth-of-type(4)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                case "G":

                    $(".path-con-left dd:nth-of-type(5)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                case "H":

                    $(".path-con-left dd:nth-of-type(6)").css("background", "#eee").siblings().removeAttr("style");

                    break;

                default:

                    $(".path-con-left dd").removeAttr("style")

            }

        }

	},

	show_confirm : function(title, msg, fun, error) 

	{

		if(error == undefined) {

			error = ""

		}

		var d = Math.round(Math.random() * 9 + 1);

		var c = Math.round(Math.random() * 9 + 1);

		var e = "";

		e = d + c;

		sumtext = d + " + " + c;

		bt.set_cookie("vcodesum", e);

		var mess = layer.open({

			type: 1,

			title: title,

			area: "350px",

			closeBtn: 2,

			shadeClose: true,

			content: "<div class='bt-form webDelete pd20 pb70'><p>" + msg + "</p>" + error + "<div class='vcode'>"+lan.bt.cal_msg+"<span class='text'>" + sumtext + "</span>=<input type='number' id='vcodeResult' value=''></div><div class='bt-form-submit-btn'><button type='button' class='btn btn-danger btn-sm bt-cancel'>"+lan.public.cancel+"</button> <button type='button' id='toSubmit' class='btn btn-success btn-sm' >"+lan.public.ok+"</button></div></div>"

		});

		$("#vcodeResult").focus().keyup(function(a) {

			if(a.keyCode == 13) {

				$("#toSubmit").click()

			}

		});

		$(".bt-cancel").click(function(){

			layer.close(mess);

		});

		$("#toSubmit").click(function() {

			var a = $("#vcodeResult").val().replace(/ /g, "");

			if(a == undefined || a == "") {

				layer.msg(lan.bt.cal_err);

				return

			}

			if(a != bt.get_cookie("vcodesum")) {

				layer.msg(lan.bt.cal_err);

				return

			}

			layer.close(mess);

			fun();

		})

	},

	to_login:function()

	{

		layer.confirm('您的登陆状态已过期,请重新登陆!',{title:'会话已过期',icon:2,closeBtn: 1,shift: 5},function(){

			location.reload();

		});

	},

	do_login:function()

	{

		bt.confirm({msg:lan.bt.loginout},function(){

			window.location.href = "/login?dologin=True"

		})

	},

	send : function(response,module,data,callback,sType)

	{

		if(sType==undefined) sType=1;

		

		module = module.replace('panel_data','data');

		sType=1;

		var str = bt.get_random(16);

		console.time(str);

		if(!response) alert(lan.get('lack_param',['response']));

		modelTmp = module.split('/')

		if(modelTmp.length<2)   alert(lan.get('lack_param',['s_module','action']));	

		if(bt.os == 'Linux' && sType === 0)

		{		

			socket.on(response,function(rdata){

				socket.removeAllListeners(response);

				var rRet = rdata.data;

				if(rRet.status===-1){

					bt.to_login();

					return;

				}

				console.timeEnd(str);

			  	if(callback) callback(rRet);

			});

			if(!data) data = {};

			data = bt.linux_format_param(data);

			data['s_response'] = response;

			data['s_module'] = modelTmp[0];

			data['action'] = modelTmp[1];

			socket.emit('panel',data)

		}

		else{

			data = bt.win_format_param(data);

			var url = '/' + modelTmp[0] + '?action=' + modelTmp[1];

			$.post(url,data,function(rdata){

				if(callback) callback(rdata);

			}).error(function(){

				if(callback) callback('error');

			});

		}

	},

	linux_format_param : function(param)

	{		

		if(typeof param == 'string')

		{

			var data= {};

			arr = param.split('&');		

			var reg = /(^[^=]*)=(.*)/;

			for (var i=0;i<arr.length;i++) {

				var tmp = arr[i].match(reg);

				if(tmp.length>=3) data[tmp[1]] =  tmp[2]=='undefined'?'': tmp[2];			

			}

			return data;	

		}

		return param;

	},

	win_format_param : function(param)

	{

		if(typeof data == 'object')

		{

			var data = '';

			for(var key in param){

			 	data+=key+'='+param[key]+'&';

			}

			if(data.length>0) data = data.substr(0,data.length-1);

			return data;

		}

		return param;

	},

	msg : function(config)

	{		

		var btns = new Array();  

		var btnObj =  {						

			title:config.title?config.title:false,						

			shadeClose: config.shadeClose?config.shadeClose:true,

			closeBtn: config.closeBtn?config.closeBtn:0,	

			scrollbar:true,

			shade:0.3,

		};

		if(!config.hasOwnProperty('time')) config.time = 2000;		

		if(typeof config.msg=='string' && bt.contains(config.msg,'ERROR')) config.time = 0;

		

		if(config.hasOwnProperty('icon')){

			if(typeof config.icon=='boolean') config.icon = config.icon?1:2;

		}

		else if(config.hasOwnProperty('status')){

			config.icon=config.status?1:2;

		}

		if(config.icon) btnObj.icon = config.icon;

		btnObj.time = config.time;

		var msg = ''

		if(config.msg) msg += config.msg;

		if(config.msg_error) msg+=config.msg_error;

		if(config.msg_solve) msg+=config.msg_solve;

		

		layer.msg(msg,btnObj);	

	},

	confirm : function(config,callback){

		var btnObj =  {						

			title:config.title?config.title:false,

			time : config.time?config.time:0,					

			shadeClose: config.shadeClose?config.shadeClose:true,

			closeBtn: config.closeBtn?config.closeBtn:2,	

			scrollbar:true,

			shade:0.3,

			icon:3

		};

		layer.confirm(config.msg, btnObj, function(index){

		 	if(callback) callback(index);

		});

	},

	load : function(msg)  

	{

		if(!msg) msg = lan.public.the;

		var loadT = layer.msg(msg,{icon:16,time:0,shade: [0.3, '#000']});

		var load = {

			form : loadT,

			close:function(){

				layer.close(load.form);

			}

		}

		return load;

	},

	open: function(config)

	{

		config.closeBtn = 2;

		var loadT = layer.open(config);

		var load = {

			form : loadT,

			close:function(){

				layer.close(load.form);

			}

		}		

		return load;

	},

	closeAll : function(){

		layer.closeAll();

	},

	check_select:function(){

        setTimeout(function () {

            var num = $('input[type="checkbox"].check:checked').length;

            console.log(num);

            if (num == 1) {

                $('button[batch="true"]').hide();

                $('button[batch="false"]').show();

            }else if (num>1){

                $('button[batch="true"]').show();

                $('button[batch="false"]').show();

			}else{

                $('button[batch="true"]').hide();

                $('button[batch="false"]').hide();

			}

		},5)

	},

	render_help:function(arr){

		var html = '<ul class="help-info-text c7">';

		for(var i = 0;i<arr.length;i++){	

			html +='<li>'+arr[i]+'</li>';

		}

		html += '</ul>';

		return html;

	},

	render_ps:function(item){		

		var	html='<p class=\'p1\'>'+item.title+'</p>';

		for(var i = 0;i<item.list.length;i++){	

			html +='<p><span>'+item.list[i].title+':</span><strong>' + item.list[i].val + '</strong></p>';

		}

		html+='<p style="margin-bottom: 19px; margin-top: 11px; color: #666"></p>';

		return html;

	},

	render_table:function(obj,arr){ //渲染表单表格

		var html = '';

		for (var key in arr) {			

			html+='<tr><th>'+key +'</th><td>'+arr[key]+'</td></tr>';

		}

		$('#'+obj).html(html);

	},

	fixed_table:function(name){

	

		$('#'+name).parent().bind('scroll',function(){	

			var scrollTop = this.scrollTop;

			$(this).find("thead").css({"transform":"translateY("+scrollTop+"px)","position":"relative","z-index":"1"});

		});

	},

	render_tab:function(obj,arr){

		var _obj = $('#'+obj).addClass("tab-nav");

		for(var i = 0;i<arr.length;i++){

			var item = arr[i];

			var _tab = $('<span '+(item.on?'class="on"':'')+'>'+item.title+'</span>')

			if(item.callback){

				_tab.data('callback',item.callback);

				_tab.click(function(){

					$('#'+obj).find('span').removeClass('on');

					$(this).addClass('on');

					var _contents =$('.tab-con');

					_contents.html('');					

					$(this).data('callback')(_contents);					

				})

			}

			_obj.append(_tab);

		}		

	},

	render_form_line:function(item,bs){

		var clicks = [], _html = '',_hide='',is_title_css = ' ml0';

		if(!bs) bs = '';

		if(item.title){

			_html += '<span class="tname">'+item.title+'</span>';

			is_title_css = '';

		}		

		_html += "<div class='info-r "+is_title_css+"'>";

		var _name = item.name;

		var _placeholder = item.placeholder;

			if(item.items && item.type!='select')

			{

				for(var x=0;x<item.items.length;x++){

					var _obj = item.items[x];

					if(!_name && !_obj.name) {

						alert('缺少必要参数name');

						return;

					}

					if(_obj.hide) continue;

					if(_obj.name) _name = _obj.name;

					if(_obj.placeholder) _placeholder = _obj.placeholder;

					if(_obj.title) _html+='<span class=" mr5">'+_obj.title +"  " ;	

					switch(_obj.type){

						case 'select':	

							var _width = _obj.width?_obj.width:'100px';

							_html += '<select '+(_obj.disabled?'disabled':'')+' class="bt-input-text mr5 ' +  _name + bs + '" name="'+_name+'" style="width:'+_width+'">';

							for(var j=0;j<_obj.items.length;j++){

								_html+='<option '+(_obj.value==_obj.items[j].value?'selected':'' )+' value="'+_obj.items[j].value+'">'+_obj.items[j].title+'</option>';

							}

							_html +='</select>';		

							break;

						case 'textarea':

							var _width = _obj.width?_obj.width:'330px';

							var _height = _obj.height?_obj.height:'100px';

							_html += '<textarea class="bt-input-text mr20 '+ _name + bs+'" name="'+_name+'" style="width:'+_width+';height:'+_height+';line-height:22px">'+(_obj.value?_obj.value:'')+'</textarea>';	

							if(_placeholder) _html+='<div class="placeholder c9" style="top: 15px; left: 15px; display: block;">'+_placeholder+'</div>';							

							break;

						case 'button':

							var _width = _obj.width?_obj.width:'330px';

							_html +='<button name=\''+_name+'\' class="btn btn-success btn-sm mr5 '+ _name + bs+'">'+_obj.text+'</button>';

							break;

						case 'radio':

							var _v = _obj.value===true?'checked':''

							_html +='<input type="radio" class="'+_name+'" id="'+_name+'" name="'+_name+'"  '+_v+'><label class="mr20" for="'+_name+'" style="font-weight:normal">'+_obj.text+'</label>'

							break;

						case 'checkbox':

							var _v = _obj.value===true?'checked':''

							_html +='<input type="checkbox" class="'+_name+'" id="'+_name+'" name="'+_name+'"  '+_v+'><label class="mr20" for="'+_name+'" style="font-weight:normal">'+_obj.text+'</label>'

							break;

						case 'number':

							var _width = _obj.width?_obj.width:'330px';	

							_html += "<input name='" + _name + "' "+(_obj.disabled?'disabled':'') +" class='bt-input-text mr5 " +  _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='number' style='width:"+_width+"' value='"+(_obj.value?_obj.value:'')+"' />";

							_html += _obj.unit?_obj.unit:'';

							break;

						case 'password':

							var _width = _obj.width?_obj.width:'330px';	

							_html += "<input name='" + _name + "' "+(_obj.disabled?'disabled':'') +" class='bt-input-text mr5 " +  _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='password' style='width:"+_width+"' value='"+(_obj.value?_obj.value:'')+"' />";							

							break;

						default:								

							var _width = _obj.width?_obj.width:'330px';	

							_html += "<input name='" + _name + "' "+(_obj.disabled?'disabled':'') +" class='bt-input-text mr5 " +  _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='text' style='width:"+_width+"' value='"+(_obj.value?_obj.value:'')+"' />";

							break;

					}

					if(_obj.title) _html+='</span>';

					if(_obj.callback) clicks.push({bind: _name + bs,callback:_obj.callback});				

					if(_obj.event) {

						_html +='<span data-id="'+ _name + bs +'" class="glyphicon cursor '+_obj.event.css+' icon_'+ _name + bs+'" ></span>';

						if(_obj.event.callback)	clicks.push({bind:'icon_'+ _name + bs,callback:_obj.event.callback});								

					}

					if(_obj.ps) _html +=" <p class='c9 mt10'>"+_obj.ps+"</p>";					

				}

				if(item.ps) _html +=" <p class='c9 mt10'>"+item.ps+"</p>";

			}

			else{			

				switch(item.type){

					case 'select':

						var _width = item.width?item.width:'100px';

						_html += '<select '+(item.disabled?'disabled':'')+' class="bt-input-text mr5 ' +  _name + bs + '" name="'+_name+'" style="width:'+_width+'">';

						for(var j=0;j<item.items.length;j++){

							_html+='<option '+(item.value==item.items[j].value?'selected':'' )+' value="'+item.items[j].value+'">'+item.items[j].title+'</option>';

						}

						_html +='</select>';

						break;

					case 'button':

							var _width = item.width?item.width:'330px';

							_html +='<button name=\''+_name+'\' class="btn btn-success btn-sm mr5 '+ _name + bs+'">'+item.text+'</button>';

							break;

					case 'number':

						var _width = item.width?item.width:'330px';

						_html += "<input name='" + item.name + "' "+(item.disabled?'disabled':'')+" class='bt-input-text mr5 " + _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='number' style='width:"+_width+"' value='"+(item.value?item.value:'')+"' />";

						break;

					case 'checkbox':

						var _v = item.value===true?'checked':''

						_html +='<input type="checkbox" class="'+_name+'" id="'+_name+'" name="'+_name+'"  '+_v+'><label class="mr20" for="'+_name+'" style="font-weight:normal">'+item.text+'</label>'

						break;

					case 'password':

						var _width = item.width?item.width:'330px';	

						_html += "<input name='" + _name + "' "+(item.disabled?'disabled':'') +" class='bt-input-text mr5 " +  _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='password' style='width:"+_width+"' value='"+(item.value?item.value:'')+"' />";							

						break;

					default:

						var _width = item.width?item.width:'330px';

						_html += "<input name='" + item.name + "' "+(item.disabled?'disabled':'')+" class='bt-input-text mr5 " + _name + bs + "' "+(_placeholder?' placeholder="'+_placeholder+'"':"")+" type='text' style='width:"+_width+"' value='"+(item.value?item.value:'')+"' />";

						break;

				}

				if(item.callback) clicks.push({bind: _name + bs,callback:item.callback});		

			}

			_html += '</div>';

			if(!item.class) item.class='';			

			if(item.hide) _hide = 'style="display:none;"'

			_html = '<div class="line '+item.class+'" '+ _hide +'>' + _html +'</div>'

			return { html: _html,clicks:clicks,data:item};			

		},

		render_form:function(data,callback){

			if(data){		

			var bs = '_' + bt.get_random(6);

			var _form = $("<div data-id='form"+bs+"' class='bt-form bt-form pd20 pb70'></div>");			

			var _lines = data.list; 

			var clicks = [];

			for (var i = 0;i<_lines.length;i++){

				var rRet = bt.render_form_line(_lines[i],bs);

				for(var s = 0;s<rRet.clicks.length;s++) clicks.push(rRet.clicks[s]);			

				_form.append(rRet.html);				

			}

			

			var _btn_html = '';

			for (var i = 0;i<data.btns.length;i++) {

				var item = data.btns[i];

				var css = item.css?item.css:'btn-danger';

				_btn_html += "<button type='button' class='btn btn-sm "+css+" " + item.name + bs + "' >"+item.title+"</button>";

				clicks.push({bind:item.name + bs,callback:item.callback});

			}

			_form.append("<div class='bt-form-submit-btn'>" + _btn_html + "</div>");				

			var loadOpen = bt.open({

				type: 1,

				skin: data.skin,

				area: data.area,

				title: data.title,

				closeBtn: 2,

				content:_form.prop("outerHTML")

			})				

			setTimeout(function(){

				bt.render_clicks(clicks,loadOpen,callback);			

			},100)

		}

		return bs;

	},

	render_clicks:function(clicks,loadOpen,callback){

		for(var i =0;i<clicks.length;i++){

			var obj= clicks[i];			

			

			var btn = $('.'+obj.bind);

			btn.data('item',obj);

			btn.data('load',loadOpen);

			btn.data('callback',callback);

			

			switch(btn.prop("tagName")){

				case 'SPAN':

					btn.click(function(){

						var _obj =  $(this).data('item');

						_obj.callback($(this).attr('data-id'));							

					})

					break;

				case 'SELECT':

					btn.change(function(){

						var _obj =  $(this).data('item');

						_obj.callback($(this));	

					})

					break;

				case 'TEXTAREA':

				case 'INPUT':

                case 'BUTTON':      

                    

                    if (btn.prop("tagName") == 'BUTTON' || btn.attr("type") == 'checkbox')

					{

						btn.click(function(){							

							var _obj =  $(this).data('item');

							var load = $(this).data('load');

							var _callback =  $(this).data('callback');

							var parent = $(this).parents('.bt-form');	

							

                            if (_obj.callback) {

                            

								var data = {};

								parent.find('*').each(function(index,_this){

                                    var _name = $(_this).attr('name');

                               

									if(_name){

										if($(_this).attr('type')=='checkbox' || $(_this).attr('type')=='radio'){

											data[_name] = $(_this).prop('checked');

										}else{

											data[_name] = $(_this).val();

										}										

									}

								})	

								_obj.callback(data,load,function(rdata){

									if(_callback) _callback(rdata);

								});

							}

							else{									

								load.close();

							}

						})

					}

                    else {

                        if (btn.attr("type") == 'radio') {

                            btn.click(function () {

                                var _obj = $(this).data('item');

                                _obj.callback($(this))

                            })

                        }

                        else {

                            btn.on('input', function () {

                                var _obj = $(this).data('item');

                                _obj.callback($(this));

                            })		

                        }									

					}					

					break;

			}					

		}	

	},

	render:function(obj) //columns 行

	{

		if(obj.columns)

		{

			var checks = {};

			$(obj.table).html('');

			var thead = '<thead><tr>';			

			for (var h=0;h < obj.columns.length;h++) {

				var item = obj.columns[h];

				if(item){									

					thead += '<th';

					if(item.width) thead += ' width="'+item.width+'" ';

					if(item.align || item.sort){

						thead+=' style="';

						if(item.align) thead += 'text-align:'+item.align+';';

						if(item.sort) thead += item.sort?'cursor: pointer;':'';

						thead+='"';

					}				

					if(item.type=='checkbox'){

						thead += '><input  class="check"  onclick="bt.check_select();" type="checkbox">';			

					}

					else{

						thead += '>'+item.title;

					}

					if(item.sort) {					

						checks[item.field] = item.sort;

						thead += ' <span data-id="'+item.field+'" class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span>';					

					}

					if(item.help) thead+='<a href="'+item.help+'" class="bt-ico-ask" target="_blank" title="点击查看说明">?</a>';

					

					thead += '</th>';	

				}

			}	

			thead += '</tr></thead>';

			var _tab = $(obj.table).append(thead);			

			if(obj.data.length>0){

				for (var i=0;i < obj.data.length;i++) {

					var val = obj.data[i];

					var tr = $('<tr></tr>');		

					for (var h=0;h < obj.columns.length;h++) {

						var item = obj.columns[h];	

						if(item){		

							var _val = val[item.field];

							if(typeof _val =='string') _val= _val.replace(/\\/g,'');

							if(item.hasOwnProperty('templet')) _val = item.templet(val);	

							if(item.type=='checkbox') _val = '<input value='+val[item.field]+'  class="check" onclick="bt.check_select();" type="checkbox">';

							var td = '<td ';

							if(item.align){

								td+='style="';

								if(item.align) td+='text-align:'+item.align;

								td+='"';

							}

							if(item.index) td +='data-index="' + i + '" '

							td+='>';

							tr.append(td +_val+'</td>');

							tr.data('item',val);

							_tab.append(tr);

						}

					}

				}

			}

			else{

				_tab.append("<tr><td colspan='"+obj.columns.length+"'>"+lan.bt.no_data+"</td></tr>");

			}

			$(obj.table).find('.check').click(function(){

				var checked = $(this).prop('checked');				

				if($(this).parent().prop('tagName')=='TH'){

					$('.check').prop('checked',checked?'checked':'');					

				}				

			})

			$(obj.table).find('th').data('checks',checks).click(function(){				

				var _th =$(this);

				var _checks = _th.data('checks');

				var _span = _th.find('span');

				if(_span.length>0){

					var asc = 'glyphicon-triangle-top';

					var desc = 'glyphicon-triangle-bottom';

					var or = _span.attr('data-id');

					if(_span.hasClass(asc)){						

						bt.set_cookie('order',or + ' desc');

						_checks[or]();

						setTimeout(function(){

							$(obj.table).find('th span[data-id="'+or+'"]').removeClass(asc).addClass(desc);

						},100)

					}else if(_span.hasClass(desc)){							

						bt.set_cookie('order',or + ' asc');

						_checks[or]();						

						setTimeout(function(){

							$(obj.table).find('th span[data-id="'+or+'"]').removeClass(desc).addClass(asc);			

						},100)

					}	

				}

			})

		}

		return _tab;

	}

};







bt.pub = {

	get_data : function(data,callback,hide){

		if(!hide) var loading = bt.load(lan.public.the);

		bt.send('getData','data/getData',data,function(rdata){

			if(loading) loading.close();

			if(callback) callback(rdata);

		})

    },

    set_data_by_key: function (tab, key, obj) {		

		var _span = $(obj);

		var _input = $("<input class='baktext' value="+_span.text()+" type='text' placeholder='"+lan.ftp.ps+"' />");

		_span.hide().after(_input);

		_input.focus();

		_input.blur(function(){

			var item = $(this).parents('tr').data('item');	

			var _txt = $(this);

			var data = {table:tab,id:item.id};

			data[key] = _txt.val()

			bt.pub.set_data_ps(data,function(rdata){

				if(rdata.status){	

					_span.text(_txt.val());								

					_span.show();

					_txt.remove();

				}

			})

		})

		_input.keyup(function(){

			if(event.keyCode == 13){

				_input.trigger("blur");

			}

		})

	},

	set_data_ps:function(data,callback){

		bt.send('setPs','data/setPs',data,function(rdata){			

			if(callback) callback(rdata);

		})

	},

	set_server_status : function(serverName,type)

	{

		if(bt.contains(serverName,'php-')) {

			serverName = "php-fpm-" + serverName.replace('php-','').replace('.','');

		}		

		if(serverName=='pureftpd') serverName = 'pure-ftpd';

		if(serverName=='mysql') serverName = 'mysqld';

		serverName = serverName.replace('_soft','');

		var data = "name=" + serverName + "&type=" + type;

		var msg = lan.bt[type];

		bt.confirm({msg:lan.get('service_confirm',[msg,serverName])},function(){

			

			var load = bt.load(lan.get('service_the',[msg,serverName]))		

			bt.send('system','system/ServiceAdmin',data,function(rdata){				

				load.close();

				var f = rdata.status ? lan.get('service_ok',[serverName,msg]):lan.get('service_err',[serverName,msg]);

				bt.msg({msg:f,icon:rdata.status})

			

				if(type != "reload" && rdata.status) {

					setTimeout(function() {

						window.location.reload()

					}, 1000)

				}

				if(!rdata.status) {

					bt.msg(rdata);

				}

			})

		})

	},	

	set_server_status_by:function(data,callback){

		bt.send('system','system/ServiceAdmin',data,function(rdata){

			if(callback) callback(rdata)

		})

	},

	get_task_count:function(){

		bt.send('GetTaskCount','ajax/GetTaskCount',{},function(rdata){

			$(".task").text(rdata)

		})

	},

	check_install:function(callback){

		bt.send('CheckInstalled','ajax/CheckInstalled',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_user_info:function(callback){

		var loading = bt.load();

		bt.send('GetUserInfo','ssl/GetUserInfo',{},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	show_hide_pass:function(obj){

		var a = "glyphicon-eye-open";

		var b = "glyphicon-eye-close";

		

		if($(obj).hasClass(a)){

			$(obj).removeClass(a).addClass(b);

			$(obj).prev().text($(obj).prev().attr('data-pw'))

		}

		else{

			$(obj).removeClass(b).addClass(a);

			$(obj).prev().text('**********');

		}

	},

	copy_pass:function(password){

		var clipboard = new ClipboardJS('#bt_copys');

		clipboard.on('success', function (e) {

		    bt.msg({msg:'复制成功',icon:1});

		});

		

		clipboard.on('error', function (e) {

		    bt.msg({msg:'复制失败,浏览器不兼容!',icon:2});

		});

		$("#bt_copys").attr('data-clipboard-text',password);

		$("#bt_copys").click();

    },

    login_btname: function (username,password,callback) {

        var loadT = bt.load(lan.config.token_get);

        bt.send('GetToken', 'ssl/GetToken', "username=" + username + "&password=" + password, function (rdata) {

            loadT.close();

            bt.msg(rdata);

            if (rdata.status) {

                if (callback) callback(rdata)                          

            }

        })	

    },

	bind_btname : function(callback)

	{

		layer.open({

			type: 1,

			title: '绑定宝塔官网账号',

			area: ['420px','360px'],

			closeBtn: 2,

			shadeClose: false,

			content:'<div class="libLogin pd20" ><div class="bt-form text-center"><div class="line mb15"><h3 class="c2 f16 text-center mtb20">绑定宝塔官网账号</h3></div><div class="line"><input class="bt-input-text" name="username2" type="text" placeholder="手机" id="p1"></div><div class="line"><input autocomplete="new-password" class="bt-input-text" type="password" name="password2"  placeholder="密码" id="p2"></div><div class="line"><input class="login-button" value="登录" type="button" ></div><p class="text-right"><a class="btlink" href="https://www.bt.cn/register.html" target="_blank">未有账号,去注册</a></p></div></div>'

		});		

		setTimeout(function(){

			$('.login-button').click(function(){

				p1 = $("#p1").val();

				p2 = $("#p2").val();

				var loadT = bt.load(lan.config.token_get);

				bt.send('GetToken','ssl/GetToken',"username=" + p1 + "&password=" + p2,function(rdata){

					loadT.close();

					bt.msg(rdata);

					if(rdata.status) {

						if(callback){

							layer.closeAll();

							callback(rdata)

						}

						else{

							window.location.reload();

						}					

						$("input[name='btusername']").val(p1);

					}

				})	

			})

		},100)

	},

	unbind_bt : function()

	{

		var name = $("input[name='btusername']").val();

		bt.confirm({msg:lan.config.binding_un_msg,title:lan.config.binding_un_title},function(){

			bt.send('DelToken','ssl/DelToken',{},function(rdata){

				bt.msg(rdata);

				$("input[name='btusername']").val('');

			})

		})

	},

	get_menm:function(callback){

		var loading = bt.load();

		bt.send('GetMemInfo','system/GetMemInfo',{},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	on_edit_file:function(type, fileName) {	

		if(type != 0) {			

			var l = $("#PathPlace input").val();

			var body = encodeURIComponent($("#textBody").val());			

			var encoding = $("select[name=encoding]").val();

			var loadT = bt.load(lan.bt.save_file);

			bt.send('SaveFileBody','files/SaveFileBody',"data=" + body + "&path=" + fileName + "&encoding=" + encoding,function(rdata){

				if(type == 1) loadT.close();

				bt.msg(rdata);				

			})	

			return;

		}

		var loading = bt.load(lan.bt.read_file);

		ext = bt.get_file_ext(fileName);

		doctype = '';

		switch(ext)

		{

			case "html":

				var mixedMode = {name: "htmlmixed",scriptTypes: [{matches: /\/x-handlebars-template|\/x-mustache/i,mode: null}, {matches: /(text|application)\/(x-)?vb(a|script)/i,mode: "vbscript"}]};

				doctype = mixedMode;

				break;

			case "htm":

				var mixedMode = {name: "htmlmixed",scriptTypes: [{matches: /\/x-handlebars-template|\/x-mustache/i,mode: null},{matches: /(text|application)\/(x-)?vb(a|script)/i,mode: "vbscript"}]};

				doctype = mixedMode;

				break;

			case "js":

				doctype = "text/javascript";

				break;

			case "json":

				doctype = "application/ld+json";

				break;

			case "css":

				doctype = "text/css";

				break;

			case "php":

				doctype = "application/x-httpd-php";

				break;

			case "tpl":

				doctype = "application/x-httpd-php";

				break;

			case "xml":

				doctype = "application/xml";

				break;

			case "sql":

				doctype = "text/x-sql";

				break;

			case "conf":

				doctype = "text/x-nginx-conf";

				break;

			default:

				var mixedMode = {name: "htmlmixed",scriptTypes: [{matches: /\/x-handlebars-template|\/x-mustache/i,mode: null}, {matches: /(text|application)\/(x-)?vb(a|script)/i,mode: "vbscript"}]};

				doctype = mixedMode;

				break;

		}		

		bt.send('GetFileBody','files/GetFileBody','path='+fileName,function(rdata){

			if(!rdata.status){

				bt.msg({msg:rdata.msg,icon:5});

				return;

			}			

			loading.close();

			var u = ["utf-8", "GBK", "GB2312", "BIG5"];

			var n = "";

			var m = "";

			var o = "";

			for(var p = 0; p < u.length; p++) {

				m = rdata.encoding == u[p] ? "selected" : "";

				n += '<option value="' + u[p] + '" ' + m + ">" + u[p] + "</option>"

			}

			var r = bt.open({

				type: 1,

				shift: 5,

				closeBtn: 1,

				//maxmin: true,

				area: ["90%", "90%"],

				shade:false,

				title: lan.bt.edit_title+"[" + fileName + "]",

				content: '<form class="bt-form pd20 pb70"><div class="line"><p style="color:red;margin-bottom:10px">'+lan.bt.edit_ps

					+'		<select class="bt-input-text" name="encoding" style="width: 74px;position: absolute;top: 31px;right: 19px;height: 22px;z-index: 9999;border-radius: 0;">' 

					+ n + '</select></p><textarea class="mCustomScrollbar bt-input-text" id="textBody" style="width:100%;margin:0 auto;line-height: 1.8;position: relative;top: 10px;" value="" /></div><div class="bt-form-submit-btn" style="position:absolute; bottom:0; width:100%"><button type="button" class="btn btn-danger btn-sm btn-editor-close">'+lan.public.close+'</button><button id="OnlineEditFileBtn" type="button" class="btn btn-success btn-sm">'+lan.public.save+'</button></div></form>'

			})

			$("#textBody").text(rdata.data);

			var q = $(window).height() * 0.9;

			$("#textBody").height(q - 160);

			var t = CodeMirror.fromTextArea(document.getElementById("textBody"), {

				extraKeys: {

					"Ctrl-F": "findPersistent",

					"Ctrl-H": "replaceAll",

					"Ctrl-S": function() {

						$("#textBody").text(t.getValue());

						bt.pub.on_edit_file(2, fileName)

					}

				},

				mode: doctype,

				lineNumbers: true,

				matchBrackets: true,

				matchtags: true,

				autoMatchParens: true

			});

			t.focus();

			t.setSize("auto", q - 150);

			$("#OnlineEditFileBtn").click(function() {

				$("#textBody").text(t.getValue());

				bt.pub.on_edit_file(1, fileName);

			});

			$(".btn-editor-close").click(function() {

				r.close();

			});

		})

	}	

};



bt.index = {	

	rec_install:function(){		

		bt.send('GetSoftList','ajax/GetSoftList',{},function(l){

			

			var c = "";

			var g = "";

			var e = "";

			for(var h = 0; h < l.length; h++) {

				if(l[h].name == "Tomcat") {

					continue

				}

				var o = "";

				var m = "<input id='data_" + l[h].name + "' data-info='" + l[h].name + " " + l[h].versions[0].version + "' type='checkbox' checked>";

				for(var b = 0; b < l[h].versions.length; b++) {

					var d = "";

					if((l[h].name == "PHP" && (l[h].versions[b].version == "5.4" || l[h].versions[b].version == "54")) || (l[h].name == "MySQL" && l[h].versions[b].version == "5.5") || (l[h].name == "phpMyAdmin" && l[h].versions[b].version == "4.4")) {

						d = "selected";

						m = "<input id='data_" + l[h].name + "' data-info='" + l[h].name + " " + l[h].versions[b].version + "' type='checkbox' checked>"

					}

					o += "<option value='" + l[h].versions[b].version + "' " + d + ">" + l[h].name + " " + l[h].versions[b].version + "</option>"

				}

				var f = "<li><span class='ico'><img src='/static/img/" + l[h].name.toLowerCase() + ".png'></span><span class='name'><select id='select_" + l[h].name + "' class='sl-s-info'>" + o + "</select></span><span class='pull-right'>" + m + "</span></li>";

				if(l[h].name == "Nginx") {

					c = f

				} else {

					if(l[h].name == "Apache") {

						g = f

					} else {

						e += f

					}

				}

			}

			c += e;

			g += e;

		

			g = g.replace(new RegExp(/(data_)/g), "apache_").replace(new RegExp(/(select_)/g), "apache_select_");

			var k = layer.open({

				type: 1,

				title: lan.bt.install_title,

				area: ["658px", "428px"],

				closeBtn: 2,

				shadeClose: false,

                content: "<div class='rec-install'><div class='important-title'><p><span class='glyphicon glyphicon-alert' style='color: #f39c12; margin-right: 10px;'></span>" + lan.bt.install_ps + " <a href='javascript:jump()' style='color:#20a53a'>" + lan.bt.install_s + "</a> " + lan.bt.install_s1 + "</p></div><div class='rec-box'><h3>" + lan.bt.install_lnmp + "</h3><div class='rec-box-con'><ul class='rec-list'>" + c + "</ul><p class='fangshi'>" + lan.bt.install_type + ":<label data-title='" + lan.bt.install_rpm_title + "' style='margin-right:0'>" + lan.bt.install_rpm + "<input type='checkbox' checked></label><label data-title='" + lan.bt.install_src_title + "'>" + lan.bt.install_src + "<input type='checkbox'></label></p><div class='onekey'>" + lan.bt.install_key + "</div></div></div><div class='rec-box' style='margin-left:16px'><h3>LAMP</h3><div class='rec-box-con'><ul class='rec-list'>" + g + "</ul><p class='fangshi'>" + lan.bt.install_type + ":<label data-title='" + lan.bt.install_rpm_title + "' style='margin-right:0'>" + lan.bt.install_rpm + "<input type='checkbox' checked></label><label data-title='" + lan.bt.install_src_title + "'>" + lan.bt.install_src + "<input type='checkbox'></label></p><div class='onekey'>一键安装</div></div></div></div>"

			});



            $(".fangshi input").click(function () {

                $(this).attr("checked", "checked").parent().siblings().find("input").removeAttr("checked")

            });



			$(".sl-s-info").change(function() {

				var p = $(this).find("option:selected").text();

				var n = $(this).attr("id");

				p = p.toLowerCase();

				$(this).parents("li").find("input").attr("data-info", p)

			});

			$("#apache_select_PHP").change(function() {

				var n = $(this).val();

				j(n, "apache_select_", "apache_")

			});

			$("#select_PHP").change(function() {

				var n = $(this).val();

				j(n, "select_", "data_")

			});

	

			function j(p, r, q) {

				var n = "4.4";

				switch(p) {

					case "5.2":

						n = "4.0";

						break;

					case "5.3":

						n = "4.0";

						break;

					case "5.4":

						n = "4.4";

						break;

					case "5.5":

						n = "4.4";

						break;

					default:

						n = "4.7"

				}

				$("#" + r + "phpMyAdmin option[value='" + n + "']").attr("selected", "selected").siblings().removeAttr("selected");

				$("#" + r + "_phpMyAdmin").attr("data-info", "phpmyadmin " + n)

			}

			$("#select_MySQL,#apache_select_MySQL").change(function() {

				var n = $(this).val();

				a(n)

			});

			

			$("#apache_select_Apache").change(function(){

				var apacheVersion = $(this).val();

				if(apacheVersion == '2.2'){

					layer.msg(lan.bt.install_apache22);

				}else{

					layer.msg(lan.bt.install_apache24);

				}

			});

			

			$("#apache_select_PHP").change(function(){

				var apacheVersion = $("#apache_select_Apache").val();

				var phpVersion = $(this).val();

				if(apacheVersion == '2.2'){

					if(phpVersion != '5.2' && phpVersion != '5.3' && phpVersion != '5.4'){

						layer.msg(lan.bt.insatll_s22+'PHP-' + phpVersion,{icon:5});

						$(this).val("5.4");

						$("#apache_PHP").attr('data-info','php 5.4');

						return false;

					}

				}else{

					if(phpVersion == '5.2'){

						layer.msg(lan.bt.insatll_s24+'PHP-' + phpVersion,{icon:5});

						$(this).val("5.4");

						$("#apache_PHP").attr('data-info','php 5.4');

						return false;

					}

				}

			});

	

			function a(n) {

				memSize = bt.get_cookie("memSize");

				max = 64;

				msg = "64M";

				switch(n) {

					case "5.1":

						max = 256;

						msg = "256M";

						break;

					case "5.7":

						max = 1500;

						msg = "2GB";

						break;

					case "5.6":

						max = 800;

						msg = "1GB";

						break;

					case "AliSQL":

						max = 800;

						msg = "1GB";

						break;

					case "mariadb_10.0":

						max = 800;

						msg = "1GB";

						break;

					case "mariadb_10.1":

						max = 1500;

						msg = "2GB";

						break

				}

				if(memSize < max) {

					layer.msg( lan.bt.insatll_mem.replace("{1}",msg).replace("{2}",n), {

						icon: 5

					})

				}

			}

			var de = null;

			$(".onekey").click(function() {

				if(de) return;

				var v = $(this).prev().find("input").eq(0).prop("checked") ? "1" : "0";

				var r = $(this).parents(".rec-box-con").find(".rec-list li").length;

				var n = "";

				var q = "";

				var p = "";

				var x = "";

				var s = "";

				de = true;

				for(var t = 0; t < r; t++) {

					var w = $(this).parents(".rec-box-con").find("ul li").eq(t);

					var u = w.find("input");

					if(u.prop("checked")) {

						n += u.attr("data-info") + ","

					}

				}

				q = n.split(",");

				loadT = layer.msg(lan.bt.install_to, {

					icon: 16,

					time: 0,

					shade: [0.3, "#000"]

				});

			

				install_plugin(q);

				

				function install_plugin(q){

					if(!q[0]) return;

					p = q[0].split(" ")[0].toLowerCase();

					x = q[0].split(" ")[1];

					if(p=='pure-ftpd') p = 'pureftpd';

					if(p=='php') p = 'php-'+x;

					

                    s = "sName=" + p + "&version=" + x + "&type=" + v + "&id=" + (t + 1);

					bt.send('install_plugin','plugin/install_plugin',s,function(){

						q.splice(0,1);

						install_plugin(q);

					});

				}

				

				layer.close(loadT);

				layer.close(k);

				setTimeout(function() {

					GetTaskCount()

				}, 2000);

				layer.msg(lan.bt.install_ok, {

					icon: 1

				});

				setTimeout(function() {

					task()

				}, 1000)

			});

			//InstallTips();

			fly("onekey")

		})

	}

}



bt.weixin = {

		settiming:'',

		relHeight:500,

		relWidth:500,

		userLength:'',

		get_user_info:function(callback){

			bt.send('get_user_info','panel_wxapp/get_user_info',{},function(rdata){

				if(callback) callback(rdata);

			},1)

		},

		init:function(){

			var _this = this;

			$('.layui-layer-page').css('display', 'none');

			$('.layui-layer-page').width(_this.relWidth);

			$('.layui-layer-page').height(_this.relHeight);

			$('.bt-w-menu').height((_this.relWidth - 1) - $('.layui-layer-title').height());

			var width = $(document).width();

			var height = $(document).height();

			var boxwidth =  (width / 2) - (_this.relWidth / 2);

			var boxheight =  (height / 2) - (_this.relHeight / 2);

			$('.layui-layer-page').css({

				'left':boxwidth +'px',

				'top':boxheight+'px'

			});

			$('.boxConter,.layui-layer-page').css('display', 'block');

			$('.layui-layer-close').click(function(event) {

				window.clearInterval(_this.settiming);

			});

			this.get_user_details();

			$('.iconCode').hide();

			$('.personalDetails').show();

		},

		// 获取二维码

		get_qrcode:function(){

			var _this = this;

			var qrLoading = bt.load(lan.config.config_qrcode);

			

			bt.send('blind_qrcode','panel_wxapp/blind_qrcode',{},function(res){

				qrLoading.close();

				if (res.status){

                	$('#QRcode').empty();

					$('#QRcode').qrcode({

					    render: "canvas", //也可以替换为table

					    width: 200,

					    height: 200,

					    text:res.msg

					});

					_this.settiming =  setInterval(function(){

						_this.verify_binding();

					},2000);

				}else{

					bt.msg(res);

				}

			})

		},

		// 获取用户信息

		get_user_details:function(type){

			var _this = this;

			var conter = '';	

			_this.get_user_info(function(res){

				clearInterval(_this.settiming);

				if (!res.status){

					res.time = 3000;

					bt.msg(res);

					

					$('.iconCode').hide();

					return false;

				}

				if (JSON.stringify(res.msg) =='{}'){

					if (type){

						bt.msg({msg:lan.config.qrcode_no_list,icon:2})

					}else{

						_this.get_qrcode();

					}

					$('.iconCode').show();

					$('.personalDetails').hide();

					return false;

				}

				$('.iconCode').hide();

				$('.personalDetails').show();

				var datas = res.msg;

				for(var item in datas){

					conter += '<li class="item">\

								<div class="head_img"><img src="'+datas[item].avatarUrl+'" title="用户头像" /></div>\

								<div class="nick_name"><span>昵称:</span><span class="nick"></span>'+datas[item].nickName+'</div>\

								<div class="cancelBind">\

									<a href="javascript:;" class="btlink" title="取消当前微信小程序的绑定" onclick="bt.weixin.cancel_bind('+ item +')">取消绑定</a>\

								</div>\

							</li>'

				}

				conter += '<li class="item addweChat" style="height:45px;"><a href="javascript:;" class="btlink" onclick="bt.weixin.add_wx_view()"><span class="glyphicon glyphicon-plus"></span>添加绑定账号</a></li>'

				$('.userList').empty().append(conter);

			})

		},

		// 添加绑定视图

		add_wx_view:function(){

			$('.iconCode').show();

			$('.personalDetails').hide();

			this.get_qrcode();

		},

		// 取消当前绑定

		cancel_bind:function(uid){

			var _this = this;

			var bdinding = layer.confirm('您确定要取消当前绑定吗?',{

				btn:['确认','取消'],

				icon:3,

				title:'取消绑定'

			},function(){

				bt.send("blind_del","panel_wxapp/blind_del",{uid:uid},function(res){

					bt.msg(res);

					_this.get_user_details();

				})

			},function(){

				layer.close(bdinding);

			});

		},

		// 监听是否绑定

		verify_binding:function(){

			var _this = this;

			bt.send('blind_result','panel_wxapp/blind_result',{},function(res){

				if(res){

					bt.msg({status:true,msg:'绑定成功!'});

					clearInterval(_this.settiming);

					_this.get_user_details();

					}

				})

			},

		open_wxapp : function(){

				var rhtml = '<div class="boxConter" style="display: none">\

								<div class="iconCode" >\

									<div class="box-conter">\

										<div id="QRcode"></div>\

										<div class="codeTip">\

											<ul>\

												<li>1、打开宝塔面板小程序<span class="btlink weChat">小程序二维码<div class="weChatSamll"><img src="https://app.bt.cn/static/app.png"></div></span></li>\

												<li>2、使用宝塔小程序扫描当前二维码,绑定该面板</li>\

											</ul>\

											<span><a href="javascript:;" title="返回面板绑定列表" class="btlink" style="margin: 0 auto" onclick="bt.weixin.get_user_details(true)">查看绑定列表</a></span>\

										</div>\

									</div>\

								</div>\

								<div class="personalDetails" style="display: none">\

									<ul class="userList"></ul>\

								</div>\

							</div>'

				

				bt.open({

					type: 1,

					title: "绑定微信",

					area: '500px',			

					shadeClose: false,

					content:rhtml

			})		

			bt.weixin.init();

		}

};







bt.ftp = {	

	get_list : function(page,search,callback)

	{

		if(page == undefined) page = 1

		search = search == undefined ? '':search;

		var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order'):'';

		

		var data = 'tojs=ftp.get_list&table=ftps&limit=15&p='+page+'&search='+search + order; 

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		})

	},

	add:function(callback)

	{

		var bs = bt.render_form(bt.data.ftp.add,function(rdata){		

			if(callback) callback(rdata);

        });	

        $('.path' + bs).val($("#defaultPath").text());

	},

	set_password : function(callback){

		var bs = bt.render_form(bt.data.ftp.set_password,function(rdata){		

			if(callback) callback(rdata);

		});	

		return bs;

	},

	del: function(id,username,callback)

	{

		var loading = bt.load(lan.get('del_all_task_the',[username]));

		bt.send('DeleteUser','ftp/DeleteUser',{id:id,username:username},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_status: function(id, username,status,callback){

		var loadT = bt.load(lan.public.the);

		var data='id=' + id + '&username=' + username + '&status='+status;		

		bt.send('SetStatus','ftp/SetStatus',data,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

			bt.msg(rdata);

		})		

	},

	set_port:function(callback)

	{

		var bs = bt.render_form(bt.data.ftp.set_port,function(rdata){		

				if(callback) callback(rdata);

			});	

		return bs;

	}	

}



bt.recycle_bin = {				

	open_recycle_bin:function(type){

		if(type==undefined) type = 1;

		bt.files.get_recycle_bin(type,function(rdata){

		var data = [];							

		switch(type){

			case 2:

				data = rdata.dirs;

				break;

			case 3:

				data = rdata.files;

				break;

			case 4:

			case 5:

			case 6:

				for (var i=0;i< rdata.files.length;i++) {

					if(type==6 && bt.contains(rdata.files[i].name,'BTDB_')){

						data.push(rdata.files[i]);

					}

					else{

						if(type==4 && bt.check_img(rdata.files[i].name)){

							data.push(rdata.files[i]);

						}

						else if(type==5 && !bt.check_img(rdata.files[i].name)){

							data.push(rdata.files[i]);

						}

					}							

				}						

				break;

			default:

				data = rdata.dirs.concat(rdata.files);

				break;

		}				

		if($('#tab_recycle_bin').length <= 0)

		{		

			bt.open({

				type: 1,

				skin: 'demo-class',

				area: ['80%','606px'],

				title: lan.files.recycle_bin_title,

				closeBtn: 2,

				shift: 5,

				shadeClose: false,

				content: '<div class="re-head">\

							<div style="margin-left: 3px;" class="ss-text">\

			                        <em>'+lan.files.recycle_bin_on+'</em>\

			                        <div class="ssh-item">\

			                                <input class="btswitch btswitch-ios" id="Set_Recycle_bin" type="checkbox" '+(rdata.status?'checked':'')+'>\

			                                <label class="btswitch-btn" for="Set_Recycle_bin" onclick="bt.files.set_recycle_bin()"></label>\

			                        </div>\

			                        <em style="margin-left: 20px;">'+lan.files.recycle_bin_on_db+'</em>\

			                        <div class="ssh-item">\

			                                <input class="btswitch btswitch-ios" id="Set_Recycle_bin_db" type="checkbox" '+(rdata.status_db?'checked':'')+'>\

			                                <label class="btswitch-btn" for="Set_Recycle_bin_db" onclick="bt.files.set_recycle_bin(1)"></label>\

			                        </div>\

			                </div>\

							<span style="line-height: 32px; margin-left: 30px;">'+lan.files.recycle_bin_ps+'</span>\

			                <button style="float: right" class="btn btn-default btn-sm" onclick="bt.recycle_bin.clear_recycle_bin();">'+lan.files.recycle_bin_close+'</button>\

							</div>\

							<div class="re-con">\

								<div class="re-con-menu"></div>\

								<div class="re-con-con">\

								<div style="margin: 15px;" class="divtable">\

									<table id="tab_recycle_bin" width="100%" class="table table-hover"></table>\

								</div></div></div>'

			});

		}

		

		setTimeout(function(){

			var menus = [

				{title:lan.files.recycle_bin_type1,click:'bt.recycle_bin.open_recycle_bin(1)'},

				{title:lan.files.recycle_bin_type2,click:'bt.recycle_bin.open_recycle_bin(2)'},

				{title:lan.files.recycle_bin_type3,click:'bt.recycle_bin.open_recycle_bin(3)'},

				{title:lan.files.recycle_bin_type4,click:'bt.recycle_bin.open_recycle_bin(4)'},

				{title:lan.files.recycle_bin_type5,click:'bt.recycle_bin.open_recycle_bin(5)'},

				{title:lan.files.recycle_bin_type6,click:'bt.recycle_bin.open_recycle_bin(6)'}

			];

			var m_html = '';

			for (var i=0;i<menus.length;i++) {

				var c = type==(i+1)?'class="on"':'';

				m_html+='<p '+c+' onclick="'+menus[i].click+'" >'+menus[i].title+'</p>';

			}

			$('.re-con-menu').html(m_html);

			var _tab =  bt.render({

				table:'#tab_recycle_bin',

				columns:[

					{field:'name',title:lan.files.recycle_bin_th1},

					{field:'dname',title:lan.files.recycle_bin_th2},

					{field:'size',title:lan.files.recycle_bin_th3,templet:function(item){

						return bt.format_size(item.size)

					}},

					{field:'time',title:lan.files.recycle_bin_th4,templet:function(item){

						return bt.format_data(item.time);

					}},

					{field:'opt',title:lan.files.recycle_bin_th5,align:'right',templet:function(item){

						var opt = '<a class="btlink" href="javascript:;" onclick="bt.recycle_bin.re_recycle_bin(\''+item.rname+'\','+type+')">恢复</a> | ';

						opt += '<a class="btlink" href="javascript:;" onclick="bt.recycle_bin.del_recycle_bin(\''+item.rname+'\','+type+')">永久删除</a>';

						return opt;

					}},

				],

				data:data

			});	

		},100)

		})

	},

	clear_recycle_bin:function(){

		var _this = this;

		bt.files.clear_recycle_bin(function(rdata){

			_this.open_recycle_bin(1);

			bt.msg(rdata);

		})

	},

	del_recycle_bin:function(path,type){

		var _this = this;

		bt.files.del_recycle_bin(path,function(rdata){

			if(rdata.status) _this.open_recycle_bin(type);

			bt.msg(rdata);

		})

	},

	re_recycle_bin:function(path,type){

		var _this = this;

		bt.files.re_recycle_bin(path,function(rdata){

			if(rdata.status) _this.open_recycle_bin(type);

			bt.msg(rdata);

		})

	}		

}







bt.files = {

	get_path:function()

	{

		path = path = bt.get_cookie('Path');

		if(!path)

		{

			bt.msg({msg:lan.get('lack_param',['response'])});

			return;

		}

	},	

	get_files:function(Path,searchV,callback){

		var searchtype = Path;

		if(isNaN(Path)){

			var p = '1';

		}else{

			var p = Path;

			Path = bt.get_cookie('Path');

		}		

		var search = '';

		if(searchV.length > 1 && searchtype == "1"){

			search = "&search="+searchV;

		}

		var showRow = bt.get_cookie('showRow');

		if(!showRow) showRow = '100';

		var totalSize = 0;

		var loadT = bt.load(lan.public.the);

		bt.send('get_files','files/GetDir','tojs=GetFiles&p=' + p + '&showRow=' + showRow + search+'&path='+ Path,function(rdata){

			loadT.close();

			//bt.set_cookie('Path',rdata.PATH);

			if(callback) callback(rdata);

		})

	},

	get_recycle_bin:function(type,callback)

	{

		loading = bt.load(lan.public.the);

		bt.send('Get_Recycle_bin','files/Get_Recycle_bin',{},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	re_recycle_bin:function(path,callback)

	{

		bt.confirm({msg:lan.files.recycle_bin_re_msg,title:lan.files.recycle_bin_re_title},function(){

			var loadT = bt.load(lan.files.recycle_bin_re_the);

			bt.send('Re_Recycle_bin','files/Re_Recycle_bin','path='+path,function(rdata){

				loadT.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		});

	},

	del_recycle_bin:function(path,callback)

	{

		bt.confirm({msg:lan.files.recycle_bin_del_msg,title:lan.files.recycle_bin_del_title},function(){

			var loadT = bt.load(lan.files.recycle_bin_del_the);

			bt.send('Re_Recycle_bin','files/Del_Recycle_bin','path='+path,function(rdata){

				loadT.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		});

	},

	clear_recycle_bin:function(callback)

	{

		bt.confirm({msg:lan.files.recycle_bin_close_msg,title:lan.files.recycle_bin_close},function(){

			var loadT = bt.load("<div class='myspeed'>"+lan.files.recycle_bin_close_the+"</div>");

			bt.send('Re_Recycle_bin','files/Close_Recycle_bin',{},function(rdata){

				loadT.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		});

	},

	set_recycle_bin:function(db)

	{

		var loadT = bt.load(lan.public.the);

		var data = {};

		if(db) data = {db:db}		

		bt.send('Recycle_bin','files/Recycle_bin',data,function(rdata){

			loadT.close();

			bt.msg(rdata);

		})

	},

	rename:function(fileName,type,callback) 

	{

		if(type==undefined) type = 0;

		_this = this;

		path = _this.get_path();

		if(type)

		{

			var newFileName = path + '/' + $("#newFileName").val();

			var oldFileName = path + '/' + fileName;

			var loading = bt.load(lan.public.the);

			bt.send('MvFile','files/MvFile','sfile=' + oldFileName + '&dfile=' + newFileName,function(rdata) {

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			});

			return;

		}		

		bt.open({

			type: 1,

			shift: 5,

			closeBtn: 2,

			area: '320px', 

			title: lan.files.file_menu_rename,

			content: '<div class="bt-form pd20 pb70">\

						<div class="line">\

						<input type="text" class="bt-input-text" name="Name" id="newFileName" value="' + fileName + '" placeholder="'+lan.files.file_name+'" style="width:100%" />\

						</div>\

						<div class="bt-form-submit-btn">\

						<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.close+'</button>\

						<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title">'+lan.public.save+'</button>\

						</div>\

					</div>'

		});

		setTimeout(function(){

			$("#ReNameBtn").click(function(){

				_this.rename(fileName,1,callback);

			})			

			$("#newFileName").focus().keyup(function(e){

				if(e.keyCode == 13) $("#ReNameBtn").click();

			});

		},100)

		

	},

	get_file_body:function(path,callback){

		bt.send('GetFileBody','files/GetFileBody','path='+path,function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_file_body:function(path,data,encoding,callback){		

		var loading = bt.load(lan.site.saving_txt);

		bt.send('SaveFileBody','files/SaveFileBody',{path:path,data:data,encoding:encoding},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	del_file:function(path,callback)

	{

		bt.confirm({msg:lan.get('recycle_bin_confirm',[fileName]),title:lan.files.del_file},function(){

			loading = bt.load(lan.public.the);

			bt.send('del_file','files/DeleteFile','path='+path,function(rdata){

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		})		

	},

	del_dir:function(path,callback)

	{

		bt.confirm({msg:lan.get('recycle_bin_confirm_dir',[fileName]),title:lan.files.del_file},function(){

			loading = bt.load(lan.public.the);

			bt.send('DeleteDir','files/DeleteDir','path='+path,function(rdata){

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		})	

	},

	cut_file:function(fileName,callback) //裁剪

	{

		bt.set_cookie('cutFileName', fileName);

		bt.set_cookie('copyFileName', null);	

		bt.msg({msg:lan.files.mv_ok,icon:1,time:1})

		if(callback) callback(rdata);

	},

	copy_file:function(fileName,callback)

	{

		bt.set_cookie('cutFileName', null);

		bt.set_cookie('copyFileName', fileName);	

		bt.msg({msg:lan.files.copy_ok,icon:1,time:1})

		if(callback) callback(rdata);

	},

	paste_file:function(fileName,callback) //粘贴

	{		

		_this = this;

		path = _this.get_path();

		var copyName = bt.get_cookie('copyFileName');

		var cutName = bt.get_cookie('cutFileName');

		var filename = copyName;

		if(cutName != 'null' && cutName != undefined) filename=cutName;

		filename = filename.split('/').pop();

		

		bt.send('CheckExistsFiles','files/CheckExistsFiles',{dfile:path,filename:filename},function(rdata){

			if(rdata.length > 0){

				var tbody = '';

				for(var i=0;i<rdata.length;i++){

					tbody += '<tr><td>'+rdata[i].filename+'</td><td>'+bt.format_size(rdata[i].size)+'</td><td>'+bt.format_data(rdata[i].mtime)+'</td></tr>';

				}

				var mbody = '<div class="divtable"><table class="table table-hover" width="100%" border="0" cellpadding="0" cellspacing="0"><thead><th>'+lan.bt.filename+'</th><th>'+lan.bt.file_size+'</th><th>'+lan.bt.etime+'</th></thead>\

							<tbody>'+tbody+'</tbody>\

							</table></div>';

				bt.show_confirm(bt.files.file_conver_msg,mbody,function(){

					_this.paste_to(path,copyName,cutName,fileName,callback);

				})

			}else{

				_this.paste_to(path,copyName,cutName,fileName,callback);

			}

		})

	},

	paste_to:function(path,copyName,cutName,fileName,callback)

	{

		if (copyName != 'null' && copyName != undefined) {

			var loading =  bt.msg({msg:lan.files.copy_the,icon:16});		

			bt.send('CopyFile','files/CopyFile','sfile=' + copyName + '&dfile=' + path +'/'+ fileName,function(rdata){

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

			bt.set_cookie('copyFileName',null);

			bt.set_cookie('cutFileName',null);

			return;

		}

		

		if (cutName != 'null' && cutName != undefined) {

			var loading =  bt.msg({msg:lan.files.copy_the,icon:16});	

			bt.send('MvFile','files/MvFile','sfile=' + copyName + '&dfile=' + path +'/'+ fileName,function(rdata){

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			});

			bt.set_cookie('copyFileName',null);

			bt.set_cookie('cutFileName',null);

			return;

		}

	},

	zip:function(dirName,submits,callback)

	{

		_this = this;

		if(submits != undefined)

		{

			if(dirName.indexOf(',') == -1){

				tmp = $("#sfile").val().split('/');

				sfile = tmp[tmp.length-1];

			}else{

				sfile = dirName;

			}			

			dfile = $("#dfile").val();

			layer.closeAll();

			var loading = bt.load(lan.files.zip_the);

			bt.send('Zip','files/Zip','sfile=' + sfile + '&dfile=' + dfile + '&type=tar&path='+path, function(rdata) {

				loading.close();

				if(rdata == null || rdata == undefined){

					bt.msg({msg:lan.files.zip_ok,icon:1})

					if(callback) callback(rdata);

					return;

				}

				bt.msg(rdata);

				if(rdata.status) if(callback) callback(rdata);;

			});

			return;

		}

		var ext = '.zip';

		if(bt.os=='Linux') ext = '.tar.gz'; 

		

		param = dirName;

		if(dirName.indexOf(',') != -1){

			tmp = path.split('/')

			dirName = path + '/' + tmp[tmp.length-1]

		}		

		bt.open({

			type: 1,

			shift: 5,

			closeBtn: 2,

			area: '650px',

			title: lan.files.zip_title,

			content: '<div class="bt-form pd20 pb70">'

						+'<div class="line noborder">'

						+'<input type="text" class="form-control" id="sfile" value="' +param + '" placeholder="" style="display:none" />'

						+'<span>'+lan.files.zip_to+'</span><input type="text" class="bt-input-text" id="dfile" value="'+dirName + ext + '" placeholder="'+lan.files.zip_to+'" style="width: 75%; display: inline-block; margin: 0px 10px 0px 20px;" /><span class="glyphicon glyphicon-folder-open cursor" onclick="ChangePath(\'dfile\')"></span>'

						+'</div>'

						+'<div class="bt-form-submit-btn">'

						+'<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.close+'</button>'

						+'<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title"'+lan.files.file_menu_zip+'</button>'

						+'</div>'

					+'</div>'

		});

		

		setTimeout(function(){

			$("#dfile").change(function(){

				var dfile = bt.rtrim($(this).val(),'/');

				if(bt.check_zip(dfile)===-1)

				{

					dfile += ext;

					$(this).val(dfile)

				}

			});

			$("#ReNameBtn").click(function(){

				_this.zip(param,1,callback);

			})

		},100);

	},

	un_zip : function(fileName ,type ,callback) // type: zip|tar

	{	

		_this = this;

		if(type.length == 3){

			var sfile = encodeURIComponent($("#sfile").val());

			var dfile = encodeURIComponent($("#dfile").val());

			var password = encodeURIComponent($("#unpass").val());

			coding = $("select[name='coding']").val();

			layer.closeAll();

			var loading = bt.load(lan.files.unzip_the);

			bt.send('UnZip','files/UnZip','sfile=' + sfile + '&dfile=' + dfile +'&type=' + type + '&coding=' + coding + '&password=' + password, function(rdata) {

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			});

			return

		}		

		var path = bt.get_file_path(fileName);

		type = (type == 1) ? 'tar':'zip'

		var umpass = '';

		if(type == 'zip'){

			umpass = '<div class="line"><span class="tname">'+lan.files.zip_pass_title+'</span><input type="text" class="bt-input-text" id="unpass" value="" placeholder="'+lan.files.zip_pass_msg+'" style="width:330px" /></div>'

		}		

		bt.open({

			type: 1,

			shift: 5,

			closeBtn: 2,

			area: '490px',

			title: lan.files.unzip_title,

			content: '<div class="bt-form pd20 pb70">'

						+'<div class="line unzipdiv">'

						+'<span class="tname">'+lan.files.unzip_name+'</span><input type="text" class="bt-input-text" id="sfile" value="' +fileName + '" placeholder="'+lan.files.unzip_name_title+'" style="width:330px" /></div>'

						+'<div class="line"><span class="tname">'+lan.files.unzip_to+'</span><input type="text" class="bt-input-text" id="dfile" value="'+path + '" placeholder="'+lan.files.unzip_to+'" style="width:330px" /></div>' + umpass

						+'<div class="line"><span class="tname">'+lan.files.unzip_coding+'</span><select class="bt-input-text" name="coding">'

							+'<option value="UTF-8">UTF-8</option>'

							+'<option value="gb18030">GBK</option>'

						+'</select>'

						+'</div>'

						+'<div class="bt-form-submit-btn">'

						+'<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.close+'</button>'

						+'<button type="button" id="ReNameBtn" class="btn btn-success btn-sm btn-title" >'+lan.files.file_menu_unzip+'</button>'

						+'</div>'

					+'</div>'

		});		

		setTimeout(function(){

	

			$("#ReNameBtn").click(function(){

				_this.un_zip(fileName,type,callback);

			})

		},100);

	},

	show_img:function(fileName)

	{

		var imgUrl = '/download?filename='+fileName;

		bt.open({

			type:1,

			closeBtn: 2,

			title:false,

			area: '500px',

			shadeClose: true,

			content: '<div class="showpicdiv"><img width="100%" src="'+imgUrl+'"></div>'

		});

		$(".layui-layer").css("top", "30%");

	},

	get_files_bytes:function(fileName, fileSize)

	{

		window.open('/download?filename='+encodeURIComponent(fileName));

	},

	upload_files : function()

	{

		path = this.get_path();

		bt.open({

			type:1,

			closeBtn: 2,

			title:lan.files.up_title,

			area: ['500px','500px'], 

			shadeClose:false,

			content:'<div class="fileUploadDiv"><input type="hidden" id="input-val" value="'+path+'" />\

					<input type="file" id="file_input"  multiple="true" autocomplete="off" />\

					<button type="button"  id="opt" autocomplete="off">'+lan.files.up_add+'</button>\

					<button type="button" id="up" autocomplete="off" >'+lan.files.up_start+'</button>\

					<span id="totalProgress" style="position: absolute;top: 7px;right: 147px;"></span>\

					<span style="float:right;margin-top: 9px;">\

					<font>'+lan.files.up_coding+':</font>\

					<select id="fileCodeing" >\

						<option value="byte">'+lan.files.up_bin+'</option>\

						<option value="utf-8">UTF-8</option>\

						<option value="gb18030">GB2312</option>\

					</select>\

					</span>\

					<button type="button" id="filesClose" autocomplete="off" onClick="layer.closeAll()" >'+lan.public.close+'</button>\

					<ul id="up_box"></ul></div>'

		});

		UploadStart();

	},

	set_chmod:function(action,fileName,callback)

	{

		_this = this;

		if(action == 1){

			var chmod = $("#access").val();

			var chown = $("#chown").val();

			var data = 'filename='+ fileName+'&user='+chown+'&access='+chmod;

			var loadT =  bt.load(lan.public.config);

			bt.send('SetFileAccess','files/SetFileAccess',data,function(rdata){

				loadT.close();

				if(rdata.status) layer.closeAll();

				bt.msg(rdata);

				if(callback) callback(rdata);

			});

			return;

		}

		

		var toExec = fileName == lan.files.all?'Batch(3,1)':'_this.set_chmod(1,\''+fileName+'\',callback)';

		

		bt.send('GetFileAccess','files/GetFileAccess', 'filename='+fileName,function(rdata){			

			if(bt.os=='Linux')

			{

				bt.open({

					type:1,

					title: lan.files.set_auth + '['+fileName+']',

					area: '400px', 

					shadeClose:false,

					content:'<div class="setchmod bt-form ptb15 pb70">\

								<fieldset>\

									<legend>'+lan.files.file_own+'</legend>\

									<p><input type="checkbox" id="owner_r" />'+lan.files.file_read+'</p>\

									<p><input type="checkbox" id="owner_w" />'+lan.files.file_write+'</p>\

									<p><input type="checkbox" id="owner_x" />'+lan.files.file_exec+'</p>\

								</fieldset>\

								<fieldset>\

									<legend>'+lan.files.file_group+'</legend>\

									<p><input type="checkbox" id="group_r" />'+lan.files.file_read+'</p>\

									<p><input type="checkbox" id="group_w" />'+lan.files.file_write+'</p>\

									<p><input type="checkbox" id="group_x" />'+lan.files.file_exec+'</p>\

								</fieldset>\

								<fieldset>\

									<legend>'+lan.files.file_public+'</legend>\

									<p><input type="checkbox" id="public_r" />'+lan.files.file_read+'</p>\

									<p><input type="checkbox" id="public_w" />'+lan.files.file_write+'</p>\

									<p><input type="checkbox" id="public_x" />'+lan.files.file_exec+'</p>\

								</fieldset>\

								<div class="setchmodnum"><input class="bt-input-text" type="text" id="access" maxlength="3" value="'+rdata.chmod+'">'+lan.files.file_menu_auth+',\

								<span>'+lan.files.file_own+'\

								<select id="chown" class="bt-input-text">\

									<option value="www" '+(rdata.chown=='www'?'selected="selected"':'')+'>www</option>\

									<option value="mysql" '+(rdata.chown=='mysql'?'selected="selected"':'')+'>mysql</option>\

									<option value="root" '+(rdata.chown=='root'?'selected="selected"':'')+'>root</option>\

								</select></span></div>\

								<div class="bt-form-submit-btn">\

									<button type="button" class="btn btn-danger btn-sm btn-title" onclick="layer.closeAll()">'+lan.public.close+'</button>\

							        <button type="button" class="btn btn-success btn-sm btn-title" onclick="'+toExec+'" >'+lan.public.ok+'</button>\

						        </div>\

							</div>'

				});

				

				settimeout(function(){

					_this.on_linux_access();

					$("#access").keyup(function(){

						_this.on_linux_access();

					});

					

					$("input[type=checkbox]").change(function(){

						var idName = ['owner','group','public'];

						var onacc = '';

						for(var n=0;n<idName.length;n++){

							var access = 0;

							access += $("#"+idName[n]+"_x").prop('checked')?1:0;

							access += $("#"+idName[n]+"_w").prop('checked')?2:0;

							access += $("#"+idName[n]+"_r").prop('checked')?4:0;

							onacc += access;

						}

						$("#access").val(onacc);					

					});

				},100)

			}

		})

	},

	on_linux_access:function()

	{

		var access = $("#access").val();

		var idName = ['owner','group','public'];				

		for(var n=0;n<idName.length;n++){

			$("#"+idName[n]+"_x").prop('checked',false);

			$("#"+idName[n]+"_w").prop('checked',false);

			$("#"+idName[n]+"_r").prop('checked',false);

		}

		for(var i=0;i<access.length;i++){

			var onacc = access.substr(i,1);

			if(i > idName.length) continue;

			if(onacc > 7) $("#access").val(access.substr(0,access.length-1));

			switch(onacc){

				case '1':

					$("#"+idName[i]+"_x").prop('checked',true);

					break;

				case '2':

					$("#"+idName[i]+"_w").prop('checked',true);

					break;

				case '3':

					$("#"+idName[i]+"_x").prop('checked',true);

					$("#"+idName[i]+"_w").prop('checked',true);

					break;

				case '4':

					$("#"+idName[i]+"_r").prop('checked',true);

					break;

				case '5':

					$("#"+idName[i]+"_r").prop('checked',true);

					$("#"+idName[i]+"_x").prop('checked',true);

					break;

				case '6':

					$("#"+idName[i]+"_r").prop('checked',true);

					$("#"+idName[i]+"_w").prop('checked',true);

					break;

				case '7':

					$("#"+idName[i]+"_r").prop('checked',true);

					$("#"+idName[i]+"_w").prop('checked',true);

					$("#"+idName[i]+"_x").prop('checked',true);

					break;

			}

		}

	},

	on_win_access:function()

	{

	

	},

	get_right_click:function(type,path,name){

		_this = this;

		var displayZip = bt.check_zip(type);

		var options = {items:[

		  {text: lan.files.file_menu_copy, 	onclick: function() {_this.copy_file(path)}},

		  {text: lan.files.file_menu_mv, 	onclick: function() {_this.cut_file(path)}},

		  {text: lan.files.file_menu_rename, 	onclick: function() {_this.rename(path,name)}},

		  {text: lan.files.file_menu_auth, 	onclick: function() {_this.set_chmod(0,path)}},

		  {text: lan.files.file_menu_zip, onclick: function() {_this.zip(path)}}

		  

		]};

		if(type == "dir"){

			options.items.push({text: lan.files.file_menu_del, onclick: function() {_this.del_dir(path)}});

		}

		else if(isText(type)){

			options.items.push({text: lan.files.file_menu_edit, onclick: function() {bt.on_edit_file(0,path)}},{text: lan.files.file_menu_down, onclick: function() {_this.get_files_bytes(path)}},{text: lan.files.file_menu_del, onclick: function() {_this.del_file(path)}});

		}

		else if(displayZip != -1){

			options.items.push({text: lan.files.file_menu_unzip, onclick: function() {_this.un_zip(path,displayZip)}},{text: lan.files.file_menu_down, onclick: function() {_this.get_files_bytes(path)}},{text: lan.files.file_menu_del, onclick: function() {_this.del_file(path)}});

		}

		else if(isImage(type)){

			options.items.push({text: lan.files.file_menu_img, onclick: function() {_this.show_img(path)}},{text: lan.files.file_menu_down, onclick: function() {_this.get_files_bytes(path)}},{text: lan.files.file_menu_del, onclick: function() {_this.del_file(path)}});

		}

		else{

			options.items.push({text: lan.files.file_menu_down, onclick: function() {_this.get_files_bytes(path)}},{text: lan.files.file_menu_del, onclick: function() {_this.del_file(path)}});

		}

		return options;

	},

	get_dir_size:function(path,callback){

		if(!path) path = this.get_path();

		var loading = bt.load(lan.public.the);

		bt.send('GetDirSize','files/GetDirSize',{path:path},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	batch:function(type,access,callback)

	{

		_this = this;

		

		var el = document.getElementsByTagName('input');

		var len = el.length;

		var data='path='+path+'&type='+type;

		var name = 'data';

		

		var oldType = bt.get_cookie('BatchPaste');

		

		for(var i=0;i<len;i++){

			if(el[i].checked == true && el[i].value != 'on'){

				data += '&'+name+'='+el[i].value;

			}

		}

		

		if(type == 3 && access == undefined){

			_this.set_chmod(0,lan.files.all);

			return;

		}

		

		if(type < 3) bt.set_cookie('BatchSelected', '1');

		bt.set_cookie('BatchPaste',type);

		

		if(access == 1){

			var access = $("#access").val();

			var chown = $("#chown").val();

			data += '&access='+access+'&user='+chown;

			layer.closeAll();

		}

		if(type == 4){

			AllDeleteFileSub(data,path);

			bt.set_cookie('BatchPaste',oldType);

			return;

		}

		

		if(type == 5){

			var names = '';

			for(var i=0;i<len;i++){

				if(el[i].checked == true && el[i].value != 'on'){

					names += el[i].value + ',';

				}

			}

			_this.zip(names);

			return;

		}

			

		myloadT = bt.load("<div class='myspeed'>"+lan.public.the+"</div>");

		setTimeout(function(){getSpeed('.myspeed');},1000);

		bt.send('SetBatchData','files/SetBatchData',data,function(rdata){

			myloadT.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		})

	},

	download_file:function(action,callback)

	{

		path = bt.get_cookie('Path');	

		if(action == 1){

			var fUrl = $("#mUrl").val();

			fUrl = fUrl;

			fpath = $("#dpath").val();

			fname = $("#dfilename").val();

			layer.closeAll();

			loading = bt.load(lan.files.down_task);

			bt.send('DownloadFile','files/DownloadFile','path='+fpath+'&url='+fUrl+'&filename='+fname,function(rdata){

				loading.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			});

			return;

		}

		layer.open({

			type: 1,

			shift: 5,

			closeBtn: 2,

			area: '500px',

			title: lan.files.down_title,

			content: '<form class="bt-form pd20 pb70">\

						<div class="line">\

						<span class="tname">'+lan.files.down_url+':</span><input type="text" class="bt-input-text" name="url" id="mUrl" value="" placeholder="'+lan.files.down_url+'" style="width:330px" />\

						</div>\

						<div class="line">\

						<span class="tname ">'+lan.files.down_to+':</span><input type="text" class="bt-input-text" name="path" id="dpath" value="'+path+'" placeholder="'+lan.files.down_to+'" style="width:330px" />\

						</div>\

						<div class="line">\

						<span class="tname">'+lan.files.file_name+':</span><input type="text" class="bt-input-text" name="filename" id="dfilename" value="" placeholder="'+lan.files.down_save+'" style="width:330px" />\

						</div>\

						<div class="bt-form-submit-btn">\

						<button type="button" class="btn btn-danger btn-sm" onclick="layer.closeAll()">'+lan.public.close+'</button>\

						<button type="button" id="dlok" class="btn btn-success btn-sm dlok" onclick="DownloadFile(1)">'+lan.public.ok+'</button>\

						</div>\

					</form>'

		});

		fly("dlok");

		$("#mUrl").keyup(function(){

			durl = $(this).val()

			tmp = durl.split('/')

			$("#dfilename").val(tmp[tmp.length-1])

		});

	}

}

// 任务管理器

bt.crontab = {

	// 执行计划任务请求

	start_task_send:function(id,name){

		var that = this,loading = bt.load();

		bt.send('start_task_send','crontab/StartTask',{id:id},function (rdata) {

			loading.close();

			rdata.time = 2000;

			bt.msg(rdata);

		});

	},

	

	// 删除计划任务

	del_task_send:function(id,name){

		bt.show_confirm('删除['+ name +']','您确定要删除该任务吗?',function(){

			bt.send('del_task_send','crontab/DelCrontab',{id:id},function (rdata) {

				loading.close();

				rdata.time = 2000;

				bt.msg(rdata);

				that.get_crontab_list();

			});

		});

	},

	

	// 设置计划任务状态

	set_crontab_status:function(id,status,callback){

		var that = this,loading = bt.load();

		bt.confirm({title:'提示',msg:status?'计划任务暂停后将无法继续运行,您真的要停用这个计划任务吗?':'该计划任务已停用,是否要启用这个计划任务?'},function () {

			bt.send('set_crontab_status','crontab/set_cron_status',{id:id},function (rdata) {

				loading.close();

				if(callback) callback(rdata)

			});

		});

	},

	

	// 编辑计划任务脚本

	edit_crontab_file:function(echo){

		bt.pub.on_edit_file(0,'/www/server/cron/'+ echo);

	},



	// 编辑计划任务

	edit_crontab:function(id,data){

		var that = this,loading = bt.load('提交数据中...');

		bt.send('edit_crontab','crontab/modify_crond',data,function(rdata){

			loading.close();

			if(rdata.status){

				// that.get_crontab_list();

				layer.msg(rdata.msg,{icon:1});

			}else{

				layer.msg(rdata.msg,{icon:2});

			}

		});

	},

	

	// 获取计划任务日志

	get_logs_crontab:function(id,name){

		var that = this;

		bt.send('get_logs_crontab','crontab/GetLogs',{id:id},function (rdata) {

			if(!rdata.status) {

				rdata.time = 1000;

				bt.msg(rdata);

			}else{

				bt.open({

					type:1,

					title:'查看日志-['+name+']',

					area: ['700px','520px'], 

					shadeClose:false,

					closeBtn:1,

					content:'<div class="setchmod bt-form pd20 pb70">'

							+'<pre class="crontab-log" style="overflow: auto; border: 0px none; line-height:28px;padding: 15px; margin: 0px; height: 405px; background-color: rgb(51,51,51);color:#f1f1f1;font-family: \"微软雅黑\"">'+ (rdata.msg == '' ? '当前日志为空':rdata.msg) +'</pre>'

							+'<div class="bt-form-submit-btn" style="margin-top: 0px;">'

							+'<button type="button" class="layui-btn layui-btn-sm" onclick="bt.crontab.del_logs_crontab('+id+')">'+lan.public.empty+'</button>'

							+'<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" onclick="layer.closeAll()">'+lan.public.close+'</button>'

							+'</div>'

							+'</div>'

				})

				setTimeout(function () {

					var div = document.getElementsByClassName('crontab-log')[0]

					div.scrollTop  = div.scrollHeight;

				},200);

			}

		})

	},

	

	// 删除计划任务日志

	del_logs_crontab:function(id,name){

		var that = this,loading = bt.load();

		bt.send('del_logs_crontab','crontab/DelLogs',{id:id},function (rdata) {

			loading.close();

			layer.closeAll();

			rdata.time = 2000;

			bt.msg(rdata);

		});

	},

	

	// 获取计划任务列表

	get_crontab_list:function(status,callback){

		var that = this;

		 var loading = bt.load();

		bt.send('get_crontab_list','crontab/GetCrontab',{},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		});

	},

	

	// 获取站点和备份位置信息

	get_data_list:function(type,name){

		var that = this;

		bt.send('get_data_list','crontab/GetDataList',{type:type},function(rdata){

			that.backupsList.siteList = [{'name': 'ALL','ps':'所有'}]

			that.backupsList.optList =[{'name':'服务器磁盘','value':'localhost'}]

			that.backupsList.siteList = that.backupsList.siteList.concat(rdata.data);

			that.backupsList.optList = that.backupsList.optList.concat(rdata.orderOpt);

			that.initFrom["crontab-name"] = name + "["+ that.backupsList.siteList[that.initFrom['crontab-site']].name +"]";

			that.insert_control_from(that.initFrom['crontab-submit']);

		});

	},

	

	// 添加计划任务请求

	add_control_send:function(data){

		var that = this,loading = bt.load('提交数据中...');

		bt.send('addCrontab','crontab/AddCrontab',data,function(rdata){

			loading.close();

			if(rdata.status){

				that.insert_control_from(true,true);

				that.get_crontab_list();

				layer.msg(rdata.msg,{icon:1});

			}else{

				layer.msg(rdata.msg,{icon:2});

			}

		});

	},

	get_crontab_find:function(id,callback){

		bt.send('get_crontab_find','crontab/get_crontab_find',{id:id},function(rdata){

			if(callback) callback(rdata);

		})

	}



}





bt.config = 

{

	close_panel:function(callback)

	{

		layer.confirm(lan.config.close_panel_msg,{title:lan.config.close_panel_title,closeBtn:2,icon:13,cancel:function(){

			if(callback) callback(false);

		}}, function() {

			loading = bt.load(lan.public.the);

			bt.send('ClosePanel','config/ClosePanel',{},function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		},function(){

			if(callback) callback(false);

		});

	},

	set_auto_update:function(callback)

	{

		loading = bt.load(lan.public.the);

		bt.send('AutoUpdatePanel','config/AutoUpdatePanel',{},function(rdata){

			loading.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		})

	},

	sync_data:function(callback)

	{

		var loadT = bt.load(lan.config.config_sync);

		bt.send('syncDate','config/syncDate',{},function(rdata){

			loadT.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		});

	},

	save_config:function(data,callback)

	{

		loading = bt.load(lan.config.config_save);

		bt.send('setPanel','config/setPanel',data,function(rdata){

			loading.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		});

	},

	set_template:function(template,callback)

	{		

		var loadT = bt.load(lan.public.the);

		bt.send('SetTemplates','config/SetTemplates',{templates:template},function(rdata){

			loadT.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		});

	},

	set_panel_ssl:function(status,callback)

	{

		var msg = status?lan.config.ssl_close_msg:'<a style="font-weight: bolder;font-size: 16px;">'+lan.config.ssl_open_ps+'</a><li style="margin-top: 12px;color:red;">'+lan.config.ssl_open_ps_1+'</li><li>'+lan.config.ssl_open_ps_2+'</li><li>'+lan.config.ssl_open_ps_3+'</li><p style="margin-top: 10px;"><input type="checkbox" id="checkSSL" /><label style="font-weight: 400;margin: 3px 5px 0px;" for="checkSSL">'+lan.config.ssl_open_ps_4+'</label><a target="_blank" class="btlink" href="https://www.bt.cn/bbs/thread-4689-1-1.html" style="float: right;">'+lan.config.ssl_open_ps_5+'</a></p>';

		layer.confirm(msg,{title:lan.config.ssl_title,closeBtn:2,icon:3,area:'550px',cancel:function(){

			if(callback) {

				if(status == 0){

					callback(false);

				}

				else{

					callback(true);

				}

			}

		}},function(){

			if(window.location.protocol.indexOf('https') == -1){

				if(!$("#checkSSL").prop('checked')){					

					bt.msg({msg:lan.config.ssl_ps,icon:2});

					if(callback)  callback(false);

				}

			}

			var loadT = bt.load(lan.config.ssl_msg);

			bt.send('SetPanelSSL','config/SetPanelSSL',{},function(rdata){

				loadT.close();

				bt.msg(rdata);

				if(callback)  callback(rdata);

			})			

		},function(){

			if(callback) {

				if(status == 0){

					callback(false);

				}

				else{

					callback(true);

				}

			}

		});

	},

	get_panel_ssl:function()

	{

		_this = this;

		loading = bt.load('正在获取证书信息...');

		bt.send('GetPanelSSL','config/GetPanelSSL',{},function(cert){

			loading.close();

			var certBody = '<div class="tab-con">\

				<div class="myKeyCon ptb15">\

					<div class="ssl-con-key pull-left mr20">密钥(KEY)<br>\

						<textarea id="key" class="bt-input-text">'+cert.privateKey+'</textarea>\

					</div>\

					<div class="ssl-con-key pull-left">证书(PEM格式)<br>\

						<textarea id="csr" class="bt-input-text">'+cert.certPem+'</textarea>\

					</div>\

					<div class="ssl-btn pull-left mtb15" style="width:100%">\

						<button class="btn btn-success btn-sm" id="btn_submit">保存</button>\

					</div>\

				</div>\

				<ul class="help-info-text c7 pull-left">\

					<li>粘贴您的*.key以及*.pem内容,然后保存即可<a href="http://www.bt.cn/bbs/thread-704-1-1.html" class="btlink" target="_blank">[帮助]</a>。</li>\

					<li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt</li>\

				</ul>\

			</div>'

			bt.open({

				type: 1,

				area: "600px",

				title: '自定义面板证书',

				closeBtn: 2,

				shift: 5,

				shadeClose: false,

				content:certBody

			});

			

			$("#btn_submit").click(function(){

				key = $('#key').val();

				csr = $('#csr').val();

				_this.set_panel_ssl({privateKey:key,certPem:csr});

			})

		})

	},

	set_panel_ssl:function(data,callback)

	{		

		var loadT = bt.load(lan.config.ssl_msg);

		bt.send('SavePanelSSL','config/SavePanelSSL',data,function(rdata){

			loadT.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		})

	},

	set_username:function(type)

	{

		if(type==1)

		{

			if(p1 == "" || p1.length < 3) {

				bt.msg({msg:lan.bt.user_len,icon:2})

				return;

			}

			if(p1 != p2) {

				bt.msg({msg:lan.bt.user_err_re,icon:2})

				return;

			}

			var checks = ['admin','root','admin123','123456'];

			if($.inArray(p1,checks)){

				bt.msg({msg:'禁止使用常用用户名!',icon:2})

				return;

			}

			bt.send('setUsername','config/setUsername',{username1:p1,username2:p2},function(rdata){

				if(rdata.status) {

					layer.closeAll();					

					$("input[name='username_']").val(p1)

				}

				bt.msg(rdata);

			})

			return;

		}

		bt.open({

			type: 1,

			area: "290px",

			title: lan.bt.user_title,

			closeBtn: 2,

			shift: 5,

			shadeClose: false,

			content: "<div class='bt-form pd20 pb70'><div class='line'><span class='tname'>"+lan.bt.user+"</span><div class='info-r'><input class='bt-input-text' type='text' name='password1' id='p1' value='' placeholder='"+lan.bt.user_new+"' style='width:100%'/></div></div><div class='line'><span class='tname'>"+lan.bt.pass_re+"</span><div class='info-r'><input class='bt-input-text' type='text' name='password2' id='p2' value='' placeholder='"+lan.bt.pass_re_title+"' style='width:100%'/></div></div><div class='bt-form-submit-btn'><button type='button' class='btn btn-danger btn-sm' onclick=\"layer.closeAll()\">"+lan.public.close+"</button> <button type='button' class='btn btn-success btn-sm' onclick=\"bt.config.set_username(1)\">"+lan.public.edit+"</button></div></div>"

		})

	},

	set_password:function(type){

		if(type == 1) {

			p1 = $("#p1").val();

			p2 = $("#p2").val();

			if(p1 == "" || p1.length < 8) {			

				bt.msg({msg:lan.bt.pass_err_len,icon:2})

				return

			}

			

			//准备弱口令匹配元素

			var checks = ['admin888','123123123','12345678','45678910','87654321','asdfghjkl','password','qwerqwer'];

			pchecks = 'abcdefghijklmnopqrstuvwxyz1234567890';

			for(var i=0;i<pchecks.length;i++){

				checks.push(pchecks[i]+pchecks[i]+pchecks[i]+pchecks[i]+pchecks[i]+pchecks[i]+pchecks[i]+pchecks[i]);

			}

			

			//检查弱口令

			cps = p1.toLowerCase();

			var isError = "";

			for(var i=0;i<checks.length;i++){

				if(cps == checks[i]){

					isError += '['+checks[i]+'] ';

				}

			}			

			if(isError != ""){

				bt.msg({msg:lan.bt.pass_err+isError,icon:2})

				return;

			}			

			

			if(p1 != p2) {

				bt.msg({msg:lan.bt.pass_err_re,icon:2})

				return

			}

			bt.send('setPassword','config/setPassword',{password1:p1,password2:p2},function(rdata){

				layer.closeAll();

				bt.msg(rdata);

			})		

			return

		}

		layer.open({

			type: 1,

			area: "290px",

			title: lan.bt.pass_title,

			closeBtn: 2,

			shift: 5,

			shadeClose: false,

			content: "<div class='bt-form pd20 pb70'><div class='line'><span class='tname'>"+lan.public.pass+"</span><div class='info-r'><input class='bt-input-text' type='text' name='password1' id='p1' value='' placeholder='"+lan.bt.pass_new_title+"' style='width:100%'/></div></div><div class='line'><span class='tname'>"+lan.bt.pass_re+"</span><div class='info-r'><input class='bt-input-text' type='text' name='password2' id='p2' value='' placeholder='"+lan.bt.pass_re_title+"' style='width:100%' /></div></div><div class='bt-form-submit-btn'><span style='float: left;' title='"+lan.bt.pass_rep+"' class='btn btn-default btn-sm' onclick='randPwd(10)'>"+lan.bt.pass_rep_btn+"</span><button type='button' class='btn btn-danger btn-sm' onclick=\"layer.closeAll()\">"+lan.public.close+"</button> <button type='button' class='btn btn-success btn-sm' onclick=\"bt.config.set_password(1)\">"+lan.public.edit+"</button></div></div>"

		});

	}	

}



bt.system = {	

	get_total:function(callback){

		bt.send('GetSystemTotal','system/GetSystemTotal',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_net:function(callback){

		bt.send('GetNetWork','system/GetNetWork',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_disk_list:function(callback){

		bt.send('GetDiskInfo','system/GetDiskInfo',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	re_memory : function(callback){

		bt.send('ReMemory','system/ReMemory',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

    check_update: function (callback, check) {

        var data = {};

        if (check == undefined) data = { check: true };

        if (check === false) data = {}

        if (check) var load = bt.load(lan.index.update_get);

        bt.send('UpdatePanel', 'ajax/UpdatePanel', data ,function(rdata){

            if (check) load.close();

			if(callback) callback(rdata);

		})

	},

    to_update: function (callback){

		var load = bt.load(lan.index.update_the);

        bt.send('UpdatePanel', 'ajax/UpdatePanel', { toUpdate: 'yes' }, function (rdata) {

            load.close();

            if (callback) callback(rdata);

		})

	},

	reload_panel:function(callback){

		bt.send('ReWeb','system/ReWeb',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	rep_panel:function(callback){

		var loading = bt.load(lan.index.rep_panel_the)

		bt.send('RepPanel','system/RepPanel',{},function(rdata){

			loading.close();			

			if(rdata){

				if(callback) callback({status:rdata,msg:lan.index.rep_panel_ok});

				bt.system.reload_panel();				

			}

			

		})

	},

	get_warning:function(callback){

		bt.send('GetWarning','ajax/GetWarning',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	root_reload:function(callback){

		bt.send('RestartServer','system/RestartServer',{},function(rdata){

			if(callback) callback(rdata);

		})

	}	

}



bt.control = {

	get_status:function(callback){

		loading = bt.load(lan.public.read);

		bt.send('GetControl','control/SetControl',{type:1},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_control:function(type,day,callback){			

		loadT = bt.load(lan.public.the);

		bt.send('SetControl','config/SetControl',{type:type,day:day},function(rdata){

			loadT.close();

			bt.msg(rdata);

			if(callback) callback(rdata);

		})

	},

	clear_control:function(callback){

		bt.confirm({msg:lan.control.close_log_msg,title:lan.control.close_log},function(){

			loadT = bt.load(lan.public.the);

			bt.send('SetControl','config/SetControl',{type:'del'},function(rdata){

				loadT.close();

				bt.msg(rdata);

				if(callback) callback(rdata);

			})

		})

	},

	get_data:function(type,start,end,callback){

		action = '';

		switch(type)

		{

			case 'cpu': //cpu和内存一起获取

				action='GetCpuIo';

				break;

			case 'disk':

				action='GetDiskIo';

				break;

			case 'net':

				action='GetNetWorkIo';

				break;

			case 'load':

				action='get_load_average';

				break;

		}

		if(!action) bt.msg(lan.get('lack_param','type'));

		bt.send(action,'ajax/'+action,{start:start,end:end},function(rdata){

			if(callback) callback(rdata,type);

		})

	},

	format_option:function(obj,type){

		option = {

			tooltip: {

				trigger: 'axis',

				axisPointer: {

					type: 'cross'

				},

				formatter: obj.formatter

			},

			xAxis: {

				type: 'category',

				boundaryGap: false,

				data: obj.tData,

				axisLine:{

					lineStyle:{

						color:"#666"

					}

				}

			},

			yAxis: {

				type: 'value',

				name: obj.unit,

				boundaryGap: [0, '100%'],

				min:0,

				splitLine:{

					lineStyle:{

						color:"#ddd"

					}

				},

				axisLine:{

					lineStyle:{

						color:"#666"

					}

				}

			},

			dataZoom: [{

				type: 'inside',

				start: 0,

				zoomLock:true

			}, {

				start: 0,

				handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',

				handleSize: '80%',

				handleStyle: {

					color: '#fff',

					shadowBlur: 3,

					shadowColor: 'rgba(0, 0, 0, 0.6)',

					shadowOffsetX: 2,

					shadowOffsetY: 2

				}

			}],

			series: []

		};		

		if(obj.legend) option.legend = obj.legend;		

		if(obj.dataZoom) option.dataZoom = obj.dataZoom;

		

		for (var i=0;i<obj.list.length;i++) 

		{

			var item = obj.list[i];

			series = {

				name : item.name,

				type : item.type?item.type:'line',

				smooth : item.smooth ? item.smooth : true,

				symbol : item.symbol ? item.symbol : 'none',

				showSymbol:item.showSymbol?item.showSymbol:false,

				sampling : item.sampling ? item.sampling : 'average',

				areaStyle : item.areaStyle ? item.areaStyle : {},

				lineStyle : item.lineStyle ? item.lineStyle : {},

				itemStyle : item.itemStyle ? item.itemStyle : { normal:{ color: 'rgb(0, 153, 238)'}},

				symbolSize:6,

				symbol: 'circle',

				data :  item.data						

			}

			option.series.push(series);

		}

		return option;

	}

}







bt.firewall = {

	get_log_list:function(page,search,callback){		

		if(page == undefined) page = 1

		search = search == undefined ? '':search;

		var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order'):'';

		

		var data = 'tojs=firewall.get_log_list&table=logs&limit=10&p='+page+'&search='+search + order; 

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		})

	},	

	get_list:function(page,search,callback){

		if(page == undefined) page = 1

		search = search == undefined ? '':search;

		var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order'):'';

		

		var data = 'tojs=firewall.get_list&table=firewall&limit=10&p='+page+'&search='+search + order; 

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_logs_size:function(callback){

		if(bt.os=='Linux'){

			bt.files.get_dir_size('/www/wwwlogs',function(rdata){

				if(callback) callback(rdata);

			})

		}

	},

	get_ssh_info : function(callback){

		bt.send('GetSshInfo','firewall/GetSshInfo',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_mstsc : function(port,callback){

		bt.confirm({msg:lan.firewall.ssh_port_msg,title:lan.firewall.ssh_port_title},function(){

			loading = bt.load(lan.public.the);

			bt.send('SetSshPort','firewall/SetSshPort',{port:port},function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		})

	},

	ping : function(status,callback){

		var msg = status==0?lan.firewall.ping_msg:lan.firewall.ping_un_msg;

		layer.confirm(msg,{title:lan.firewall.ping_title,cancel:function(){

			if(callback) callback(-1); //取消

		}},function(){

			loading = bt.load(lan.public.the);

			bt.send('SetPing','firewall/SetPing',{status:status},function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		},function(){

			if(callback) callback(-1); //关闭

		})

	},

	set_mstsc_status : function(status,callback){

		var msg = status==1?lan.firewall.ssh_off_msg:lan.firewall.ssh_on_msg;

		layer.confirm(msg,{closeBtn:2,title:lan.public.warning,cancel:function(){			

			if(callback) callback(-1); //取消

		}},function(){

			loading = bt.load(lan.public.the);

			bt.send('SetSshStatus','firewall/SetSshStatus',{status:status},function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		},function(){

			if(callback) callback(-1); //关闭

		})

	},

	add_accept_port : function(type,port,ps,callback){

		var action = "AddDropAddress";

		if(type == 'port'){

			ports = port.split(':');

			for(var i=0;i<ports.length;i++){

				if(!bt.check_port(ports[i])){

					layer.msg(lan.firewall.port_err,{icon:5});

					return;

				}

			}

			action = "AddAcceptPort";

		}		

		

		if(ps.length < 1){

			layer.msg(lan.firewall.ps_err,{icon:2});

			return -1;

		}

		loading = bt.load();

		bt.send(action,'firewall/'+action,{port:port,type:type,ps:ps},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})		

	},

	del_accept_port : function(id,port,callback){

		var action = "DelDropAddress";

		if(port.indexOf('.') == -1){

			action = "DelAcceptPort";

		}		

		bt.confirm({msg:lan.get('confirm_del',[port]),title: lan.firewall.del_title}, function(index) {

			var loadT = bt.load(lan.public.the_del);

			bt.send(action,'firewall/'+action,{id:id,port:port},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			})

		});

	},

	clear_logs_files:function(callback){

		var loadT = bt.load(lan.firewall.close_the);

        bt.send('CloseLogs', 'files/CloseLogs', {}, function (rdata) {

			if(callback) callback(rdata);

		})

	},

	clear_logs : function(callback){

		bt.confirm({msg:lan.firewall.close_log_msg,title:lan.firewall.close_log},function(){

			var loadT = bt.load(lan.firewall.close_the);

            bt.send('delClose', 'ajax/delClose', {}, function (rdata) {

                loadT.close();

                if (callback) {

                    callback(rdata);

                } else {

                    bt.msg(rdata)

                }

			})

		})

	}	

}



bt.soft = {

	pub :{

		wxpayTimeId : 0

	},

	php : {

		get_config:function(version,callback){ //获取禁用函数,扩展列表

			var loading = bt.load();

			bt.send('GetPHPConfig','ajax/GetPHPConfig',{version:version},function(rdata){				

				loading.close();

				if(callback) callback(rdata);

			})

		},

		get_limit_config:function(version,callback){ //获取超时限制,上传限制

			var loading = bt.load();

			bt.send('get_php_config','config/get_php_config',{version:version},function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		},

		get_php_config:function(version,callback){

			var loading = bt.load();

			bt.send('GetPHPConf','config/GetPHPConf',{version:version},function(rdata){				

				loading.close();

				if(callback) callback(rdata);

			})			

		},

		install_php_lib:function(version,name,title,callback){

			bt.confirm({msg:lan.soft.php_ext_install_confirm.replace('{1}',name)},function(){

				name = name.toLowerCase();

				var loadT = bt.load(lan.soft.add_install);

				bt.send('InstallSoft','files/InstallSoft',{name:name,version:version,type:"1"},function(rdata){

					loadT.close();				

					if(callback) callback(rdata);

					bt.msg(rdata);

				});			

				fly("bi-btn");			

			});

		},

		un_install_php_lib:function(version,name,title,callback){

			bt.confirm({msg:lan.soft.php_ext_uninstall_confirm.replace('{1}',name)},function(){

				name = name.toLowerCase();

				var data = 'name='+name+'&version='+version;

				var loadT = bt.load();

				bt.send('UninstallSoft','files/UninstallSoft',{name:name,version:version},function(rdata){

					loadT.close();

					if(callback) callback(rdata);

					bt.msg(rdata);

				});

			});

		},

		set_upload_max:function(version,max,callback){			

			var loadT =  bt.load(lan.soft.the_save);

			bt.send('setPHPMaxSize','config/setPHPMaxSize',{version:version,max:max},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			})

		},

		set_php_timeout:function(version,time,callback){

			var loadT = bt.load(lan.soft.the_save);

			bt.send('setPHPMaxTime','config/setPHPMaxTime',{version:version,time:time},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			});

		},		

		disable_functions:function(version,fs,callback){		

			var loadT = bt.load();

			bt.send('setPHPDisable','config/setPHPDisable',{version:version,disable_functions:fs},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			});

		},

		get_fpm_config:function(version,callback){

			var loadT = bt.load();

			bt.send('getFpmConfig','config/getFpmConfig',{version:version},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			})

		},

		set_fpm_config:function(version,data,callback){

			var loadT = bt.load();

			data.version = version;

			bt.send('setFpmConfig','config/setFpmConfig',data,function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			})			

		},

		get_php_status:function(version,callback){

			var loadT = bt.load();

			bt.send('GetPHPStatus','ajax/GetPHPStatus',{version:version},function(rdata){

				loadT.close();

				if(callback) callback(rdata);

			})

		},

		get_fpm_logs:function(version,callback){

			var loadT = bt.load();

			bt.send('GetFpmLogs','ajax/GetFpmLogs',{version:version},function(logs){

				loadT.close();

				if(logs.status !== true){

					logs.msg = '';

				}

				if (logs.msg == '') logs.msg = '当前没有fpm日志.';

				if(callback) callback(logs);

			})		

		},

		get_slow_logs:function(version,callback){

			var loadT = bt.load();

			bt.send('GetFpmSlowLogs','ajax/GetFpmSlowLogs',{version:version},function(logs){

				loadT.close();

				if(logs.status !== true){

					logs.msg = '';

				}

				if (logs.msg == '') logs.msg = '当前没有慢日志.';

				if(callback) callback(logs);

			})

		}

	},

	redis : {

		get_redis_status:function(callback){

			var loadT = bt.load();

			bt.send('GetRedisStatus','ajax/GetRedisStatus',{},function(rdata){	

				loadT.close();

				if(callback) callback(rdata);

			});

		}

	},

	pro : {		

		conver_unit:function(name){

			var unit= '';

			switch (name){

				case "year":

					unit = "年";

					break;

				case "month":

					unit = "个月";

					break;

				case "day":

					unit = "天";

					break;

				case "1":

					unit = "1个月";

					break;

				case "3":

					unit = "3个月";

					break;

				case "6":

					unit = "6个月";

					break;

				case "12":

					unit = "1年";

					break;

				case "24":

					unit = "2年";

					break;

				case "36":

					unit = "3年";

					break;

				case "999":

					unit = "永久";

					break;

			}

			return unit;

		},

		get_product_discount_by:function(pluginName,callback){

			if(pluginName){

				bt.send('get_plugin_price','auth/get_plugin_price',{pluginName:pluginName},function(rdata){					

					if(callback) callback(rdata)

				})

			}

			else{

				bt.send('get_product_discount_by','auth/get_product_discount_by',{},function(rdata){					

					if(callback) callback(rdata)

				})

			}

			

		},

		get_plugin_coupon:function(pid,callback){

            bt.send('check_pay_status','auth/check_pay_status',{id:pid},function(rdata){

				if(callback) callback(rdata);

			})

		},

		get_re_order_status:function(callback){

			bt.send('get_re_order_status','auth/get_re_order_status',{},function(rdata){

				if(callback) callback(rdata);

			})

		},

		get_voucher:function(pid,callback){

			if(pid){

				bt.send('get_voucher_plugin','auth/get_voucher_plugin',{pid:pid},function(rdata){

					if(callback) callback(rdata);

				})			

			}

			else{

				bt.send('get_voucher','auth/get_voucher',{},function(rdata){

					if(callback) callback(rdata);

				})

			}			

		},

		create_order_voucher:function(pid,code,callback){

			var loading =  bt.load();

			if(pid){

				bt.send('create_order_voucher_plugin','auth/create_order_voucher_plugin',{pid:pid,code:code},function(rdata){

					loading.close();

					if(callback) callback(rdata);

					bt.msg(rdata);

				})

			}

			else{

				bt.send('create_order_voucher','auth/create_order_voucher',{code:code},function(rdata){

					loading.close();

					if(callback){ 

						callback(rdata);

					}else{

						bt.soft.pro.update();

					}

				})

			}

		},

		create_order:function(pid,cycle,callback){

			if(pid){				

				bt.send('get_buy_code','auth/get_buy_code',{pid:pid,cycle:cycle},function(rdata){

					if(callback) callback(rdata);

				})

			}

			else{

				bt.send('create_order','auth/create_order',{cycle:cycle},function(rdata){

					if(callback) callback(rdata);

				})

			}

		}

	},

	updata_pro:function(){

		bt.pub.get_user_info(function(rdata){

			if(!rdata.status)

			{

				bt.pub.bind_btname(0,function(rdata){

					if(rdata.status) bt.soft.updata_pro();

				})

				return;

			}			

			var payhtml = '<div class="libPay" style="padding:15px 30px 30px 30px">\

					<div class="libpay-con">\

					</div>\

					<p style="position:absolute;bottom:17px;left:0;width:100%;text-align:center;color:red">注:如需购买多台永久授权,请登录宝塔官网购买。<a class="btlink" href="https://www.bt.cn/download/linuxpro.html#price" target="_blank">去宝塔官网</a></p>\

				</div>';

		

			bt.open({

				type: 1,

				title: '升级专业版,所有插件,免费使用',

				area: ['616px','540px'],

				closeBtn: 2,

				shadeClose: false,

				content:payhtml

			});

			setTimeout(function(){

				bt.soft.get_product_discount('',0);

				$(".pay-btn-group > li").click(function(){

					$(this).addClass("active").siblings().removeClass("active");

				});

			},100)

		})

	},

	re_plugin_pay:function(pluginName,pid,type){

		bt.pub.get_user_info(function(rdata){

			if(!rdata.status)

			{

				bt.pub.bind_btname(0,function(rdata){

					if(rdata.status) bt.soft.re_plugin_pay(pluginName,pid,type);

				})

				return;

			}	

			var txt = '购买';

			if(type) txt = '续费';

			var payhtml = '<div class="libPay" style="padding:15px 30px 30px 30px">\

					<div class="libPay-item f14 plr15 libPay-select">\

						<div class="li-tit c3">类型</div>\

						<div class="li-con c6">\

							<ul class="li-c-item">\

								<li class="active"><span class="item-name pull-left">'+pluginName+'</span><span class="item-info f12 pull-right c7">1款插件</span></li>\

								<li><span class="item-name">升级为专业版</span><span class="item-info f12 pull-right c7">所有插件免费使用</span></li>\

							</ul>\

							<p class="pro-info" style="position:absolute;top:151px;left:42px;color: #FF7301;font-size: 12px;display:none">(专业版过期了需要续费后才能登陆使用或者进SSH执行免费版升级命令来切换成免费版)</p>\

						</div>\

					</div>\

					<div class="libpay-con">\

					</div>\

				</div>';

				

			layer.open({

				type: 1,

				title: txt + pluginName,

				area: ['616px','680px'],

				closeBtn: 2,

				shadeClose: false,

				content:payhtml

			});

			setTimeout(function(){

				bt.soft.get_product_discount(pluginName,pid);

				$(".li-c-item li").click(function(){

					var i = $(this).index();

					$(this).addClass("active").siblings().removeClass("active");

					if(i==0){

						bt.soft.get_product_discount(pluginName,pid);

						$(".pro-info").hide();

					}

					else{

						bt.soft.get_product_discount('',0);

						$(".pro-info").show();

					}

				});

				$(".pay-btn-group > li").click(function(){

					$(this).addClass("active").siblings().removeClass("active");

				});

			},100)

		})

	},

	get_voucher_list:function(pid){

		$("#couponlist").html("<div class='cloading'>加载中,请稍后</div>");

		bt.soft.pro.get_voucher(pid,function(rdata){

		

			if(rdata !=null && rdata.length>0){

				var con = '';

				var len = rdata.length;

				for(var i=0; i<len; i++){

					if(rdata[i].status !=1){

						var cyc = rdata[i].cycle+bt.soft.pro.conver_unit(rdata[i].unit);

						if(rdata[i].cycle == 999){

							cyc = "永久"

						}

						con += '<li class="pay-cycle-btn" data-code="'+rdata[i].code+'"><span>'+cyc+'</span></li>';

					}

				}

				$("#couponlist").html('<ul class="pay-btn-group">'+con+'</ul>');

				$(".pay-btn-group > li").click(function(){

					$(this).addClass("active").siblings().removeClass("active");

					$(".paymethod-submit button").css({"background-color":"#20a53a","border-color":"#20a53a"});

				});

				$(".paymethod-submit button").click(function(){

					var code = $("#couponlist .pay-btn-group .active").attr("data-code");

					if(code == undefined){

						layer.msg("请选择代金券");

					}

					else{						

						bt.soft.pro.create_order_voucher(pid,code,function(rdata){

							layer.closeAll();							

							bt.set_cookie('force',1);

							if(soft) soft.flush_cache();

							bt.msg(rdata);

						});

					}

				})

			}

			else{

				$("#couponlist").html("<p class='text-center' style='margin-top:70px'>暂无代金券</p>");

			}

		})

	},

	get_rscode:function(pid,price,sprice,cycle){

		$(".sale-price").text(price);

		if(price == sprice){

			$(".cost-price").text(sprice+'元').hide();

		}

		else{

			$(".cost-price").text(sprice+'元').show();

		}

		$(".pay-wx").html('<span class="loading">加载中,请稍后</span>');

		$(".libPay").append('<div class="payloadingmask" style="height:100%;width:100%;position:absolute;top:0;left:0;z-index:1"></div>');

		bt.soft.pro.create_order(pid,cycle,function(rdata){

			$(".payloadingmask").remove();

			if(rdata.status === false){

				bt.set_cookie('force',1);

				if(soft) soft.flush_cache();

				layer.msg(rdata.msg,{icon:2});

				return;

			}

			$(".pay-wx").html('');

			$(".pay-wx").qrcode(rdata.msg);

            clearInterval(bt.soft.pub.wxpayTimeId);

            if (pid) {

                bt.soft.pub.wxpayTimeId = setInterval(function () {

                    bt.soft.pro.get_plugin_coupon(pid,function (rdata) {

                        if (rdata.status) {

                            layer.closeAll();

                            clearInterval(bt.soft.pub.wxpayTimeId);

                            bt.msg({ msg: "插件支付成功!", icon: 16, time: 0, shade: [0.3, "#000"] });

                            bt.set_cookie('force', 1);

                            if (soft) soft.flush_cache();

                            return;

                        }

                    })

                }, 3000);

            }

            else {

                bt.soft.pub.wxpayTimeId = setInterval(function () {

                    bt.soft.pro.get_re_order_status(function (rdata) {

                        if (rdata.status) {

                            layer.closeAll();

                            clearInterval(bt.soft.pub.wxpayTimeId);

                            bt.msg({ msg: "专业版支付成功!", icon: 16, time: 0, shade: [0.3, "#000"] });

                            bt.set_cookie('force', 1);

                            if (soft) soft.flush_cache();

                            return;

                        }

                    })

                }, 3000);

            }

			

			

		});

	},

	get_product_discount:function(pluginName,pid){

		if(pluginName ==undefined) pluginName='';

		if(pid==undefined) pid= 0;

		var con = '<div class="libPay-item f14 plr15">\

							<div class="li-tit c4">付款方式</div>\

							<div class="li-con c6" id="Payment"><ul class="pay-btn-group pay-cycle"><li class="pay-cycle-btn active"><span>微信支付</span></li><li class="pay-cycle-btn" onclick="bt.soft.get_voucher_list('+pid+')"><span>代金券</span></li></ul></div>\

						</div>\

						<div class="payment-con">\

							<div class="pay-weixin">\

								<div class="libPay-item f14 plr15">\

									<div class="li-tit c4">开通时长</div>\

									<div class="li-con c6" id="PayCycle"></div>\

								</div>\

								<div class="lib-price-box text-center"><span class="lib-price-name f14"><b>总计</b></span><span class="price-txt"><b class="sale-price"></b>元</span><s class="cost-price"></s></div>\

								<div class="paymethod">\

									<div class="pay-wx"></div>\

									<div class="pay-wx-info f16 text-center"><span class="wx-pay-ico mr5"></span>微信扫码支付</div>\

								</div>\

							</div>\

							<div class="pay-coupon" style="display:none">\

								<div class="libPay-item f14 plr15">\

									<div class="li-tit c4 ">代金券列表</div>\

									<div class="li-con c6" id="couponlist"><div class="btn-group"></div></div>\

								</div>\

								<div class="paymethod-submit text-center">\

									<button class="btn btn-success btn-sm f16" style="width:200px;height:40px;background-color:#999;border-color:#888">提交</button>\

								</div>\

							</div>\

						</div>'

		$(".libpay-con").html("<div class='cloading'>加载中,请稍后</div>");

		

		bt.soft.pro.get_product_discount_by(pluginName,function(rdata){

			if(rdata !=null){

				var coucon = '';

				var qarr = Object.keys(rdata);

				var qlen = qarr.length;		

				if(pluginName) qlen = qlen-1;

				//折扣列表

				for(var i=0;i<qlen;i++){

					var j = qarr[i];

					var a = rdata[j].price;

					var b = rdata[j].sprice;

					var c = rdata[j].discount;

					coucon +='<li class="pay-cycle-btn" onclick="bt.soft.get_rscode('+pid+','+a+','+b+','+j+')"><span>'+bt.soft.pro.conver_unit(j)+'</span>'+(c==1?"":'<em>'+c*10+'折</em>')+'</li>';

				}

				$(".libpay-con").html(con);

				$("#PayCycle").html('<ul class="pay-btn-group">'+coucon+'</ul>');

				$(".pay-btn-group li").click(function(){

					$(this).addClass("active").siblings().removeClass("active");

				});

				$(".pay-cycle li").click(function(){

					var i = $(this).index();

					$(this).addClass("active").siblings().removeClass("active");

					$(".payment-con > div").eq(i).show().siblings().hide();

				});

				$("#PayCycle .pay-btn-group li").eq(0).click();

			}

		})

	},

	get_index_list:function(callback){

		bt.send('get_index_list','plugin/get_index_list',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_sort_index:function(data,callback){

		var loading = bt.load();

		bt.send('sort_index','plugin/sort_index',{ssort:data},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},	

	get_soft_list:function(p, type,search,callback){

		if(p == undefined) p=1;

		if(type == undefined) type = 0;

		if(search == undefined) search = '';

		var force = bt.get_cookie('force');

		if(force == undefined) force = 0;

		var loading = bt.load(lan.public.the,1);

		bt.send('get_soft_list','plugin/get_soft_list',{p:p,type:type,tojs:'soft.get_list',force:force,query:search},function(rdata){

			loading.close();

			bt.set_cookie('force',0);

			if(callback) callback(rdata);

		})

	},

    to_index: function (name, callback) {       

        var status = $("#index_" + name).prop("checked") ? "0" : "1";

        if (name.indexOf('php-')>=0) {

            var verinfo = name.replace(/\./,"");

            status = $("#index_" + verinfo).prop("checked")?"0":"1";

        }       

		if(status==1){

			bt.send('add_index','plugin/add_index',{sName:name},function(rdata){

				rdata.time = 1000;

				if(!rdata.status) bt.msg(rdata);

				if(callback) callback(rdata);

			})

		}

		else{

			bt.send('remove_index','plugin/remove_index',{sName:name},function(rdata){

			rdata.time = 1000;

				if(!rdata.status) bt.msg(rdata);

				if(callback) callback(rdata);

			})

		}

	},	

	install:function(name){		

		_this = this;		

        _this.get_soft_find(name, function (rdata) {

            var arrs = ['apache', 'nginx', 'mysql'];

            if ($.inArray(name, arrs) >= 0 || name.indexOf('php-')>=0) {                

                var SelectVersion = '', shtml = name;

                if (rdata.versions.length > 1) {

                    for (var i = 0; i < rdata.versions.length; i++) {

                        var item = rdata.versions[i];

                        SelectVersion += '<option>' + name + ' ' + item.m_version + '</option>';

                    }

                    shtml = "<select id='SelectVersion' class='bt-input-text' style='margin-left:30px'>" + SelectVersion + "</select>";

                }

                else {

                    shtml = "<span id='SelectVersion'>" + name + "</span>";

                }

                var loadOpen = bt.open({

                    type: 1,

                    title: name + lan.soft.install_title,

                    area: '350px',

                    content: "<div class='bt-form pd20 pb70 c6'>\

						<div class='version line'>"+ lan.soft.install_version + ":" + shtml+"</div>\

                        <div class='fangshi line'>"+ lan.bt.install_type + ":<label data-title='" + lan.bt.install_rpm_title + "'>" + lan.bt.install_rpm + "<input type='checkbox' checked></label><label data-title='" + lan.bt.install_src_title + "'>" + lan.bt.install_src + "<input type='checkbox'></label></div>\

						<div class='bt-form-submit-btn'>\

							<button type='button' class='btn btn-danger btn-sm btn-title' onclick='layer.closeAll()'>"+ lan.public.close + "</button>\

					        <button type='button' id='bi-btn' class='btn btn-success btn-sm btn-title bi-btn'>"+ lan.public.submit + "</button>\

				        </div>\

				    </div>"

                })



                $('.fangshi input').click(function () {

                    $(this).attr('checked', 'checked').parent().siblings().find("input").removeAttr('checked');

                });



                $("#bi-btn").click(function () {

                    loadOpen.close();

                    var info = $("#SelectVersion").val().toLowerCase();

                    name = info.split(" ")[0];

                    version = info.split(" ")[1];

                    var type = $('.fangshi input:eq(0)').prop("checked") ? '1' : '0';

                    if (rdata.versions.length > 1) {

                        _this.install_soft(rdata, version, type);

                    } else {

                        _this.install_soft(rdata, rdata.versions[0].m_version, type);

                    }

                  

                });

            }

			else if (rdata.versions.length > 1)

			{

				var SelectVersion = '';

				for(var i=0; i<rdata.versions.length; i++){

					var item = rdata.versions[i];

					SelectVersion += '<option>'+name+' '+item.m_version+'</option>';

                }

		        var loadOpen = bt.open({

					type: 1,

				    title: name + lan.soft.install_title,

				    area: '350px',

				    content:"<div class='bt-form pd20 pb70 c6'>\

						<div class='version line'>"+ lan.soft.install_version + ":<select id='SelectVersion' class='bt-input-text' style='margin-left:30px'>" + SelectVersion +"</select></div>\

                        <div class='bt-form-submit-btn'>\

							<button type='button' class='btn btn-danger btn-sm btn-title' onclick='layer.closeAll()'>"+lan.public.close+"</button>\

					        <button type='button' id='bi-btn' class='btn btn-success btn-sm btn-title bi-btn'>"+lan.public.submit+"</button>\

				        </div>\

				    </div>"

				})

				$("#bi-btn").click(function(){

					loadOpen.close();

					var info = $("#SelectVersion").val().toLowerCase();

					name = info.split(" ")[0];

					version = info.split(" ")[1];				

					_this.install_soft(rdata,version);

				});

            }            

			else{

				_this.install_soft(rdata,rdata.versions[0].m_version);

			}

		})	

	},	

    install_soft: function (item, version, type) { //安装单版本	

        if (type == undefined) type = 0;

		item.title = bt.replace_all(item.title,'-' + version,'');

		var msg = item.type!=5?lan.soft.lib_insatll_confirm.replace('{1}',item.title):lan.get('install_confirm',[item.title,version]);



		bt.confirm({msg:msg,title:item.type!=5?lan.soft.lib_install:lan.soft.install_title}, function() {

            var loadT = bt.load(lan.soft.lib_install_the);

            bt.send('install_plugin', 'plugin/install_plugin', { sName: item.name, version: version, type:type }, function (rdata) {

				loadT.close();		

				bt.pub.get_task_count();

				if(soft) soft.get_list();

				bt.msg(rdata);

			})

		})

	},

	update_soft:function(name,version,min_version){

		var msg = "<li>建议您在服务器负载闲时进行软件更新.</li>";

		if(name == 'mysql') msg = "<ul style='color:red;'><li>更新数据库有风险,建议在更新前,先备份您的数据库.</li><li>如果您的是云服务器,强烈建议您在更新前做一个快照.</li><li>建议您在服务器负载闲时进行软件更新.</li></ul>";

		bt.show_confirm('更新['+name+']','更新过程可能会导致服务中断,您真的现在就将['+name+']更新到['+version+'.'+min_version+']吗?',function(){

			var loadT = bt.load('正在更新到['+name+'-'+version+'.'+min_version+'],请稍候...');

			bt.send('install_plugin','plugin/install_plugin',{sName:name,version:version,upgrade:version},function(rdata){

				loadT.close();				

				bt.pub.get_task_count();

				if(soft) soft.get_list();

				bt.msg(rdata);	

			})

		},msg);	

	},

	un_install:function(name){

		var _this = this;

		_this.get_soft_find(name,function(item){

			var version = '';

			for(var i=0;i<item.versions.length;i++){

				if(item.versions[i].setup && bt.contains(item.version,item.versions[i].m_version)){

					version = item.versions[i].m_version;

					break;

				}

			}

			var title = bt.replace_all(item.title,'-'+version,'');

			bt.confirm({msg:lan.soft.uninstall_confirm.replace('{1}',title).replace('{2}',version), title:lan.soft.uninstall,icon:3,closeBtn:2}, function() {

				var loadT = bt.load(lan.soft.lib_uninstall_the);

				bt.send('uninstall_plugin','plugin/uninstall_plugin',{sName:name,version:version},function(rdata){

					loadT.close();				

					bt.pub.get_task_count();				

					if(soft) soft.get_list();

					bt.msg(rdata);

				})

			})

		})

		

	},

	get_soft_find:function(name,callback){

		var loadT = bt.load();

		bt.send('get_soft_find','plugin/get_soft_find',{sName:name},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);

		})

	},

	get_config_menu:function(name,version,versions) //获取设置菜单显示

	{

		var vstr = '';

		if(versions && versions.length>1){

			for(var i=0;i<versions.length;i++) vstr+= versions[i].m_version +'|'

			vstr = bt.rtrim(vstr,'|')

		}		

		var menu = '';

		if(bt.os=='Linux'){

			menu = '<p onclick="bt.soft.get_tab_contents(\'config\',\''+name+'\')">'+lan.soft.config_edit+'</p><p onclick="bt.soft.get_tab_contents(\'change_version\',\''+name+'\',\''+vstr+'\')">'+lan.soft.nginx_version+'</p>';

			if(version == undefined || version == ''){

				menu = '<p onclick="bt.soft.get_tab_contents(\'config\',\''+name+'\')">'+lan.soft.config_edit+'</p>';

			}

			switch(name)

			{

				case 'mysqld':

				 	menu += '<p onclick="bt.soft.get_tab_contents(\'change_data_path\')">'+lan.soft.save_path+'</p><p onclick="bt.soft.get_tab_contents(\'change_mysql_port\')">'+lan.site.port+'</p><p onclick="bt.soft.get_tab_contents(\'get_mysql_run_status\')">'+lan.soft.status+'</p><p onclick="bt.soft.get_tab_contents(\'get_mysql_status\')">'+lan.soft.php_main7+'</p><p onclick="bt.soft.get_tab_contents(\'mysql_log\')">'+lan.soft.log+'</p><p onclick="bt.soft.get_tab_contents(\'mysql_slow_log\')">'+lan.public.slow_log+'</p>';

					break;

				case 'phpmyadmin':					

					menu = '<p onclick="bt.soft.get_tab_contents(\'phpmyadmin_php\',\''+name+'\',\''+version.phpversion+'\')">'+lan.soft.php_version+'</p><p onclick="bt.soft.get_tab_contents(\'phpmyadmin_safe\',\''+name+'\',\''+version.port+'|'+version.auth+'\')"">'+lan.soft.safe+'</p>';						

					break;

				case 'memcached':

					menu += '<p onclick="bt.soft.get_tab_contents(\'memcached_status\')">负载状态</p><p onclick="bt.soft.get_tab_contents(\'memcached_set\')">性能调整</p>';

					break;

				case 'redis':

					menu += '<p  onclick="bt.soft.get_tab_contents(\'get_redis_status\')">负载状态</p>'; 

					break;

				case 'tomcat':

                    menu += '<p onclick="bt.soft.get_tab_contents(\'log\',\'/www/server/tomcat/logs/catalina.out\')">运行日志</p>';

					break;

				case 'apache':

				case 'nginx':

					menu = '<p onclick="bt.soft.get_tab_contents(\'config\',\''+name+'\')">'+lan.soft.config_edit+'</p>'

					menu += (name=='nginx')?'<p onclick="bt.soft.get_tab_contents(\'nginx_status\')">'+lan.soft.nginx_status+'</p>':'';

					if(version != undefined || version !=''){

						 menu += '<p onclick="bt.soft.get_tab_contents(\'change_version\',\''+name+'\',\''+vstr+'\')">'+lan.soft.nginx_version+'</p>';

					}

					var logsPath = '/www/wwwlogs/error_log'

					if(name == 'nginx'){

						logsPath = '/www/wwwlogs/nginx_error.log';				

					}

					menu+='<p onclick="bt.soft.get_tab_contents(\'log\',\''+logsPath+'\')">错误日志</p>';

					break;

			}		

		}

		return menu;

	},

	get_tab_contents : function(key,name,value) //获取设置菜单操作

	{

		var _this = this;

		switch(key)

		{

			case 'service':

				if(typeof value == 'string') value = value=='true'?true:false;

				var tabCon ='<p class="status">'+lan.soft.status+':<span>'+(value?lan.soft.on:lan.soft.off)+'</span><span style="color: '+(value?'#20a53a;':'red;')+' margin-left: 3px;" class="glyphicon '+(value?'glyphicon glyphicon-play':'glyphicon-pause')+'"></span></p>\

						<div class="sfm-opt">\

							<button class="btn btn-default btn-sm" onclick="bt.pub.set_server_status(\''+name+'\',\''+(value?'stop':'start')+'\')">'+(value?lan.soft.stop:lan.soft.start)+'</button>\

							<button class="btn btn-default btn-sm" onclick="bt.pub.set_server_status(\''+name+'\',\'restart\')">'+lan.soft.restart+'</button>\

							<button class="btn btn-default btn-sm" onclick="bt.pub.set_server_status(\''+name+'\',\'reload\')">'+lan.soft.reload+'</button>\

						</div>'; 

				$(".soft-man-con").html(tabCon);

				var help = '<ul class="help-info-text c7 mtb15" style="padding-top:30px"><li>'+lan.soft.mysql_mem_err+'</li></ul>';

				if(name == 'mysqld') $(".soft-man-con").append(help);

				break;

			case 'config':

				var con = '<p style="color: #666; margin-bottom: 7px">'+lan.bt.edit_ps+'</p><textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\

					<button id="OnlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">'+lan.public.save+'</button>\

					<ul class="help-info-text c7 ptb15">\

						<li>'+lan.get('config_edit_ps',[name])+'</li>\

					</ul>';

					$(".soft-man-con").html(con);

					var fileName = bt.soft.get_config_path(name);				

				    var loadT = bt.load(lan.soft.get);

				    bt.send('GetFileBody','files/GetFileBody',{path:fileName},function(rdata){

				    	loadT.close();

				    	$("#textBody").text(rdata.data);

				    	$(".CodeMirror").remove();

				    	var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {

							extraKeys: {"Ctrl-Space": "autocomplete"},

							lineNumbers: true,

							matchBrackets:true,

						});

						editor.focus();

						$(".CodeMirror-scroll").css({"height":"350px","margin":0,"padding":0});

						$("#OnlineEditFileBtn").click(function(){

							$("#textBody").text(editor.getValue());

							bt.soft.save_config(fileName,editor.getValue())

						});

				    })

				break;

			case 'change_version':

				if(name == "mysqld") name = "mysql";

				var veropt = value.split("|");

				var SelectVersion = '';

				for(var i=0; i<veropt.length; i++){

					SelectVersion += '<option>'+name+' '+veropt[i]+'</option>';

				}				

				var body = "<div class='ver line'><span class='tname'>"+lan.soft.select_version+"</span><select id='selectVer' class='bt-input-text mr20' name='phpVersion' style='width:160px'>";

					body += SelectVersion+'</select><button class="btn btn-success btn-sm">'+lan.soft.version_to+'</button></div>';

				

				if(name == 'mysql'){

					body += "<ul class='help-info-text c7 ptb15'><li style='color:red;'>"+lan.soft.mysql_f+"</li></ul>"

				}				

				$(".soft-man-con").html(body);

				$(".btn-success").click(function(){

					var ver = $("#selectVer").val();					

					_this.get_soft_find(name,function(rdata){

						if(name=='mysql'){

							bt.database.get_list(1,'',function(ddata){

                                if (ddata.data.length>0) 

								{

									bt.msg({msg:lan.soft.mysql_d,icon:5,time:5000})

									return;

								}

								_this.install_soft(rdata,ver.split(" ")[1],0);

							})

						}

						else{

							_this.install_soft(rdata,ver.split(" ")[1],0);

						}

					})					

				});				

				break;

			case 'change_data_path':

				bt.send('GetMySQLInfo','database/GetMySQLInfo',{},function(rdata){

					

					var tabCon  = '<p class="conf_p">\

									<input id="datadir" class="phpUploadLimit bt-input-text mr5" style="width:350px;" type="text" value="'+rdata.datadir+'" name="datadir">\

									<span onclick="bt.select_path(\'datadir\')" class="glyphicon glyphicon-folder-open cursor mr20" style="width:auto"></span><button class="btn btn-success btn-sm" id="btn_change_path"  >'+lan.soft.mysql_to+'</button>\

								 </p>';

					$(".soft-man-con").html(tabCon);

					

					$("#btn_change_path").click(function(){					

						bt.confirm({msg:lan.soft.mysql_to_msg},function(){

							var datadir = $("#datadir").val();

							var loadT = bt.load(lan.soft.mysql_to_msg1);

							bt.send('SetDataDir','database/SetDataDir',{datadir:datadir},function(rdata){

								loadT.close();

								bt.msg(rdata);

							});

						});

					});		

				});		

				break;

			case 'change_mysql_port':

				bt.send('GetMySQLInfo','database/GetMySQLInfo',{},function(rdata){

					var tabCon = '<p class="conf_p">\

										<input id="dataport" class="phpUploadLimit bt-input-text mr20" type="number" value="'+rdata.port+'" name="dataport">\

										<button style="margin-top: -1px;" class="btn btn-success btn-sm" id="btn_change_port">'+lan.public.edit+'</button>\

									</p>';									

					$(".soft-man-con").html(tabCon);

					

					$("#btn_change_port").click(function(){					

						bt.confirm({msg:lan.soft.mysql_to_msg},function(){

							var port = $("#dataport").val();

							var loadT = bt.load();

							bt.send('SetMySQLPort','database/SetMySQLPort',{port:port},function(rdata){

								loadT.close();

								bt.msg(rdata);

							});

						});

					});		

				});			

				break;

			case 'get_mysql_run_status':

				bt.send('GetRunStatus','database/GetRunStatus',{},function(rdata){

					var cache_size = ((parseInt(rdata.Qcache_hits)/(parseInt(rdata.Qcache_hits)+parseInt(rdata.Qcache_inserts)))* 100).toFixed(2) + '%';

					if(cache_size == 'NaN%') cache_size = 'OFF';

					var Con = '<div class="divtable"><table class="table table-hover table-bordered" style="width: 490px;margin-bottom:10px;background-color:#fafafa">\

								<tbody>\

									<tr><th>'+lan.soft.mysql_status_title1+'</th><td>'+getLocalTime(rdata.Run)+'</td><th>'+lan.soft.mysql_status_title5+'</th><td>'+parseInt(rdata.Questions/rdata.Uptime)+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title2+'</th><td>'+rdata.Connections+'</td><th>'+lan.soft.mysql_status_title6+'</th><td>'+parseInt((parseInt(rdata.Com_commit) + parseInt(rdata.Com_rollback)) / rdata.Uptime) +'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title3+'</th><td>'+ToSize(rdata.Bytes_sent)+'</td><th>'+lan.soft.mysql_status_title7+'</th><td>'+rdata.File+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title4+'</th><td>'+ToSize(rdata.Bytes_received)+'</td><th>'+lan.soft.mysql_status_title8+'</th><td>'+rdata.Position+'</td></tr>\

								</tbody>\

								</table>\

								<table class="table table-hover table-bordered" style="width: 490px;">\

								<thead style="display:none;"><th></th><th></th><th></th><th></th></thead>\

								<tbody>\

									<tr><th>'+lan.soft.mysql_status_title9+'</th><td>'+rdata.Threads_running+'/'+rdata.Max_used_connections+'</td><td colspan="2">'+lan.soft.mysql_status_ps1+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title10+'</th><td>'+((1-rdata.Threads_created/rdata.Connections)* 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps2+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title11+'</th><td>'+((1-rdata.Key_reads / rdata.Key_read_requests) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps3+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title12+'</th><td>'+((1-rdata.Innodb_buffer_pool_reads/rdata.Innodb_buffer_pool_read_requests) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps4+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title13+'</th><td>'+cache_size+'</td><td colspan="2">'+lan.soft.mysql_status_ps5+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title14+'</th><td>'+((rdata.Created_tmp_disk_tables/rdata.Created_tmp_tables) * 100).toFixed(2)+'%</td><td colspan="2">'+lan.soft.mysql_status_ps6+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title15+'</th><td>'+rdata.Open_tables+'</td><td colspan="2">'+lan.soft.mysql_status_ps7+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title16+'</th><td>'+rdata.Select_full_join+'</td><td colspan="2">'+lan.soft.mysql_status_ps8+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title17+'</th><td>'+rdata.Select_range_check+'</td><td colspan="2">'+lan.soft.mysql_status_ps9+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title18+'</th><td>'+rdata.Sort_merge_passes+'</td><td colspan="2">'+lan.soft.mysql_status_ps10+'</td></tr>\

									<tr><th>'+lan.soft.mysql_status_title19+'</th><td>'+rdata.Table_locks_waited+'</td><td colspan="2">'+lan.soft.mysql_status_ps11+'</td></tr>\

								<tbody>\

						</table></div>'

					$(".soft-man-con").html(Con);

				})

				break;

			case 'get_mysql_status':

				bt.send('GetDbStatus','database/GetDbStatus',{},function(rdata){

					var key_buffer_size = bt.format_size(rdata.mem.key_buffer_size,false,0,'MB')

					var query_cache_size = bt.format_size(rdata.mem.query_cache_size,false,0,'MB')

					var tmp_table_size = bt.format_size(rdata.mem.tmp_table_size,false,0,'MB')

					var innodb_buffer_pool_size = bt.format_size(rdata.mem.innodb_buffer_pool_size,false,0,'MB')

					var innodb_additional_mem_pool_size = bt.format_size(rdata.mem.innodb_additional_mem_pool_size,false,0,'MB')

					var innodb_log_buffer_size = bt.format_size(rdata.mem.innodb_log_buffer_size,false,0,'MB')

					

					var sort_buffer_size = bt.format_size(rdata.mem.sort_buffer_size,false,0,'MB')

					var read_buffer_size = bt.format_size(rdata.mem.read_buffer_size,false,0,'MB')

					var read_rnd_buffer_size = bt.format_size(rdata.mem.read_rnd_buffer_size,false,0,'MB')

					var join_buffer_size = bt.format_size(rdata.mem.join_buffer_size,false,0,'MB')

					var thread_stack = bt.format_size(rdata.mem.thread_stack,false,0,'MB')

					var binlog_cache_size = bt.format_size(rdata.mem.binlog_cache_size,false,0,'MB')

					

					var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size

					var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size

					var memSize = a  + rdata.mem.max_connections * b

					

					

					var memCon = '<div class="conf_p" style="margin-bottom:0">\

									<div style="border-bottom:#ccc 1px solid;padding-bottom:10px;margin-bottom:10px"><span><b>'+lan.soft.mysql_set_msg+'</b></span>\

									<select class="bt-input-text" name="mysql_set" style="margin-left:-4px">\

										<option value="0">'+lan.soft.mysql_set_select+'</option>\

										<option value="1">1-2GB</option>\

										<option value="2">2-4GB</option>\

										<option value="3">4-8GB</option>\

										<option value="4">8-16GB</option>\

										<option value="5">16-32GB</option>\

									</select>\

									<span>'+lan.soft.mysql_set_maxmem+': </span><input style="width:70px;background-color:#eee;" class="bt-input-text mr5" name="memSize" type="text" value="'+memSize.toFixed(2)+'" readonly>MB\

									</div>\

									<p><span>key_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="key_buffer_size" value="'+key_buffer_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_key_buffer_size+'</font></p>\

									<p><span>query_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="query_cache_size" value="'+query_cache_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_query_cache_size+'</font></p>\

									<p><span>tmp_table_size</span><input style="width: 70px;" class="bt-input-text mr5" name="tmp_table_size" value="'+tmp_table_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_tmp_table_size+'</font></p>\

									<p><span>innodb_buffer_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_buffer_pool_size" value="'+innodb_buffer_pool_size+'" type="number" >MB, <font>'+lan.soft.mysql_set_innodb_buffer_pool_size+'</font></p>\

									<p><span>innodb_log_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_log_buffer_size" value="'+innodb_log_buffer_size+'" type="number">MB, <font>'+lan.soft.mysql_set_innodb_log_buffer_size+'</font></p>\

									<p style="display:none;"><span>innodb_additional_mem_pool_size</span><input style="width: 70px;" class="bt-input-text mr5" name="innodb_additional_mem_pool_size" value="'+innodb_additional_mem_pool_size+'" type="number" >MB</p>\

									<p><span>sort_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="sort_buffer_size" value="'+(sort_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_sort_buffer_size+'</font></p>\

									<p><span>read_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_buffer_size" value="'+(read_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_read_buffer_size+' </font></p>\

									<p><span>read_rnd_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="read_rnd_buffer_size" value="'+(read_rnd_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_read_rnd_buffer_size+' </font></p>\

									<p><span>join_buffer_size</span><input style="width: 70px;" class="bt-input-text mr5" name="join_buffer_size" value="'+(join_buffer_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_join_buffer_size+'</font></p>\

									<p><span>thread_stack</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_stack" value="'+(thread_stack * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_thread_stack+'</font></p>\

									<p><span>binlog_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="binlog_cache_size" value="'+(binlog_cache_size * 1024)+'" type="number" >KB * '+lan.soft.mysql_set_conn+', <font>'+lan.soft.mysql_set_binlog_cache_size+'</font></p>\

									<p><span>thread_cache_size</span><input style="width: 70px;" class="bt-input-text mr5" name="thread_cache_size" value="'+rdata.mem.thread_cache_size+'" type="number" ><font> '+lan.soft.mysql_set_thread_cache_size+'</font></p>\

									<p><span>table_open_cache</span><input style="width: 70px;" class="bt-input-text mr5" name="table_open_cache" value="'+rdata.mem.table_open_cache+'" type="number" > <font>'+lan.soft.mysql_set_table_open_cache+'</font></p>\

									<p><span>max_connections</span><input style="width: 70px;" class="bt-input-text mr5" name="max_connections" value="'+rdata.mem.max_connections+'" type="number" ><font> '+lan.soft.mysql_set_max_connections+'</font></p>\

									<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="bt.pub.set_server_status(\'mysqld\',\'restart\')">'+lan.soft.mysql_set_restart+'</button><button class="btn btn-success btn-sm" id="btn_SetMySQLConf" >'+lan.public.save+'</button></div>\

								</div>'

					

					$(".soft-man-con").html(memCon);

					

					$(".conf_p input[name*='size'],.conf_p input[name='max_connections'],.conf_p input[name='thread_stack']").change(function(){

						ComMySqlMem();

					});

					

					$(".conf_p select[name='mysql_set']").change(function(){

						MySQLMemOpt($(this).val());

						ComMySqlMem();

					});

					

					$('#btn_SetMySQLConf').click(function(){

						SetMySQLConf();

					})

					//设置MySQL配置参数

					function SetMySQLConf(){

						bt.send('GetMemInfo','system/GetMemInfo',{},function(memInfo){

							var query_cache_size = parseInt($("input[name='query_cache_size']").val());

							var query_cache_type = 0;

							if(query_cache_size > 0){

								query_cache_type = 1;

							}

							var data = {

								key_buffer_size:parseInt($("input[name='key_buffer_size']").val()),

								query_cache_size:query_cache_size,

								query_cache_type:query_cache_type,

								tmp_table_size:parseInt($("input[name='tmp_table_size']").val()),

								max_heap_table_size:parseInt($("input[name='tmp_table_size']").val()),

								innodb_buffer_pool_size:parseInt($("input[name='innodb_buffer_pool_size']").val()),

								innodb_log_buffer_size:parseInt($("input[name='innodb_log_buffer_size']").val()),

								sort_buffer_size:parseInt($("input[name='sort_buffer_size']").val()),

								read_buffer_size:parseInt($("input[name='read_buffer_size']").val()),

								read_rnd_buffer_size:parseInt($("input[name='read_rnd_buffer_size']").val()),

								join_buffer_size:parseInt($("input[name='join_buffer_size']").val()),

								thread_stack:parseInt($("input[name='thread_stack']").val()),

								binlog_cache_size:parseInt($("input[name='binlog_cache_size']").val()),

								thread_cache_size:parseInt($("input[name='thread_cache_size']").val()),

								table_open_cache:parseInt($("input[name='table_open_cache']").val()),

								max_connections:parseInt($("input[name='max_connections']").val())

							};

							bt.send('SetDbConf','database/SetDbConf',data,function(rdata){

								layer.msg(rdata.msg,{icon:rdata.status?1:2});	

							});

						})

					}





					//计算MySQL内存开销

					function ComMySqlMem(){

						var key_buffer_size = parseInt($("input[name='key_buffer_size']").val());

						var query_cache_size = parseInt($("input[name='query_cache_size']").val());

						var tmp_table_size = parseInt($("input[name='tmp_table_size']").val());

						var innodb_buffer_pool_size = parseInt($("input[name='innodb_buffer_pool_size']").val());

						var innodb_additional_mem_pool_size = parseInt($("input[name='innodb_additional_mem_pool_size']").val());

						var innodb_log_buffer_size = parseInt($("input[name='innodb_log_buffer_size']").val());

						

						var sort_buffer_size = $("input[name='sort_buffer_size']").val() / 1024;

						var read_buffer_size = $("input[name='read_buffer_size']").val() / 1024;

						var read_rnd_buffer_size = $("input[name='read_rnd_buffer_size']").val() / 1024;

						var join_buffer_size = $("input[name='join_buffer_size']").val() / 1024;

						var thread_stack = $("input[name='thread_stack']").val() / 1024;

						var binlog_cache_size = $("input[name='binlog_cache_size']").val() / 1024;

						var max_connections = $("input[name='max_connections']").val();

						

						var a = key_buffer_size + query_cache_size + tmp_table_size + innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size

						var b = sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + thread_stack + binlog_cache_size

						var memSize = a  + max_connections * b

						$("input[name='memSize']").val(memSize.toFixed(2));

					}

					//MySQL内存优化方案

					function MySQLMemOpt(opt){

						var query_size = parseInt($("input[name='query_cache_size']").val());

						switch(opt){

							case '1':

								$("input[name='key_buffer_size']").val(128);

								if(query_size) $("input[name='query_cache_size']").val(64);

								$("input[name='tmp_table_size']").val(64);

								$("input[name='innodb_buffer_pool_size']").val(256);

								$("input[name='sort_buffer_size']").val(768);

								$("input[name='read_buffer_size']").val(768);

								$("input[name='read_rnd_buffer_size']").val(512);

								$("input[name='join_buffer_size']").val(1024);

								$("input[name='thread_stack']").val(256);

								$("input[name='binlog_cache_size']").val(64);

								$("input[name='thread_cache_size']").val(64);

								$("input[name='table_open_cache']").val(128);

								$("input[name='max_connections']").val(100);

								break;

							case '2':

								$("input[name='key_buffer_size']").val(256);

								if(query_size) $("input[name='query_cache_size']").val(128);

								$("input[name='tmp_table_size']").val(384);

								$("input[name='innodb_buffer_pool_size']").val(384);

								$("input[name='sort_buffer_size']").val(768);

								$("input[name='read_buffer_size']").val(768);

								$("input[name='read_rnd_buffer_size']").val(512);

								$("input[name='join_buffer_size']").val(2048);

								$("input[name='thread_stack']").val(256);

								$("input[name='binlog_cache_size']").val(64);

								$("input[name='thread_cache_size']").val(96);

								$("input[name='table_open_cache']").val(192);

								$("input[name='max_connections']").val(200);

								break;

							case '3':

								$("input[name='key_buffer_size']").val(384);

								if(query_size) $("input[name='query_cache_size']").val(192);

								$("input[name='tmp_table_size']").val(512);

								$("input[name='innodb_buffer_pool_size']").val(512);

								$("input[name='sort_buffer_size']").val(1024);

								$("input[name='read_buffer_size']").val(1024);

								$("input[name='read_rnd_buffer_size']").val(768);

								$("input[name='join_buffer_size']").val(2048);

								$("input[name='thread_stack']").val(256);

								$("input[name='binlog_cache_size']").val(128);

								$("input[name='thread_cache_size']").val(128);

								$("input[name='table_open_cache']").val(384);

								$("input[name='max_connections']").val(300);

								break;

							case '4':

								$("input[name='key_buffer_size']").val(512);

								if(query_size) $("input[name='query_cache_size']").val(256);

								$("input[name='tmp_table_size']").val(1024);

								$("input[name='innodb_buffer_pool_size']").val(1024);

								$("input[name='sort_buffer_size']").val(2048);

								$("input[name='read_buffer_size']").val(2048);

								$("input[name='read_rnd_buffer_size']").val(1024);

								$("input[name='join_buffer_size']").val(4096);

								$("input[name='thread_stack']").val(384);

								$("input[name='binlog_cache_size']").val(192);

								$("input[name='thread_cache_size']").val(192);

								$("input[name='table_open_cache']").val(1024);

								$("input[name='max_connections']").val(400);

								break;

							case '5':

								$("input[name='key_buffer_size']").val(1024);

								if(query_size) $("input[name='query_cache_size']").val(384);

								$("input[name='tmp_table_size']").val(2048);

								$("input[name='innodb_buffer_pool_size']").val(4096);

								$("input[name='sort_buffer_size']").val(4096);

								$("input[name='read_buffer_size']").val(4096);

								$("input[name='read_rnd_buffer_size']").val(2048);

								$("input[name='join_buffer_size']").val(8192);

								$("input[name='thread_stack']").val(512);

								$("input[name='binlog_cache_size']").val(256);

								$("input[name='thread_cache_size']").val(256);

								$("input[name='table_open_cache']").val(2048);

								$("input[name='max_connections']").val(500);

								break;

						}

					}

				})

				break;

			case 'mysql_log':

				var loadT = bt.load();

				bt.send('BinLog','database/BinLog',{status:1},function(rdata){

					loadT.close();

					var limitCon = '<p class="conf_p">\

										<span class="f14 c6 mr20">'+lan.soft.mysql_log_bin+' </span><span class="f14 c6 mr20">'+ToSize(rdata.msg)+'</span>\

										<button class="btn btn-success btn-xs btn-bin va0">'+(rdata.status?lan.soft.off:lan.soft.on)+'</button>\

										<p class="f14 c6 mtb10" style="border-top:#ddd 1px solid; padding:10px 0">'+lan.soft.mysql_log_err+'<button class="btn btn-default btn-clear btn-xs" style="float:right;" >'+lan.soft.mysql_log_close+'</button></p>\

										<textarea readonly style="margin: 0px;width: 515px;height: 440px;background-color: #333;color:#fff; padding:0 5px" id="error_log"></textarea>\

									</p>'					

					$(".soft-man-con").html(limitCon);



                    //设置二进制日志

                    $(".btn-bin").click(function () {

                        var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 });

                        $.post('/database?action=BinLog', "", function (rdata) {

                            layer.close(loadT);

                            layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 });

                            bt.soft.get_tab_contents('mysql_log')

                        });

                    })

                        

                    //清空日志

                    $(".btn-clear").click(function () {

                        var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: 0.3 });

                        $.post('/database?action=GetErrorLog', "close=1", function (rdata) {

                            layer.close(loadT);

                            layer.msg(rdata.msg, { icon: rdata.status ? 1 : 5 });   

                            bt.soft.get_tab_contents('mysql_log')

                        });

                    })         



					bt.send('GetErrorLog','database/GetErrorLog',{},function(error_body){

						if(error_body.status === false){

							layer.msg(error_body.msg,{icon:5});

							error_body = lan.soft.mysql_log_ps1;

						}

						if(error_body == "") error_body = lan.soft.mysql_log_ps1;

						$("#error_log").text(error_body);

						var ob = document.getElementById('error_log');

						ob.scrollTop = ob.scrollHeight;

					});

				})

				break;

			case 'mysql_slow_log':

				var loadT = bt.load();

				bt.send('GetSlowLogs','database/GetSlowLogs',{},function(logs){

					loadT.close();

					if(!logs.status){

						logs.msg = '';

					}

					if (logs.msg == '') logs.msg = '当前没有慢日志.';

					var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';

					$(".soft-man-con").html(phpCon);

					var ob = document.getElementById('error_log');

					ob.scrollTop = ob.scrollHeight;		

				})

				break;

			case 'log':

				var loadT = bt.load(lan.public.the_get);

				bt.send('GetOpeLogs','ajax/GetOpeLogs',{path:name},function(rdata){

					loadT.close();

					if(rdata.msg == '') rdata.msg = '当前没有日志!';

					var ebody = '<div class="soft-man-con"><textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+rdata.msg+'</textarea></div>';

					$(".soft-man-con").html(ebody);

					var ob = document.getElementById('error_log');

					ob.scrollTop = ob.scrollHeight;	

				})

				break;	

			case 'nginx_status':

				bt.send('GetNginxStatus','ajax/GetNginxStatus',{},function(rdata){

					var con = "<div><table class='table table-hover table-bordered'>\

									<tr><th>"+lan.bt.nginx_active+"</th><td>"+rdata.active+"</td></tr>\

									<tr><th>"+lan.bt.nginx_accepts+"</th><td>"+rdata.accepts+"</td></tr>\

									<tr><th>"+lan.bt.nginx_handled+"</th><td>"+rdata.handled+"</td></tr>\

									<tr><th>"+lan.bt.nginx_requests+"</th><td>"+rdata.requests+"</td></tr>\

									<tr><th>"+lan.bt.nginx_reading+"</th><td>"+rdata.Reading+"</td></tr>\

									<tr><th>"+lan.bt.nginx_writing+"</th><td>"+rdata.Writing+"</td></tr>\

									<tr><th>"+lan.bt.nginx_waiting+"</th><td>"+rdata.Waiting+"</td></tr>\

								 </table></div>";

					$(".soft-man-con").html(con);

				})

				break;

			case 'memcached_status':					

			case 'memcached_set':

				var loadT = bt.load(lan.public.get_the);

				bt.send('GetMemcachedStatus','ajax/GetMemcachedStatus',{},function(rdata){

					loadT.close();

					

					if(key=='memcached_set')

					{

						var memCon = '<div class="conf_p" style="margin-bottom:0">\

								<p><span>BindIP</span><input style="width: 120px;" class="bt-input-text mr5" name="membind" value="'+rdata.bind+'" type="text" ><font>监听IP,请勿随意修改</font></p>\

								<p><span>PORT</span><input style="width: 120px;" class="bt-input-text mr5" max="65535" name="memport" value="'+rdata.port+'" type="number" ><font>监听端口,一般无需修改</font></p>\

								<p><span>CACHESIZE</span><input style="width: 120px;" class="bt-input-text mr5" name="memcachesize" value="'+rdata.cachesize+'" type="number" >MB,<font>缓存大小,建议不要大于512M</font></p>\

								<p><span>MAXCONN</span><input style="width: 120px;" class="bt-input-text mr5" name="memmaxconn" value="'+rdata.maxconn+'" type="number" ><font>最大连接数,建议不要大于40960</font></p>\

								<div style="margin-top:10px; padding-right:230px" class="text-right"><button class="btn btn-success btn-sm" >'+lan.public.save+'</button></div>\

							</div>'

						$(".soft-man-con").html(memCon);

						

						$('.btn-success').click(function(){

							var data = {

								ip:$("input[name='membind']").val(),

								port:$("input[name='memport']").val(),

								cachesize:$("input[name='memcachesize']").val(),

								maxconn:$("input[name='memmaxconn']").val()

							}

							

							if(data.ip.split('.').length < 4){

								layer.msg('IP地址格式不正确!',{icon:2});

								return;

							}

							

							if(data.port < 1 || data.port > 65535){

								layer.msg('端口范围不正确!',{icon:2});

								return;

							}

							

							if(data.cachesize < 8){

								layer.msg('缓存值过小',{icon:2});

								return;

							}

							

							if(data.maxconn < 4){

								layer.msg('最大连接数过小',{icon:2});

								return;

							}							

							var loadT = bt.load(lan.public.the);

							bt.send('SetMemcachedCache','ajax/SetMemcachedCache',data,function(rdata){			

								loadT.close();

								bt.msg(rdata)

							});

						})						

					}

					else{

						var memCon = '<div class="divtable">\

								<table class="table table-hover table-bordered" style="width: 490px;">\

								<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\

								<tbody>\

									<tr><th>BindIP</th><td>'+rdata.bind+'</td><td>监听IP</td></tr>\

									<tr><th>PORT</th><td>'+rdata.port+'</td><td>监听端口</td></tr>\

									<tr><th>CACHESIZE</th><td>'+rdata.cachesize+' MB</td><td>最大缓存容量</td></tr>\

									<tr><th>MAXCONN</th><td>'+rdata.maxconn+'</td><td>最大连接数限制</td></tr>\

									<tr><th>curr_connections</th><td>'+rdata.curr_connections+'</td><td>当前打开的连接数</td></tr>\

									<tr><th>cmd_get</th><td>'+rdata.cmd_get+'</td><td>GET请求数</td></tr>\

									<tr><th>get_hits</th><td>'+rdata.get_hits+'</td><td>GET命中次数</td></tr>\

									<tr><th>get_misses</th><td>'+rdata.get_misses+'</td><td>GET失败次数</td></tr>\

									<tr><th>hit</th><td>'+rdata.hit.toFixed(2)+'%</td><td>GET命中率</td></tr>\

									<tr><th>curr_items</th><td>'+rdata.curr_items+'</td><td>当前被缓存的数据行数</td></tr>\

									<tr><th>evictions</th><td>'+rdata.evictions+'</td><td>因内存不足而被清理的缓存行数</td></tr>\

									<tr><th>bytes</th><td>'+ToSize(rdata.bytes)+'</td><td>当前已使用内存</td></tr>\

									<tr><th>bytes_read</th><td>'+ToSize(rdata.bytes_read)+'</td><td>请求总大小</td></tr>\

									<tr><th>bytes_written</th><td>'+ToSize(rdata.bytes_written)+'</td><td>发送总大小</td></tr>\

								<tbody>\

						</table></div>';

						$(".soft-man-con").html(memCon);

					}					

				})			

			break;

			case 'phpmyadmin_php':

				bt.send('GetPHPVersion','site/GetPHPVersion',{},function(rdata){

		

                    var body = "<div class='ver line'><span class='tname'>" + lan.soft.php_version +"</span><select id='get_phpVersion' class='bt-input-text mr20' name='phpVersion' style='width:110px'>";

		

					for(var i=0;i<rdata.length;i++){

						optionSelect = rdata[i].version == value?'selected':'';

						body += "<option value='"+ rdata[i].version +"' "+ optionSelect +">"+ rdata[i].name +"</option>"

					}

					body += '</select><button class="btn btn-success btn-sm" >'+lan.public.save+'</button></div>';

					$(".soft-man-con").html(body);

					

                    $('.btn-success').click(function () {

                    

						var loadT = bt.load(lan.public.the);

                        bt.send('setPHPMyAdmin', 'ajax/setPHPMyAdmin', { phpversion: $("#get_phpVersion").val()},function(rdata){

							loadT.close();

							bt.msg(rdata);

							if(rdata.status){

								setTimeout(function(){

									window.location.reload();

								},3000);

							}

						})

					})

				})

				break;

			case 'phpmyadmin_safe':

				var arr = value.split('|');

				var port = arr[0];

				var auth = eval(arr[1]);

				var con = '<div class="ver line">\

									<span style="margin-right:10px">'+lan.soft.pma_port+'</span>\

									<input class="bt-input-text phpmyadmindk mr20" name="Name" id="pmport" value="'+port+'" placeholder="'+lan.soft.pma_port_title+'" maxlength="5" type="number">\

									<button class="btn btn-success btn-sm phpmyadmin_port" >'+lan.public.save+'</button>\

								</div>\

								<div class="user_pw_tit">\

									<span class="tit">'+lan.soft.pma_pass+'</span>\

									<span class="btswitch-p"><input class="btswitch btswitch-ios" id="phpmyadminsafe" type="checkbox" '+(auth?'checked':'')+'>\

									<label class="btswitch-btn phpmyadmin-btn phpmyadmin_safe" for="phpmyadminsafe" ></label>\

									</span>\

								</div>\

								<div class="user_pw">\

									<p><span>'+lan.soft.pma_user+'</span><input id="username_get" class="bt-input-text" name="username_get" value="" type="text" placeholder="'+lan.soft.edit_empty+'"></p>\

									<p><span>'+lan.soft.pma_pass1+'</span><input id="password_get_1" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="'+lan.soft.edit_empty+'"></p>\

									<p><span>'+lan.soft.pma_pass2+'</span><input id="password_get_2" class="bt-input-text" name="password_get_1" value="" type="password" placeholder="'+lan.soft.edit_empty+'"></p>\

									<p><button class="btn btn-success btn-sm phpmyadmin_safe_save" >'+lan.public.save+'</button></p>\

								</div>\

								<ul class="help-info-text c7"><li>'+lan.soft.pma_ps+'</li></ul>';

				$(".soft-man-con").html(con);

				if(auth){

					$(".user_pw").show();

				}

				$('.phpmyadmin_port').click(function(){

					var pmport = $("#pmport").val();

					if(!bt.check_port(pmport)){

						layer.msg(lan.firewall.port_err,{icon:2});

						return;

					}

					var loadT = bt.load(lan.public.the);

					bt.send('setPHPMyAdmin','ajax/setPHPMyAdmin',{port:pmport},function(rdata){

						loadT.close();

						bt.msg(rdata);

					})

				})

				$('.phpmyadmin_safe').click(function(){

					var stat = $("#phpmyadminsafe").prop("checked");

					if(stat) {

						$(".user_pw").hide();

						set_phpmyadmin('close');

					}else{

						 $(".user_pw").show();

					}

				})

				$('.phpmyadmin_safe_save').click(function(){

					set_phpmyadmin('get');

				})

				

				function set_phpmyadmin(msg){

					type = 'password';

					if(msg == 'close')

					{

						bt.confirm({msg:lan.soft.pma_pass_close},function(){

							var loading = bt.load(lan.public.the);

                            bt.send('setPHPMyAdmin', 'ajax/setPHPMyAdmin', { password: msg, siteName:'phpmyadmin'},function(rdata){

								loading.close();

								bt.msg(rdata);

							})

						})

						return;

					}else{

						username = $("#username_get").val()

						password_1 = $("#password_get_1").val()

						password_2 = $("#password_get_2").val()

						if(username.length < 1 || password_1.length < 1){

							bt.msg({msg:lan.soft.pma_pass_empty,icon:2})

							return;

						}

						if(password_1 != password_2){

							bt.msg({msg:lan.soft.pass_err_re,icon:2})

							return;

						}

					}

					var loading = bt.load(lan.public.the);

                    bt.send('setPHPMyAdmin', 'ajax/setPHPMyAdmin', { password: password_1, username: username, siteName:'phpmyadmin'},function(rdata){

						loading.close();

						bt.msg(rdata);

					})					

				}

				break;

			case 'set_php_config':			

				bt.soft.php.get_config(name,function(rdata){

					var body  = ""

					var opt = ""

	

					for(var i=0;i<rdata.libs.length;i++){

						if(rdata.libs[i].versions.indexOf(name) == -1) continue;

						if(rdata.libs[i]['task'] == '-1' && rdata.libs[i].phpversions.indexOf(name) != -1){

							opt = '<a style="color:green;" href="javascript:messagebox();">'+lan.soft.the_install+'</a>'

						}else if(rdata.libs[i]['task'] == '0' && rdata.libs[i].phpversions.indexOf(name) != -1){

							opt = '<a style="color:#C0C0C0;" href="javascript:messagebox();">'+lan.soft.sleep_install+'</a>'

						}else if(rdata.libs[i].status){

							opt = '<a style="color:red;" data-name="'+rdata.libs[i].name+'" data-title="'+rdata.libs[i].title+'" class="lib-uninstall" href="javascript:;">'+lan.soft.uninstall+'</a>'

						}else{

							opt = '<a class="btlink lib-install" data-name="'+rdata.libs[i].name+'" data-title="'+rdata.libs[i].title+'"  href="javascript:;">'+lan.soft.install+'</a>'

						}

						

						body += '<tr>'

									+'<td>'+rdata.libs[i].name+'</td>'

									+'<td>'+rdata.libs[i].type+'</td>'

									+'<td>'+rdata.libs[i].msg+'</td>'

									+'<td><span class="ico-'+(rdata.libs[i].status?'start':'stop')+' glyphicon glyphicon-'+(rdata.libs[i].status?'ok':'remove')+'"></span></td>'

									+'<td style="text-align: right;">'+opt+'</td>'

							   +'</tr>'

					}

					

					var con='<div class="divtable" id="phpextdiv" style="margin-right:10px;height: 420px; overflow: auto; margin-right: 0px;">'

								+'<table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">'

									+'<thead>'

										+'<tr>'

											+'<th>'+lan.soft.php_ext_name+'</th>'

											+'<th width="64">'+lan.soft.php_ext_type+'</th>'

											+'<th>'+lan.soft.php_ext_ps+'</th>'

											+'<th width="40">'+lan.soft.php_ext_status+'</th>'

											+'<th style="text-align: right;" width="50">'+lan.public.action+'</th>'

										+'</tr>'

									+'</thead>'

									+'<tbody>'+body+'</tbody>'

								+'</table>'

							+'</div>'

							+'<ul class="help-info-text c7 pull-left"><li>请按实际需求安装扩展,不要安装不必要的PHP扩展,这会影响PHP执行效率,甚至出现异常</li><li>Redis扩展只允许在1个PHP版本中使用,安装到其它PHP版本请在[软件管理]重装Redis</li><li>opcache/xcache/apc等脚本缓存扩展,请只安装其中1个,否则可能导致您的站点程序异常</li></ul>';

					var divObj = document.getElementById('phpextdiv');

					var scrollTopNum = 0;

					if(divObj) scrollTopNum = divObj.scrollTop;

					$(".soft-man-con").html(con);

					document.getElementById('phpextdiv').scrollTop = scrollTopNum;

					

					$('a').click(function(){					

						var _obj = $(this);

						if(_obj.hasClass('lib-uninstall'))

						{

							bt.soft.php.un_install_php_lib(name,_obj.attr('data-name'),_obj.attr('data-title'),function(rdata){

								setTimeout(function(){

									bt.soft.get_tab_contents('set_php_config',name);

								},1000)

							});

						}

						else if(_obj.hasClass('lib-install')){

							bt.soft.php.install_php_lib(name,_obj.attr('data-name'),_obj.attr('data-title'),function(rdata){

								setTimeout(function(){

									bt.soft.get_tab_contents('set_php_config',name);

								},1000)

							});

						}					

					})

				})			

				break;

			case 'get_phpinfo':

				var con = '<button id="btn_phpinfo" class="btn btn-default btn-sm" >'+lan.soft.phpinfo+'</button>';

				$(".soft-man-con").html(con);

			

				$('#btn_phpinfo').click(function(){

					var loadT = bt.load(lan.soft.get);

					bt.send('GetPHPInfo','ajax/GetPHPInfo',{version:name},function(rdata){

						loadT.close();

						bt.open({

							type: 1,

						    title: "PHP-"+name+"-PHPINFO",

						    area: ['70%','90%'],

						    closeBtn: 2,

						    shadeClose: true,

						    content:rdata.replace('a:link {color: #009; text-decoration: none; background-color: #fff;}','').replace('a:link {color: #000099; text-decoration: none; background-color: #ffffff;}','')

						})

					})

				})

				break;

			case 'config_edit':

				bt.soft.php.get_php_config(name,function(rdata){

					

					var mlist = '';

					for(var i=0;i<rdata.length;i++){

						var w = '70'

						if(rdata[i].name == 'error_reporting') w = '250';

						var ibody = '<input style="width: '+w+'px;" class="bt-input-text mr5" name="'+rdata[i].name+'" value="'+rdata[i].value+'" type="text" >';

						switch(rdata[i].type){

							case 0:

								var selected_1 = (rdata[i].value == 1)?'selected':'';

								var selected_0 = (rdata[i].value == 0)?'selected':'';

								ibody = '<select class="bt-input-text mr5" name="'+rdata[i].name+'" style="width: '+w+'px;"><option value="1" '+selected_1+'>开启</option><option value="0" '+selected_0+'>关闭</option></select>'

								break;

							case 1:

								var selected_1 = (rdata[i].value == 'On')?'selected':'';

								var selected_0 = (rdata[i].value == 'Off')?'selected':'';

								ibody = '<select class="bt-input-text mr5" name="'+rdata[i].name+'" style="width: '+w+'px;"><option value="On" '+selected_1+'>开启</option><option value="Off" '+selected_0+'>关闭</option></select>'

								break;

						}

						mlist += '<p><span>'+rdata[i].name+'</span>'+ibody+', <font>'+rdata[i].ps+'</font></p>'

					}

					var phpCon = '<style>.conf_p p{margin-bottom: 2px}</style><div class="conf_p" style="margin-bottom:0">\

									'+mlist+'\

									<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" id="btn_conf_fresh" >'+lan.public.fresh+'</button><button class="btn btn-success btn-sm"  id="btn_conf_save" >'+lan.public.save+'</button></div>\

								</div>'

					$(".soft-man-con").html(phpCon);

				

					$('button').click(function(){

						var _id = $(this).attr('id');

						switch(_id){

							case 'btn_conf_fresh':

								bt.soft.get_tab_contents(key,name);

								break;

							case 'btn_conf_save':

									var data = {

										version:name,

										display_errors:$("select[name='display_errors']").val(),

										'cgi.fix_pathinfo':$("select[name='cgi.fix_pathinfo']").val(),

										'date.timezone':$("input[name='date.timezone']").val(),

										short_open_tag:$("select[name='short_open_tag']").val(),

										asp_tags:$("select[name='asp_tags']").val()||'On',

										safe_mode:$("select[name='safe_mode']").val(),

										max_execution_time:$("input[name='max_execution_time']").val(),

										max_input_time:$("input[name='max_input_time']").val(),

										memory_limit:$("input[name='memory_limit']").val(),

										post_max_size:$("input[name='post_max_size']").val(),

										file_uploads:$("select[name='file_uploads']").val(),

										upload_max_filesize:$("input[name='upload_max_filesize']").val(),

										max_file_uploads:$("input[name='max_file_uploads']").val(),

										default_socket_timeout:$("input[name='default_socket_timeout']").val(),

										error_reporting:$("input[name='error_reporting']").val()||'On'

									}

									var loadT = bt.load();

									bt.send('SetPHPConf','config/SetPHPConf',data,function(rdata){

										loadT.close();

										bt.soft.get_tab_contents(key,name);

										bt.msg(rdata)

									});

								break;

						}

					})

				});

				break;

			case 'set_upload_limit':

				bt.soft.php.get_limit_config(name,function(ret){							

					var LimitCon = '<p class="conf_p"><input class="phpUploadLimit bt-input-text mr5" type="number" value="'+ret.max+'" name="max">MB<button id="btn_set_max_size" class="btn btn-success btn-sm"  style="margin-left:20px">'+lan.public.save+'</button></p>';

					$(".soft-man-con").html(LimitCon);

					$('#btn_set_max_size').click(function(){

						var max = $(".phpUploadLimit").val();

						if(max < 2){					

							layer.msg(lan.soft.php_upload_size,{icon:2});

							return;

						}

						bt.soft.php.set_upload_max(name,max,function(rdata){

							if(rdata.status){

								bt.soft.get_tab_contents(key,name);

							}

							bt.msg(rdata);

						})

					})

				})

				break;

			case 'set_timeout_limit':

				bt.soft.php.get_limit_config(name,function(ret){	

					var LimitCon = '<p class="conf_p"><input class="phpTimeLimit bt-input-text mr5" type="number" value="'+ret.maxTime+'">'+lan.bt.s+'<button class="btn btn-success btn-sm" id="btn_set_max_time" style="margin-left:20px">'+lan.public.save+'</button></p>';

					$(".soft-man-con").html(LimitCon);					

					$('#btn_set_max_time').click(function(){

						var max = $(".phpTimeLimit").val();

						bt.soft.php.set_php_timeout(name,max,function(rdata){

							if(rdata.status){

								bt.soft.get_tab_contents(key,name);

							}

							bt.msg(rdata);

						})

					})

				})

				break;

			case 'set_dis_fun':

				bt.soft.php.get_config(name,function(rdata){

					var disable_functions = rdata.disable_functions.split(',');

					var dbody = ''

					for(var i=0;i<disable_functions.length;i++){

						if(disable_functions[i] == '') continue;

						dbody += "<tr><td>"+disable_functions[i]+"</td><td><a class='del_functions' style='float:right;' data-val='"+disable_functions[i]+"' href=\"javascript:;\">"+lan.public.del+"</a></td></tr>";

					}					

					var con = "<div class='dirBinding'>"

							   +"<input class='bt-input-text mr5' type='text' placeholder='"+lan.soft.fun_ps1+"' id='disable_function_val' style='height: 28px; border-radius: 3px;width: 410px;' />"

							   +"<button class='btn btn-success btn-sm'>"+lan.public.add+"</button>"

							   +"</div>"

							   +"<div class='divtable mtb15' style='height:350px;overflow:auto'><table class='table table-hover' width='100%' style='margin-bottom:0'>"

							   +"<thead><tr><th>"+lan.soft.php_ext_name+"</th><th width='100' class='text-right'>"+lan.public.action+"</th></tr></thead>"

							   +"<tbody id='blacktable'>" + dbody + "</tbody>"

							   +"</table></div>";

					

					con +='\

					<ul class="help-info-text">\

						<li>'+lan.soft.fun_ps2+'</li>\

						<li>'+lan.soft.fun_ps3+'</li>\

					</ul>';					

					$(".soft-man-con").html(con);

					

					$('button.btn-success,a.del_functions').click(function(){

						var data = '';

						if($(this).is('button')){

							var fs = $('#disable_function_val').val();

							if($.inArray(fs, disable_functions)>=0){

								bt.msg({msg:lan.soft.fun_msg,icon:5});

								return;

							}

							disable_functions.push(fs);				

						}

						else{							

							var fs = $(this).attr('data-val');

							disable_functions.splice($.inArray(fs, disable_functions), 1)

						}

						data = disable_functions.join(',');

						bt.soft.php.disable_functions(name,data,function(rdata){

							if(rdata.status){

								bt.soft.get_tab_contents(key,name);

							}

							bt.msg(rdata);

						})

					})

				})

				break;

			case 'set_fpm_config':

				bt.soft.php.get_fpm_config(name,function(rdata){

					

					var limitList = "<option value='0'>"+lan.soft.concurrency_m+"</option>"

									+"<option value='1' "+(rdata.max_children==30?'selected':'')+">30"+lan.soft.concurrency+"</option>"

									+"<option value='2' "+(rdata.max_children==50?'selected':'')+">50"+lan.soft.concurrency+"</option>"

									+"<option value='3' "+(rdata.max_children==100?'selected':'')+">100"+lan.soft.concurrency+"</option>"

									+"<option value='4' "+(rdata.max_children==200?'selected':'')+">200"+lan.soft.concurrency+"</option>"

									+"<option value='5' "+(rdata.max_children==300?'selected':'')+">300"+lan.soft.concurrency+"</option>"

									+"<option value='6' "+(rdata.max_children==500?'selected':'')+">500"+lan.soft.concurrency+"</option>"

					var pms = [{'name':'static','title':lan.bt.static},{'name':'dynamic','title':lan.bt.dynamic}];

					var pmList = '';

					for(var i=0;i<pms.length;i++){

						pmList += '<option value="'+pms[i].name+'" '+((pms[i].name == rdata.pm)?'selected':'')+'>'+pms[i].title+'</option>';

					}

					var body="<div class='bingfa'>"

									+"<p class='line'><span class='span_tit'>"+lan.soft.concurrency_type+":</span><select class='bt-input-text' name='limit' style='width:100px;'>"+limitList+"</select></p>"

									+"<p class='line'><span class='span_tit'>"+lan.soft.php_fpm_model+":</span><select class='bt-input-text' name='pm' style='width:100px;'>"+pmList+"</select><span class='c9'>*"+lan.soft.php_fpm_ps1+"</span></p>"

									+"<p class='line'><span class='span_tit'>max_children:</span><input class='bt-input-text' type='number' name='max_children' value='"+rdata.max_children+"' /><span class='c9'>*"+lan.soft.php_fpm_ps2+"</span></p>"

									+"<p class='line'><span class='span_tit'>start_servers:</span><input class='bt-input-text' type='number' name='start_servers' value='"+rdata.start_servers+"' />  <span class='c9'>*"+lan.soft.php_fpm_ps3+"</span></p>"

									+"<p class='line'><span class='span_tit'>min_spare_servers:</span><input class='bt-input-text' type='number' name='min_spare_servers' value='"+rdata.min_spare_servers+"' />   <span class='c9'>*"+lan.soft.php_fpm_ps4+"</span></p>"

									+"<p class='line'><span class='span_tit'>max_spare_servers:</span><input class='bt-input-text' type='number' name='max_spare_servers' value='"+rdata.max_spare_servers+"' />   <span class='c9'>*"+lan.soft.php_fpm_ps5+"</span></p>"

									+"<div class='mtb15'><button class='btn btn-success btn-sm'>"+lan.public.save+"</button></div>"

							+"</div>"

					

					$(".soft-man-con").html(body);

					$("select[name='limit']").change(function(){

						var type = $(this).val();

						var max_children = rdata.max_children;

						var start_servers = rdata.start_servers;

						var min_spare_servers = rdata.min_spare_servers;

						var max_spare_servers = rdata.max_spare_servers;

						switch(type){

							case '1':

								max_children = 30;

								start_servers = 5;

								min_spare_servers = 5;

								max_spare_servers = 20;

								break;

							case '2':

								max_children = 50;

								start_servers = 15;

								min_spare_servers = 15;

								max_spare_servers = 35;

								break;

							case '3':

								max_children = 100;

								start_servers = 20;

								min_spare_servers = 20;

								max_spare_servers = 70;

								break;

							case '4':

								max_children = 200;

								start_servers = 25;

								min_spare_servers = 25;

								max_spare_servers = 150;

								break;

							case '5':

								max_children = 300;

								start_servers = 30;

								min_spare_servers = 30;

								max_spare_servers = 180;

								break;

							case '6':

								max_children = 500;

								start_servers = 35;

								min_spare_servers = 35;

								max_spare_servers = 250;

								break;

						}

						

						$("input[name='max_children']").val(max_children);

						$("input[name='start_servers']").val(start_servers);

						$("input[name='min_spare_servers']").val(min_spare_servers);

						$("input[name='max_spare_servers']").val(max_spare_servers);

		

					});

					$('.btn-success').click(function(){

						bt.pub.get_menm(function(memInfo){

							var limit_children = parseInt(memInfo['memTotal'] / 8);

								var max_children = Number($("input[name='max_children']").val());

								var start_servers = Number($("input[name='start_servers']").val());

								var min_spare_servers = Number($("input[name='min_spare_servers']").val());

								var max_spare_servers = Number($("input[name='max_spare_servers']").val());

								var pm = $("select[name='pm']").val();

								

								if(limit_children < max_children){

									layer.msg('当前服务器内存不足,最大允许['+limit_children+']个子进程!',{icon:2});

									$("input[name='max_children']").focus();

									return;

								}

								

								if(max_children < max_spare_servers){

									layer.msg(lan.soft.php_fpm_err1,{icon:2});

									return;

								}

								

								if(min_spare_servers > start_servers) {

									layer.msg(lan.soft.php_fpm_err2,{icon:2});

									return;

								}

								

								if(max_spare_servers < min_spare_servers){

									layer.msg(lan.soft.php_fpm_err3,{icon:2});

									return;

								}

								

								if(max_children < start_servers){

									layer.msg(lan.soft.php_fpm_err4,{icon:2});

									return;

								}

								

								if(max_children < 1 || start_servers < 1 || min_spare_servers < 1 || max_spare_servers < 1){

									layer.msg(lan.soft.php_fpm_err5,{icon:2});

									return;

								}

								var data = {

										version:name,

										max_children:max_children,

										start_servers:start_servers,

										min_spare_servers:min_spare_servers,

										max_spare_servers:max_spare_servers,

										pm:pm

								}

								bt.soft.php.set_fpm_config(name,data,function(rdata){

									bt.soft.get_tab_contents(key,name);

									bt.msg(rdata);

								})

						})

					})

				});

				break;

			case 'get_php_status':

				bt.soft.php.get_php_status(name,function(rdata){

					

					var arr = {};					

					arr[lan.bt.php_pool] = rdata.pool;

					arr[lan.bt.php_manager] =((rdata['process manager'] == 'dynamic')?lan.bt.dynamic:lan.bt.static);

					arr[lan.bt.php_start] = rdata['start time'];

					arr[lan.bt.php_accepted] = rdata['accepted conn'];

					arr[lan.bt.php_queue] = rdata['listen queue'];

					arr[lan.bt.php_max_queue] = rdata['max listen queue'];

					arr[lan.bt.php_len_queue] = rdata['listen queue len'];

					arr[lan.bt.php_idle] = rdata['idle processes'];

					arr[lan.bt.php_active] = rdata['active processes'];

					arr[lan.bt.php_total] = rdata['total processes'];

					arr[lan.bt.php_max_active] = rdata['max active processes'];

					arr[lan.bt.php_max_children] = rdata['max children reached'];

					arr[lan.bt.php_slow] = rdata['slow requests'];				

					

					var con = "<div style='height:450px;overflow:auto;'><table id='tab_php_status' class='table table-hover table-bordered GetPHPStatus' style='margin:0;padding:0'></table></div>";

					$(".soft-man-con").html(con);

					bt.render_table('tab_php_status',arr);

				})

				break;

			case 'get_fpm_logs':

				bt.soft.php.get_fpm_logs(name,function(logs){

					var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';

					$(".soft-man-con").html(phpCon);

					var ob = document.getElementById('error_log');

					ob.scrollTop = ob.scrollHeight;		

				})

				break;

			case 'get_slow_logs':

				bt.soft.php.get_slow_logs(name,function(logs){

					var phpCon = '<textarea readonly="" style="margin: 0px;width: 500px;height: 520px;background-color: #333;color:#fff; padding:0 5px" id="error_log">'+logs.msg+'</textarea>';

					$(".soft-man-con").html(phpCon);

					var ob = document.getElementById('error_log');

					ob.scrollTop = ob.scrollHeight;		

				})

				break;

			case 'get_redis_status':

				bt.soft.redis.get_redis_status(function(rdata){					

					hit = (parseInt(rdata.keyspace_hits) / (parseInt(rdata.keyspace_hits) + parseInt(rdata.keyspace_misses)) * 100).toFixed(2);

					var Con = '<div class="divtable">\

									<table class="table table-hover table-bordered" style="width: 490px;">\

									<thead><th>字段</th><th>当前值</th><th>说明</th></thead>\

									<tbody>\

										<tr><th>uptime_in_days</th><td>'+rdata.uptime_in_days+'</td><td>已运行天数</td></tr>\

										<tr><th>tcp_port</th><td>'+rdata.tcp_port+'</td><td>当前监听端口</td></tr>\

										<tr><th>connected_clients</th><td>'+rdata.connected_clients+'</td><td>连接的客户端数量</td></tr>\

										<tr><th>used_memory_rss</th><td>'+ToSize(rdata.used_memory_rss)+'</td><td>Redis当前占用的系统内存总量</td></tr>\

										<tr><th>used_memory</th><td>'+ToSize(rdata.used_memory)+'</td><td>Redis当前已分配的内存总量</td></tr>\

										<tr><th>used_memory_peak</th><td>'+ToSize(rdata.used_memory_peak)+'</td><td>Redis历史分配内存的峰值</td></tr>\

										<tr><th>mem_fragmentation_ratio</th><td>'+rdata.mem_fragmentation_ratio+'%</td><td>内存碎片比率</td></tr>\

										<tr><th>total_connections_received</th><td>'+rdata.total_connections_received+'</td><td>运行以来连接过的客户端的总数量</td></tr>\

										<tr><th>total_commands_processed</th><td>'+rdata.total_commands_processed+'</td><td>运行以来执行过的命令的总数量</td></tr>\

										<tr><th>instantaneous_ops_per_sec</th><td>'+rdata.instantaneous_ops_per_sec+'</td><td>服务器每秒钟执行的命令数量</td></tr>\

										<tr><th>keyspace_hits</th><td>'+rdata.keyspace_hits+'</td><td>查找数据库键成功的次数</td></tr>\

										<tr><th>keyspace_misses</th><td>'+rdata.keyspace_misses+'</td><td>查找数据库键失败的次数</td></tr>\

										<tr><th>hit</th><td>'+hit+'%</td><td>查找数据库键命中率</td></tr>\

										<tr><th>latest_fork_usec</th><td>'+rdata.latest_fork_usec+'</td><td>最近一次 fork() 操作耗费的微秒数</td></tr>\

									<tbody>\

							</table></div>'

						$(".soft-man-con").html(Con);

				})

				break;

		}



	}, //软件设置

	set_soft_config:function(name){

		_this = this;

		var loading = bt.load();

		_this.get_soft_find(name,function(rdata){

			loading.close();

			var menu = '';

			if(rdata.version_coexist)

            {		               

				var ver =  name.split('-')[1].replace('.','');

				bodys = [	

					'<p id="phpext" onclick="bt.soft.get_tab_contents(\'set_php_config\',\''+ver+'\')" data-id="1">'+lan.soft.php_main5+'</p>',					

					'<p data-id="1" onclick="bt.soft.get_tab_contents(\'config_edit\',\''+ver+'\')">'+lan.soft.config_edit+'</p>',					

					'<p data-id="3" onclick="bt.soft.get_tab_contents(\'set_upload_limit\',\''+ver+'\')"  >'+lan.soft.php_main2+'</p>',

					'<p data-id="4" class="phphide" onclick="bt.soft.get_tab_contents(\'set_timeout_limit\',\''+ver+'\')"  >'+lan.soft.php_main3+'</p>',

					'<p data-id="4" onclick="bt.soft.get_tab_contents(\'config\',\''+ver+'\')"  >'+lan.soft.php_main4+'</p>',

					'<p data-id="4" onclick="bt.soft.get_tab_contents(\'set_dis_fun\',\''+ver+'\')"  >'+lan.soft.php_main6+'</p>',

					'<p class="apache24 phphide" data-id="4" onclick="bt.soft.get_tab_contents(\'set_fpm_config\',\''+ver+'\')"  >'+lan.soft.php_main7+'</p>',

					'<p class="apache24 phphide" data-id="4" onclick="bt.soft.get_tab_contents(\'get_php_status\',\''+ver+'\')"  >'+lan.soft.php_main8+'</p>',

					'<p class="apache24 phphide" data-id="4" onclick="bt.soft.get_tab_contents(\'get_fpm_logs\',\''+ver+'\')"  >FPM'+lan.soft.log+'</p>',

					'<p class="apache24 phphide" data-id="4" onclick="bt.soft.get_tab_contents(\'get_slow_logs\',\''+ver+'\')"  >'+lan.public.slow_log+'</p>',

					'<p data-id="2" onclick="bt.soft.get_tab_contents(\'get_phpinfo\',\''+ver+'\')"  >phpinfo</p>'

				]

				var  phpSort = [0,1,2,3,4,5,6,7,8,9,10,11];				

				for(var i=0;i<phpSort.length;i++){

					var m = bodys[phpSort[i]];

					if(m) menu += m;					

				}						

			}

			else{			

				if(name =='mysql') name='mysqld';

				if(name=='phpmyadmin'){

					menu = bt.soft.get_config_menu(name,rdata.ext);	

				}

				else{				

                    menu = bt.soft.get_config_menu(name, rdata.version, rdata.versions);	                   

                }              

            }            

            menu = '<p class="bgw bt_server" onclick="bt.soft.get_tab_contents(\'service\',\'' + name + '\',\'' + rdata.status + '\')">' + lan.soft.service + '</p>' + menu

			layer.open({

				type: 1,

				area: '640px',

				title: name + lan.soft.admin,

				closeBtn: 2,

				shift: 0,

				content: '<div class="bt-w-main" style="width:640px;">\

					<div class="bt-w-menu">'

						+menu+

					'</div>\

					<div id="webEdit-con" class="bt-w-con pd15" style="height:555px;overflow:auto">\

						<div class="soft-man-con"></div>\

					</div>\

				</div>'

            });

           

			if(name== "php-5.2"){

				$(".phphide").hide();

            }

            if (name == 'phpmyadmin') {

                $(".bt_server").remove();

            }

           

			bt.soft.get_tab_contents('service',name,rdata.status);

			$(".bt-w-menu p").click(function(){						

				$(this).addClass("bgw").siblings().removeClass("bgw");

            });	

            _this.get_soft_find('apache', function (rdata) {

                if (rdata.setup) {                  

                    if (rdata.version.indexOf('2.2') >= 0) {

                        $(".apache24").hide();

                        $(".bt_server").remove();

                        $(".bt-w-menu p:eq(0)").trigger("click");

                    }

                }

            })  



            $(".bt-w-menu p:eq(0)").trigger("click");	

		})

	},

	get_config_path:function(name){

		var fileName = '';

		if(bt.os=='Linux'){

			switch(name){

				case 'mysqld':

					fileName = '/etc/my.cnf';

					break;

				case 'nginx':

					fileName = '/www/server/nginx/conf/nginx.conf';

					break;

				case 'pureftpd':

					fileName = '/www/server/pure-ftpd/etc/pure-ftpd.conf';

					break;

				case 'apache':

					fileName = '/www/server/apache/conf/httpd.conf';

					break;

				case 'tomcat':

					fileName = '/www/server/tomcat/conf/server.xml';

					break;

				case 'memcached':

					fileName = '/etc/init.d/memcached';

					break;

				case 'redis':

					fileName = '/www/server/redis/redis.conf';

					break;

				default:

					fileName = '/www/server/php/'+name+'/etc/php.ini';

					break;

			}

		}

		return fileName

	},

	set_lib_config:function(name,title){		

		var loadT = bt.load(lan.soft.menu_temp);

		bt.send('getConfigHtml','plugin/getConfigHtml',{name:name},function(rhtml){

			loadT.close();

			if(rhtml.status === false){

				if(name == "phpguard"){

					layer.msg(lan.soft.menu_phpsafe,{icon:1})

				}

				else{

					layer.msg(rhtml.msg,{icon:2});

				}

				return;

			}

			bt.open({

				type: 1,

				shift: 5,

				offset: '20%',

				closeBtn: 2,

				area: '700px', 

				title: ''+ title,

				content: rhtml

            });

            rtmp = rhtml.split('<script type="javascript/text">')

            if (rtmp.length < 2) {

                rtmp = rhtml.split('<script type="text/javascript">')

            }

            rcode = rtmp[1].replace('</script>','');

			setTimeout(function(){

				if(!!(window.attachEvent && !window.opera)){ 

                    execScript(rcode); 

				}else{

                    window.eval(rcode);

				}

			},200)		

		});

	},

	save_config:function(fileName,data){

		var encoding = 'utf-8';

		var loadT = bt.load(lan.soft.the_save);

		bt.send('SaveFileBody','files/SaveFileBody',{data:data,path:fileName,encoding:encoding},function(rdata){

			loadT.close();

			bt.msg(rdata);

		})

	}

	

}





bt.database = {

	get_list : function(page,search,callback)

	{

		if(page == undefined) page = 1

		search = search == undefined ? '':search;

		var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order'):'';

		

		var data = 'tojs=database.get_list&table=databases&limit=15&p='+page+'&search='+search + order; 

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_root_pass:function(callback){

		bt.send('getKey','data/getKey',{table:'config',key:'mysql_root',id:1},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_root : function(){

		bt.database.get_root_pass(function(rdata){

			var bs = bt.render_form(bt.data.database.root);

			$('.password'+bs).val(rdata);

		})		

	},

	set_data_pass:function(callback){

		var bs = bt.render_form(bt.data.database.data_pass,function(rdata){

			if(callback) callback(rdata);

		});

		return bs;

	},

	set_data_access:function(name){

		var loading = bt.load();

		bt.send('GetDatabaseAccess','database/GetDatabaseAccess',{name:name},function(rdata){

			loading.close();

			var bs = bt.render_form(bt.data.database.data_access);

			$('.name'+bs).val(name);

			setTimeout(function(){

				if(rdata.msg=='127.0.0.1' || rdata.msg =='%'){

					$('.dataAccess'+bs).val(rdata.msg)

				}

				else{

					$('.dataAccess'+bs).val('ip').trigger('change');

					$('#dataAccess_subid').val(rdata.msg);	

				}			

			},100)

		})		

	},

	add_database:function(callback){

		bt.render_form(bt.data.database.data_add,function(rdata){		

			if(callback) callback(rdata);

		});				

	},

	del_database:function(data,callback){

		var loadT = bt.load(lan.get('del_all_task_the',[data.name]));

		bt.send('DeleteDatabase','database/DeleteDatabase',data,function(rdata){

			loadT.close();	

			bt.msg(rdata);

			if(callback) callback(rdata);

		})	

	},

	sync_database:function(callback){

		var loadT = bt.load(lan.database.sync_the);

		bt.send('SyncGetDatabases','database/SyncGetDatabases',{},function(rdata){	

			loadT.close();			

			if(callback) callback(rdata);

			bt.msg(rdata);

		});

	},

	sync_to_database:function(data,callback){

		var loadT = bt.load(lan.database.sync_the);

		bt.send('SyncToDatabases','database/SyncToDatabases',data,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

			bt.msg(rdata);

		})

	},

	open_phpmyadmin:function(name,username,password){

		if($("#toPHPMyAdmin").attr('action').indexOf('phpmyadmin') == -1){

		layer.msg(lan.database.phpmyadmin_err,{icon:2,shade: [0.3, '#000']})

		setTimeout(function(){ window.location.href = '/soft'; },3000);

			return;

		}

		var murl = $("#toPHPMyAdmin").attr('action');

		$("#pma_username").val(username);

		$("#pma_password").val(password);

		$("#db").val(name);

		layer.msg(lan.database.phpmyadmin,{icon:16,shade: [0.3, '#000'],time:1000});

		setTimeout(function(){

			$("#toPHPMyAdmin").submit();

		},200);

	},

	input_sql:function(fileName,dataName){

		bt.confirm({msg:lan.database.input_confirm,title:lan.database.input_title},function(index){

			var loading = bt.load(lan.database.input_the);

			bt.send('InputSql','database/InputSql',{file:fileName,name:dataName},function(rdata){

				loading.close();

				bt.msg(rdata);

			})

		});		

	},

	backup_data:function(id,dataname,callback){

		var loadT = bt.load(lan.database.backup_the);

		bt.send('ToBackup','database/ToBackup',{id:id},function(rdata){

			loadT.close();			

			bt.msg(rdata);

			if(callback) callback(rdata);

		});



	},

	del_backup:function(id,dataid,dataname){

		bt.confirm({msg:lan.database.backup_del_confirm,title:lan.database.backup_del_title},function(index){

			var loadT = bt.load();

			bt.send('DelBackup','database/DelBackup',{id:id},function(frdata){

				loadT.close();

				if(frdata.status){

					if(database) database.database_detail(dataid,dataname);

				}

				bt.msg(frdata);

			});

		});

	}

}



bt.send('get_config','config/get_config',{},function(rdata){

	bt.config = rdata;

})



bt.plugin = {

	get_plugin_byhtml:function(name,callback){

		bt.send('getConfigHtml','plugin/getConfigHtml',{name:name},function(rdata){

			if(callback) callback(rdata);

		});		

	},

	get_firewall_state:function(callback){		

		var typename = getCookie('serverType');

		var name = 'btwaf_httpd';

		if(typename == "nginx") name='btwaf'		

		bt.send('a','plugin/a',{name:name,s:'get_site_config'},function(rdata){

			if(callback) callback(rdata);

		})

	}

}



bt.site = {

	get_list : function(page,search,type,callback)

	{

		if(page == undefined) page = 1

		type = type == undefined ? '&type=-1' : ('&type='+ type);

		search = search == undefined ? '':search;

		var order = bt.get_cookie('order') ? '&order=' + bt.get_cookie('order'):'';		

		var data = 'tojs=site.get_list&table=sites&limit=15&p='+page+'&search='+search + order + type;

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_domains:function(id,callback){

		var data = 'table=domain&list=True&search='+id;

		bt.pub.get_data(data,function(rdata){

			if(callback) callback(rdata);

		},1)

	},

	get_type:function(callback){

		bt.send('get_site_types','site/get_site_types','',function(rdata){

			if(callback) callback(rdata);

		});

	},

	add_type:function(name,callback){

		bt.send('add_site_type','site/add_site_type',{name:name},function(rdata){

			if(callback) callback(rdata);

		});

	},

	edit_type:function(data,callback){

        bt.send('modify_site_type_name','site/modify_site_type_name',{id:data.id,name:data.name},function(rdata){

			if(callback) callback(rdata);

		});

	},

	del_type:function(id,callback){

        bt.send('remove_site_type','site/remove_site_type',{id:id},function(rdata){

			if(callback) callback(rdata);

		});

	},

	set_site_type:function(data,callback){

        bt.send('set_site_type','site/set_site_type',{id:data.id,site_ids:data.site_array},function(rdata){

			if(callback) callback(rdata);

		});

	},

	get_site_domains:function(id,callback){

		var loading =  bt.load();

		bt.send('GetSiteDomains','site/GetSiteDomains',{id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	add_domains:function(id,webname,domains,callback){

		var loading = bt.load();

		bt.send('AddDomain','site/AddDomain',{domain:domains,webname:webname,id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

			bt.msg(rdata);

		})

	},

	del_domain:function(siteId,siteName,domain,port,callback){

		var loading = bt.load();

		bt.send('DelDomain','site/DelDomain',{id:siteId,webname:siteName,domain:domain,port:port},function(rdata){

			loading.close();

			if(callback) callback(rdata);

			bt.msg(rdata);

		})

	},

	get_dirbind:function(id,callback){

		var loading =  bt.load();

		bt.send('GetDirBinding','site/GetDirBinding',{id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	add_dirbind:function(id,domain,dirName,callback){

		var loading =  bt.load();

		bt.send('AddDirBinding','site/AddDirBinding',{id:id,domain:domain,dirName:dirName},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	del_dirbind:function(id,callback){

		var loading = bt.load();

		bt.send('DelDirBinding','site/DelDirBinding',{id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_dir_rewrite:function(data,callback){

		var loading = bt.load();

		bt.send('GetDirRewrite','site/GetDirRewrite',data,function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_site_path:function(id,callback){

		bt.send('getKey','data/getKey',{table:'sites',key:'path',id:id},function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_dir_userini:function(id,path,callback){

		bt.send('GetDirUserINI','site/GetDirUserINI',{id:id,path:path},function(rdata){

			if(callback) callback(rdata);

		})		

	},

	set_dir_userini:function(path,callback){

		var loading = bt.load();

		bt.send('SetDirUserINI','site/SetDirUserINI',{path:path},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_logs_status:function(id,callback){

		var loading = bt.load();

		bt.send('logsOpen','site/logsOpen',{id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_site_runpath:function(id,path,callback){

		var loading = bt.load();

		bt.send('SetSiteRunPath','site/SetSiteRunPath',{id:id,runPath:path},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_site_path:function(id,path,callback){

		var loading = bt.load();

		bt.send('SetPath','site/SetPath',{id:id,path:path},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

    set_site_pwd: function (id, username, password, callback){

		var loading = bt.load();

		bt.send('SetHasPwd','site/SetHasPwd',{id:id,username:username,password:password},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

    },

    close_site_pwd: function (id, callback) {

        var loading = bt.load();

        bt.send('SetHasPwd', 'site/CloseHasPwd', { id: id}, function (rdata) {

            loading.close();

            if (callback) callback(rdata);

        })

    },

	get_limitnet:function(id,callback){

		bt.send('GetLimitNet','site/GetLimitNet',{id:id},function(rdata){

			if(callback) callback(rdata);

		})	

	},

	set_limitnet:function(id,perserver,perip,limit_rate,callback){

		var loading = bt.load();

		bt.send('SetLimitNet','site/SetLimitNet',{id:id,perserver:perserver,perip:perip,limit_rate:limit_rate},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	close_limitnet:function(id,callback){

		var loading = bt.load();

		bt.send('CloseLimitNet','site/CloseLimitNet',{id:id},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_rewrite_list:function(siteName,callback){

		bt.send('GetRewriteList','site/GetRewriteList',{siteName:siteName},function(rdata){

			if(callback) callback(rdata);

		})		

	}, 

	set_rewrite_tel:function(name,data,callback){

		var loading = bt.load(lan.site.saving_txt);

		bt.send('SetRewriteTel','site/SetRewriteTel',{name:name,data:data},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})	

	},

	get_index:function(id,callback){

		bt.send('GetIndex','site/GetIndex',{id:id},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_index:function(id,index,callback){

		var loading = bt.load();

		bt.send('SetIndex','site/SetIndex',{id:id,Index:index},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_site_config:function(siteName,callback){

		if(bt.os=='Linux'){

			var sPath = '/www/server/panel/vhost/'+bt.get_cookie('serverType')+'/'+siteName+'.conf';

			bt.files.get_file_body(sPath,function(rdata){

				if(callback) callback(rdata);

			})

		}

	},

	set_site_config:function(siteName,data,encoding,callback){

		var loading = bt.load(lan.site.saving_txt);

		if(bt.os=='Linux'){

			var sPath = '/www/server/panel/vhost/'+bt.get_cookie('serverType')+'/'+siteName+'.conf';

			bt.files.set_file_body(sPath,data,'utf-8',function(rdata){

				loading.close();

				if(callback) callback(rdata);

			})

		}

	},

	set_phpversion:function(siteName,version,callback){

		var loading = bt.load();

		bt.send('SetPHPVersion','site/SetPHPVersion',{siteName:siteName,version:version},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_site_proxy:function(siteName ,callback){

		bt.send('GetProxy','site/GetProxy',{name :siteName },function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_site_proxy:function(siteName,type,proxyUrl,toDomain,sub1,sub2,callback){

		var loading = bt.load();

		bt.send('SetProxy','site/SetProxy',{name:siteName,type:type,proxyUrl:proxyUrl,toDomain:toDomain,sub1:sub1,sub2:sub2},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_open_proxy_cache:function(siteName,callback){

		var loading = bt.load();

		bt.send('ProxyCache','site/ProxyCache',{siteName:siteName},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_proxy_list:function(name,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('GetProxyList','site/GetProxyList',{sitename:name },function(rdata){

			loadT.close();

			if(callback) callback(rdata);

		})

	},

	create_proxy:function(obj,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('CreateProxy','site/CreateProxy',obj,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

		});

	},

	remove_proxy:function(sitename,proxyname,callback){

		bt.show_confirm('删除反向代理['+ proxyname +']','您真的要从列表中删除吗?',function(){

			var loadT = bt.load(lan.site.the_msg);

			bt.send('RemoveProxy','site/RemoveProxy',{sitename:sitename,proxyname:proxyname},function(rdata){

				loadT.close();			

				if(callback) callback(rdata);	

				bt.msg(rdata);

			})	

		})

	},

	modify_proxy:function(obj,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('ModifyProxy','	site/ModifyProxy',obj,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

		});

	},

	get_proxy_config:function(obj,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('GetProxyFile','site/GetProxyFile',obj,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

		});

	},

	save_proxy_config:function(obj,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('SaveProxyFile','site/SaveProxyFile',obj,function(rdata){

			loadT.close();

			if(callback) callback(rdata);

		});

	},

	get_site_security:function(id,name,callback){

		bt.send('GetSecurity','site/GetSecurity',{id:id,name:name },function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_site_security:function(id,name,fix,domains,status,callback){

		var loading = bt.load(lan.site.the_msg);

		bt.send('SetSecurity','site/SetSecurity',{id:id,name:name,fix:fix,domains:domains,status:status},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_site_301:function(siteName,callback){

		bt.send('Get301Status','site/Get301Status',{siteName:siteName},function(rdata){

			if(callback) callback(rdata);

		})

	},

	set_site_301:function(siteName,srcDomain,toUrl,type,callback){

		var loading = bt.load();

		bt.send('Set301Status','site/Set301Status',{siteName:siteName,toDomain:toUrl,srcDomain:srcDomain,type:type},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_tomcat:function(siteName,callback){

		var loading = bt.load(lan.public.config);

		bt.send('SetTomcat','site/SetTomcat',{siteName:siteName},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	get_site_logs:function(siteName,callback){

		var loading = bt.load();

		bt.send('GetSiteLogs','site/GetSiteLogs',{siteName:siteName},function(rdata){

			loading.close();

			if(rdata.status !== true) rdata.msg = '';

			if (rdata.msg == '') rdata.msg = '当前没有日志.';

			if(callback) callback(rdata);

		})

	},

	get_site_ssl:function(siteName,callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('GetSSL','site/GetSSL',{siteName:siteName},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})	

	},

	create_let:function(data,callback){

		var loadT = bt.load(lan.site.ssl_apply_2);

		bt.send('CreateLet','site/CreateLet',data,function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})			

	},	

	get_dns_api:function(callback){		

		var loadT = bt.load();

		bt.send('GetDnsApi','site/GetDnsApi',{},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})	

	},

	set_dns_api:function(data,callback){

		var loadT = bt.load();

		bt.send('SetDnsApi','site/SetDnsApi',data,function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})	

	},

	verify_domain:function(partnerOrderId,siteName,callback){

		var loadT = bt.load(lan.site.ssl_apply_2);

		bt.send('Completed','ssl/Completed',{partnerOrderId:partnerOrderId,siteName:siteName},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})

	},

	get_dv_ssl:function(domain,path,callback){

		var loadT = bt.load(lan.site.ssl_apply_1);

		bt.send('GetDVSSL','ssl/GetDVSSL',{domain:domain,path:path},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})

	},

	get_ssl_info:function(partnerOrderId,siteName,callback){

		var loadT = bt.load(lan.site.ssl_apply_3);

		bt.send('GetSSLInfo','ssl/GetSSLInfo',{partnerOrderId:partnerOrderId,siteName:siteName},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})	

	},

	set_cert_ssl:function(certName,siteName,callback){

		var loadT = bt.load('正在部署证书...');

		bt.send('SetCertToSite','ssl/SetCertToSite',{certName:certName,siteName:siteName},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);	

			bt.msg(rdata);

		})	

	},

	remove_cert_ssl:function(certName,callback){

		bt.show_confirm('删除证书','您真的要从证书夹删除证书吗?',function(){

			var loadT = bt.load(lan.site.the_msg);

			bt.send('RemoveCert','ssl/RemoveCert',{certName:certName},function(rdata){

				loadT.close();			

				if(callback) callback(rdata);	

				bt.msg(rdata);

			})	

		})

	},

	set_http_to_https:function(siteName,callback){	

		var loading = bt.load();

		bt.send('HttpToHttps','site/HttpToHttps',{siteName:siteName},function(rdata){	

			loading.close();

			if(callback) callback(rdata);	

			bt.msg(rdata);

		})	

	},

	close_http_to_https:function(siteName,callback){

		var loading = bt.load();

		bt.send('CloseToHttps','site/CloseToHttps',{siteName:siteName},function(rdata){	

			loading.close();

			if(callback) callback(rdata);	

			bt.msg(rdata);

		})	

	},

	set_ssl:function(siteName,data,callback){

		if(data.path){

			//iis导入证书

		}

		else{

			var loadT = bt.load(lan.site.saving_txt);

			bt.send('SetSSL','site/SetSSL',{type:1,siteName:siteName,key:data.key,csr:data.csr},function(rdata){

				loadT.close();			

				if(callback) callback(rdata);		

			})

		}			

	},

	set_ssl_status:function(action,siteName,callback){

		var loadT = bt.load(lan.site.get_ssl_list);

		bt.send(action,'site/'+action,{updateOf:1,siteName:siteName},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})

	},

	get_cer_list:function(callback){

		var loadT = bt.load(lan.site.the_msg);

		bt.send('GetCertList','ssl/GetCertList',{},function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})	

	},

	get_order_list:function(siteName,callback){

		bt.send('GetOrderList','ssl/GetOrderList',{siteName:siteName},function(rdata){

			if(callback) callback(rdata);

		})

	},

	del_site:function(data,callback){	

		var loadT = bt.load(lan.get('del_all_task_the',[data.webname]));

		bt.send('DeleteSite','site/DeleteSite',data,function(rdata){

			loadT.close();			

			if(callback) callback(rdata);		

		})		

	},

	add_site:function(callback)

    {

		var _form = $.extend(true, {}, bt.data.site.add);

        bt.site.get_all_phpversion(function (rdata) {

            bt.site.get_type(function (tdata) {                 

			    for(var i=0;i<_form.list.length;i++){

                    if (_form.list[i].name == 'version') {

                        var items = [];

                        for (var j = rdata.length - 1; j >= 0; j--) {

                            var o = rdata[j];

                            o.value = o.version;

                            o.title = o.name;

                            items.push(o);

                        }

                        _form.list[i].items = items;

                    }

                    else if (_form.list[i].name == 'type_id') {

                        for (var x = 0; x < tdata.length; x++)  _form.list[i].items.push({ value: tdata[x].id, title: tdata[x].name });                                              

                    }

			    }

			    var bs = bt.render_form(_form,function(rdata){	

				    if(callback) callback(rdata);

			    });			

			    $(".placeholder").click(function(){

				    $(this).hide();

				    $('.webname'+bs).focus();

                })

                $('.path' + bs).val($("#defaultPath").text());

			    $('.webname'+bs).focus(function() {

			        $(".placeholder").hide();

			    });			

			    $('.webname'+bs).blur(function() {

				    if($(this).val().length==0){

					    $(".placeholder").show();

				    }  

                });

            })

		})			

	},	

	get_all_phpversion:function(callback){

		bt.send('GetPHPVersion','site/GetPHPVersion',{},function(rdata){

			if(callback) callback(rdata);

		})

	},

	get_site_phpversion:function(siteName,callback){

		bt.send('GetSitePHPVersion','site/GetSitePHPVersion',{siteName:siteName},function(rdata){

			if(callback) callback(rdata);

		})

	},

	stop:function(id,name){

		bt.confirm({msg:lan.site.site_stop_txt},function(index){

			if (index > 0) {

				var loadT = bt.load();

				bt.send('SiteStop','site/SiteStop',{id:id,name:name},function(ret){

					loadT.close();

					if(site) site.get_list();

					bt.msg(ret);

				});

			}

		});

	},

	start:function(id,name){

		bt.confirm({msg:lan.site.site_start_txt},function(index){

			if (index > 0) {

				var loadT = bt.load();

				bt.send('SiteStart','site/SiteStart',{id:id,name:name},function(ret){

					loadT.close();

					if(site) site.get_list();

					bt.msg(ret);

				});

			}

		});

	},

	backup_data:function(id,callback){

		var loadT = bt.load(lan.database.backup_the);

		bt.send('ToBackup','site/ToBackup',{id:id},function(rdata){

			loadT.close();			

			bt.msg(rdata);

			if(callback) callback(rdata);

		});

	},

	del_backup:function(id,siteId,siteName){

		bt.confirm({msg:lan.site.webback_del_confirm,title:lan.site.del_bak_file},function(index){

			var loadT = bt.load();

			bt.send('DelBackup','site/DelBackup',{id:id},function(frdata){

				loadT.close();

				if(frdata.status){

					if(site) site.site_detail(siteId,siteName);

				}

				bt.msg(frdata);

			});

		});

	},

	set_endtime:function(id,dates){

		var loadT = bt.load(lan.site.saving_txt); 

	 	bt.send('SetEdate','site/SetEdate',{id:id,edate:dates},function(rdata){

          loadT.close();          

        });

	},

	get_default_path:function(type,callback){

		var vhref='';

		if(bt.os=='Linux'){			

			switch(type){

				case 0:

					vhref = '/www/server/panel/data/defaultDoc.html';

					break;

				case 1:

					vhref = '/www/server/panel/data/404.html';

					break;

				case 2:

					var serverType = bt.get_cookie('serverType');

					vhref = '/www/server/apache/htdocs/index.html';					

					if(serverType=='nginx') vhref = '/www/server/nginx/html/index.html';					

					break;

				case 3:

					vhref = '/www/server/stop/index.html';

					break;

			}			

		}

		if(callback) callback(vhref);

	},

	get_default_site:function(callback){

		var loading = bt.load();

		bt.send('GetDefaultSite','site/GetDefaultSite',{},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})

	},

	set_default_site:function(name,callback){

		var loading = bt.load();

		bt.send('SetDefaultSite','site/SetDefaultSite',{name:name},function(rdata){

			loading.close();

			if(callback) callback(rdata);

		})		

	}

}







bt.form ={

	btn:{

		close:function(title,callback){

			var obj = {title:'关闭',name:'btn-danger'};

			if(title) obj.title = title;

			if(callback) obj['callback'] = callback;

			return obj;

		},

		submit:function(title,callback){

			var obj = {title:'提交',name:'submit',css:'btn-success'};

			if(title) obj.title = title;

			if(callback) obj['callback'] = callback;

			return obj;

		}

	},

	item:{

		data_access:{ title:'访问权限',items:[

					{name:'dataAccess',type:'select',width:'100px',items:[

					{title:'本地服务器',value:'127.0.0.1'},

					{title:'所有人',value:'%'},

					{title:'指定IP',value:'ip'}

				],callback:function(obj){

					var subid = obj.attr('name')+'_subid';

					$('#'+subid).remove();

					if(obj.val()=='ip'){

						obj.parent().append('<input id="'+subid+'" class="bt-input-text mr5" type="text" name="address" placeholder="多个IP使用逗号(,)分隔" style="width: 203px; display: inline-block;">');

					}

				}

			}

		]},

		password:{title:'密码',name:'password',items:[

			{type:'text',width:'311px',value:bt.get_random(16),event: {css:'glyphicon-repeat',callback:function(obj){bt.refresh_pwd(16,obj);}}}

		]},

	}

}



bt.data = {

	database:{

		root:{

			title : lan.database.edit_pass_title,

			area:'530px',

			list:[{title:'root密码',name:'password',items:[

					{type:'text',width:'311px',event: {css:'glyphicon-repeat',callback:function(obj){bt.refresh_pwd(16,obj);}}}

				]},

			],

			btns:[

				bt.form.btn.close(),	

				bt.form.btn.submit('提交',function(rdata,load){

					var loading = bt.load();

					bt.send('SetupPassword','database/SetupPassword',rdata,function(rRet){

						loading.close();

						bt.msg(rRet);

						load.close();

					})

				})

			]

		},

		data_add:{

			title:lan.database.add_title,

			area:'530px',

			list:[

				{title:'数据库名',items:[

					{name:'name',placeholder:'新的数据库名称',type:'text',width:'65%',callback:function(obj){				

						$('input[name="db_user"]').val(obj.val());

					}},

					{name:'codeing',type:'select',width:'27%',items:[

						{title:'utf-8',value:'utf8'},

						{title:'utf8mb4',value:'utf8mb4'},

						{title:'gbk',value:'gbk'},

						{title:'big5',value:'big5'},

					]}

				]},

				{title:'用户名',name:'db_user',placeholder:'数据库用户',width:'65%'},

				bt.form.item.password,

				{title:'类型',name:'dtype',type:'select',disabled:(bt.contains(bt.get_cookie('serverType'),'nginx') || bt.contains(bt.get_cookie('serverType'),'apache') ?true:false),items:[

					{title:'MySQL',value:'MySQL'},

					{title:'SQLServer',value:'SQLServer'}

				]},

				bt.form.item.data_access

			],

			btns:[

				bt.form.btn.close(),

				bt.form.btn.submit('提交',function(rdata,load,callback){		

					if(!rdata.address) rdata.address = rdata.dataAccess;

					if(!rdata.ps) rdata.ps = rdata.name;

					var loading = bt.load();

					bt.send('AddDatabase','database/AddDatabase',rdata,function(rRet){

						loading.close();						

						if(rRet.status) load.close();	

						if(callback) callback(rRet);

						bt.msg(rRet);

					})

				})

			]

		},

		data_access:{

			title:'设置数据库权限',

			area:'480px',

			list:[

				{title:'name',name:'name',hide:true},

				bt.form.item.data_access

			],

			btns:[

				bt.form.btn.close(),

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load){

					var loading = bt.load();

					rdata.access = rdata.dataAccess;

					if(rdata.access == 'ip') rdata.access = rdata.address;

					bt.send('SetDatabaseAccess','database/SetDatabaseAccess',rdata,function(rRet){

						loading.close();

						bt.msg(rRet);

						if(rRet.status) load.close();			

					})

				}}

			]

		},

		data_pass : {

			title:'修改数据库密码',

			area:'530px',

			list:[

				{title:'id',name:'id',hide:true},

				{title:'用户名',name:'name',disabled:true},

				{title:'密码',name:'password',items:[

					{type:'text',event: {css:'glyphicon-repeat',callback:function(obj){bt.refresh_pwd(16,obj);}}}

				]},

			],

			btns:[

				{title:'关闭',name:'close'},

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load,callback){

					var loading = bt.load();

					bt.send('ResDatabasePassword','database/ResDatabasePassword',rdata,function(rRet){

						loading.close();

						bt.msg(rRet);

						if(rRet.status) load.close();	

						if(callback) callback(rRet);

					})

				}}

			]

		}

	},

	site:{

		add:{

			title:lan.site.site_add,

			area: '640px',

			list:[

				{title:'域名',name:'webname',items:[

					{type:'textarea',width:'458px',callback:function(obj){

						var array = obj.val().split("\n");

						var ress =array[0].split(":")[0];

						var res = bt.strim(ress.replace(new RegExp(/([-.])/g), '_'));

						var ftp_user = res;

						var data_user = res;

						if(!isNaN(res.substr(0,1))){

							ftp_user='ftp_'+ftp_user;

                            data_user = 'sql_' + data_user;

                        }

                        if (data_user.length > 16) data_user = data_user.substr(0, 16)

						obj.data('ftp',ftp_user);

						obj.data('database',data_user);	

				

						$('.ftp_username').val(ftp_user);

						$('.datauser').val(data_user);

						

						var _form = obj.parents('div.bt-form');

						var _path_obj = _form.find('input[name="path"]');

                        var path = _path_obj.val();

                        var defaultPath = $('#defaultPath').text();

                        var dPath = bt.rtrim(defaultPath,'/');

						if(path.substr(0,dPath.length)==dPath) _path_obj.val(dPath+'/'+res);	

						_form.find('input[name="ps"]').val(ress);

					},placeholder:'每行填写一个域名,默认为80端口<br>泛解析添加方法 *.domain.com<br>如另加端口格式为 www.domain.com:88'}

				]},

				{title:'备注',name:'ps',placeholder:'网站备注'},

				{title:'根目录',name:'path',items:[

					{type:'text',width:'330px',event: {css:'glyphicon-folder-open',callback:function(obj){bt.select_path(obj);}}}

				]},

				{title:'FTP',items:[

					{name:'ftp',type:'select',items:[

						{value:'false',title:'不创建'},

						{value:'true',title:'创建'}						

					],callback:function(obj){

						var subid = obj.attr('name')+'_subid';

						$('#'+subid).remove();

						if(obj.val()=='true'){

							var _bs = obj.parents('div.bt-form').attr('data-id');

							var ftp_user = $('textarea[name="webname"]').data('ftp');							

							var item = {title:'FTP设置',items:[

								{name:'ftp_username',title:'用户名',width:'173px',value:ftp_user},

								{name:'ftp_password',title:'密码',width:'173px',value:bt.get_random(16)}

							],ps:'创建站点的同时,为站点创建一个对应FTP帐户,并且FTP目录指向站点所在目录。'}

							var _tr = bt.render_form_line(item)

				

							obj.parents('div.line').append('<div class="line" id='+subid+'>'+_tr.html+'</div>');

						}

					}}

				]},

				{title:'数据库',items:[

					{name:'sql',type:'select',items:[

						{value:'false',title:'不创建'},

						{value:'MySQL',title:'MySQL'},

						{value:'SQLServer',title:'SQLServer'}		

					],callback:function(obj){

						var subid = obj.attr('name')+'_subid';

						$('#'+subid).remove();

						if(obj.val()!='false')

						{

							if(bt.os=='Linux' && obj.val()=='SQLServer'){

								obj.val('false');

								bt.msg({msg:'Linux暂不支持SQLServer!',icon:2});

								return;

							}

							var _bs = obj.parents('div.bt-form').attr('data-id');

							var data_user =$('textarea[name="webname"]').data('database');

							var item = {title:'数据库设置',items:[

								{name:'datauser',title:'用户名',width:'173px',value:data_user},

								{name:'datapassword',title:'密码',width:'173px',value:bt.get_random(16)}

							],ps:'创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。'}

							var _tr = bt.render_form_line(item)

							obj.parents('div.line').append('<div class="line" id='+subid+'>'+_tr.html+'</div>');

						}

					}},

					{name:'codeing',type:'select',items:[

						{value:'utf8',title:'utf-8'},

						{value:'utf8mb4',title:'utf8mb4'},

						{value:'gbk',title:'gbk'},

						{value:'big5',title:'big5'}

					]}

				]},

				{title:'程序类型',type:'select',name:'type',disabled:(bt.contains( bt.get_cookie('serverType'),'IIS')?false:true),items:[

					{value:'PHP',title:'PHP'},

					{value:'Asp',title:'Asp'},

					{value:'Aspx',title:'Aspx'},					

				],callback:function(obj){

					if(obj.val()=='Asp' || obj.val()=='Aspx'){

						obj.parents('div.line').next().hide();

					}else{

						obj.parents('div.line').next().show();

					}

				}},

				{title:'PHP版本',name:'version',type:'select',items:[

					{value:'00',title:'纯静态'}

                ]

                }, {

                    title: '网站分类', name: 'type_id', type: 'select', items: [

                        

                    ]

                }

			],

			btns:[

				{title:'关闭',name:'close'},

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load,callback){

					var loading = bt.load();

					if(!rdata.webname){

						bt.msg({msg:'主域名格式不正确',icon:2});

						return;

					}

					var webname =  bt.replace_all(rdata.webname,'http:\\/\\/','');

					webname =  bt.replace_all(webname,'https:\\/\\/','');

					var arrs = webname.split('\n');		

					var list = [];

					var domain_name,port;					

					for (var i=0;i<arrs.length;i++) {

						if(arrs[i]){							

							var temp = arrs[i].split(':');	

							var item = {};

							item['name'] = temp[0]

							item['port'] = temp.length>1?temp[1]:80;					

							if(!bt.check_domain(item.name)){

								bt.msg({msg:lan.site.domain_err_txt,icon:2})

								return;

							}

							if(i>0) {

								list.push(arrs[i]);

							}else{

								domain_name = item.name;

								port = item.port;

							}

						}

					}	

					var domain = {};

					domain['domain'] = domain_name;

					domain['domainlist'] = list;

					domain['count'] = list.length;

					rdata.webname = JSON.stringify(domain);

                    rdata.port = port;

					bt.send('AddSite','site/AddSite',rdata,function(rRet){

						loading.close();																	

						if(rRet.siteStatus) load.close();	

						if(callback) callback(rRet);

					})

				}}

			]

        }       

	},

	ftp:{

		add:{

			title: lan.ftp.add_title,

			area:'530px',

			list:[

                { title: '用户名', name: 'ftp_username', callback: function (obj) {

                    var defaultPath = $('#defaultPath').text();

                    var wootPath = bt.rtrim(defaultPath,'/');

					if(bt.contains($('input[name="path"]').val(),wootPath)){						

						$('input[name="path"]').val(wootPath+'/'+obj.val())

					}

				}},

				{title:'密码',name:'ftp_password',items:[

					{type:'text',width:'330px',value:bt.get_random(16),event: {css:'glyphicon-repeat',callback:function(obj){bt.refresh_pwd(16,obj);}}}

				]},

				{title:'根目录',name:'path',items:[

					{type:'text',event: {css:'glyphicon-folder-open',callback:function(obj){bt.select_path(obj);}}}

				]}

			],

			btns:[

				{title:'关闭',name:'close'},

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load,callback){

					var loading = bt.load();

					if(!rdata.ps) rdata.ps = rdata.ftp_username; 

					bt.send('AddUser','ftp/AddUser',rdata,function(rRet){

						loading.close();						

						if(rRet.status) load.close();	

						if(callback) callback(rRet);

						bt.msg(rRet);

					})

				}}

			]

		},

		set_port:{

			title:lan.ftp.port_title,

			skin:'',

			area:'500px',

			list:[

				{title:'默认端口',name:'port',width:'250px'}

			],

			btns:[

				{title:'关闭',name:'close'},

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load,callback){

					var loading = bt.load();

					bt.send('setPort','ftp/setPort',rdata,function(rRet){

						loading.close();						

						if(rRet.status) load.close();	

						if(callback) callback(rRet);

						bt.msg(rRet);

					})

				}}

			]

		},

		set_password:{

			title:lan.ftp.pass_title,

			area:'530px',

			list:[

				{title:'id',name:'id',hide:true},

				{title:'用户名',name:'ftp_username',disabled:true},

				{title:'密码',name:'new_password',items:[

					{type:'text',event: {css:'glyphicon-repeat',callback:function(obj){bt.refresh_pwd(16,obj);}}}

				]},

			],

			btns:[

				{title:'关闭',name:'close'},

				{title:'提交',name:'submit',css:'btn-success',callback:function(rdata,load,callback){

					bt.confirm({msg:lan.ftp.pass_confirm,title: lan.ftp.stop_title},function(){

							var loading = bt.load();

							bt.send('SetUserPassword','ftp/SetUserPassword',rdata,function(rRet){

								loading.close();						

								if(rRet.status) load.close();	

								if(callback) callback(rRet);

								bt.msg(rRet);

							})				

						})

					}

				}

			]

		}

	}

}