/*
 文件名：pub_fun.js
 功能：公共函数库
 时间：2007-4-2 add by linzc
 */
/*
 ****************涵数列表************************
 功能：封装了document.getElementById(idVal)和return document.all[idVal];
 function getElById(idVal)
 功能： 用于全选Select栏所有的option.
 function sltAll(sId)
 功能：禁用或者启用相对应的控件，如Select栏，Text栏等等。
 function enbWin(obj, bSta)
 功能： 判断字符串是否为空,为空返回true,否则返回false
 function isEmpty(str)
 功能：如果输入是数字,返回true,否则返回false
 function isNumber(str)
 功能：如果输入是合法字符串,返回true,否则返回false
 function isValidChar(sStr)
 功能：
 function isCH(sStr)
 功能：对输入的IP地址进行校验,格式为xx.xx.xx.xx
 function validateIP(IPstr)
 功能：对输入的Mask地址进行校验
 function validateMask(sMask)
 ??:MAC?????
 function validateMAC(MACstr)
 功能：是否是空串
 function isZeroStr(szVal)
 功能：去除字符串两边空格
 function Trim(szVal)
 功能：端口合法性验证，合法返回TRUE。
 function validatePort(port)
 功能：返回产品名称，用来区分产品
 function gerproduce()
 功能：返回所有物理接口描述字符串
 function get_intf_all()
 功能：返回指定物理接口描述字符串
 function get_intf_single(intfname)
 功能：返回LAN口数目
 function get_lan_port_num()
 功能：验证IP掩码是否匹配
 function ip_mask_match(ipstr,maskstr)
 功能：检查字符串中是否包含空格
 function has_space(str_in)
 function QueryString(name)
 ??:??url???name???????
 function get_url_par()
 ??:?????url???????(?????)
 function set_url_par(name,value,urlpar)
 ??:?url??????????name???value
 */
/********************
 控件相关的公用函数集
 *********************/
/*
 function enCtl(vId)
 function foCtl(vId)
 function diCtl(vId)
 */

/**
 * 添加npe 内网口是否加入链路聚合口判读
 * @type {Object}
 */
var PF = PF || {};
PF = {
    getHardtype: function(){
        var data = request('exec','show version\r\n'), SYS_DESP = 'System description', ret, len = data && data.length;

        for(var i = 0;i < len;i++){
            var n = data[i];
            if(n.indexOf(SYS_DESP) != -1){
                var match = n.match(/\((\w+)\)/);
                ret = match && match[1];
                return false;
            }
        }
        return ret;
    },
    isBridge: function(){
        var data = request('exec','show sys-mode')[1];
        if(!data) return false;
        if(data.indexOf('gateway') != -1){
            return false;
        }else{
            return true;
        }
    },
    /**
     * 存储聚合口数据
     */
    renderAgSummary: function(){
        var DEVICE_NPE = 'NPE40/NPE50E/NPE60E';
        if(DEVICE_NPE.indexOf(PF.getHardtype() != -1 && !PF.isBridge())){
            var data = request('exec','sh aggregatePort summary\r\n');

            data = data.slice(2);
            data.pop();
            PF.agData = data;
        }
    },
    isJoinAg: function(port){
        var ret = false, data;

        if(typeof PF.agData == 'undefined'){
            this.renderAgSummary();
        }
        data = PF.agData;
        if(data){
            var len, aPort = [], sPort = '';

            len = data.length;
            for(var i = 0;i < len;i++ ){
                var item = $.trim(data[i]).replace(/\s+/g,' ').split(' ');
                if(item[0].indexOf('Ag') != -1){
                    aPort.push(item[2]);
                }else{
                    aPort.push(item[1]);
                }
            }
            sPort = aPort.join('&');
            if(sPort.indexOf(port) != -1){
                return true;
            }
        }
        return ret;
    },
    filter: function(v){
        return v.indexOf("(") != -1 ? v.substring(0, v.indexOf("(")) : v;
    },
    isIE: function() {
		return $.browser.msie;
    }
};

var bridgeMap = null;

function reLogin() {
	parent.parent.window.location = getUrl();
}

function getUrl() {
	var url = location.href;
	if (url.search(/^http/) != -1) {
		return url.substring(0, url.indexOf("\/", url.indexOf("\/\/") + 2) + 1) + "index.htm";
	}
	else {
		return "index.htm";
	}
}

function GetServerDate(){
	var DateStr = request("exec", "show clock")[0]
	var DateArr = DateStr.split(/\s/);
	var YearStr = DateArr[5];
	var MonthStr = GetMonthNum(DateArr[3]);
	var DayStr = DateArr[4].replace(',', "");
	var NewDate = new Date();
	NewDate.setDate(DayStr);
	NewDate.setMonth(MonthStr);
	NewDate.setFullYear(YearStr);
	return NewDate;
}

function GetMonthNum(MonthStr){
	if (MonthStr.indexOf("Jan") != -1){
		return 0;
	}else if (MonthStr.indexOf("Feb") != -1){
		return 1;
	}else if (MonthStr.indexOf("Mar") != -1){
		return 2;
	}else if (MonthStr.indexOf("Apr") != -1){
		return 3;
	}else if (MonthStr.indexOf("May") != -1){
		return 4;
	}else if (MonthStr.indexOf("Jun") != -1){
		return 5;
	}else if (MonthStr.indexOf("Jul") != -1){
		return 6;
	}else if (MonthStr.indexOf("Aug") != -1){
		return 7;
	}else if (MonthStr.indexOf("Sep") != -1){
		return 8;
	}else if (MonthStr.indexOf("Oct") != -1){
		return 9;
	}else if (MonthStr.indexOf("Nov") != -1){
		return 10;
	}else if (MonthStr.indexOf("Dec") != -1){
		return 11;
	}
}

/*
 * 解析内容审计格式的数据的函数
 * 参数 o {info : 源数据 array, stencil : 模版 array, reg : 分割的正则 reg, startLine : 开始行 int}
 * 返回records数组 成员是根据模版解析的对象
 */
function analyzeInfo (o) {
	var info = o.info.splice(o.startLine, o.info.length - 1);
	var res = info.join().split(o.reg), records = [];

	for (var i = 0; i < res.length; i++) {
		var r = {}, data = res[i].split(/,\r/g);
		if (data.length < o.stencil.length) continue;
		for (var j = 0; j < o.stencil.length; j++) {
			r[o.stencil[j].name] = $.trim(data[o.stencil[j].mapping] && data[o.stencil[j].mapping].slice(data[o.stencil[j].mapping].indexOf(':') + 1) || '');
		}
		records.push(r);
	}
	return records;
}

/*
 * 解析URL审计格式的数据的函数
 * 参数 o {info : 源数据 array, stencil : 模版 array, startLine : 开始行 int, entityLine : 每条记录行数}
 * 返回records数组 成员是根据模版解析的对象
 */
function analyzeCli (o) {
	var info = o.info.splice(o.startLine, o.info.length - 1), records = [];

	for (var i = 0; i < info.length; i = i + o.entityLine) {
		var res = info.slice(records.length * o.entityLine, records.length * o.entityLine + o.entityLine).join('');
		if (o.filter && o.filter.test($.trim(res))) continue;
		var r = {}, data = res.split(/\s+|(,\r)/g);
		if (data.length < o.stencil.length) continue;
		for (var j = 0; j < o.stencil.length; j++) {
			r[o.stencil[j].name] = $.trim(data[o.stencil[j].mapping] || '');
		}
		records.push(r);
	}
	return records;
}
 /*
 * 验证内容审计页面的高级查询form表单
 * 
 * 
 */
Validate = {
	//日期的验证
	date		:		function (start, end) {
		if (start == '' || end == '') {
			return {
				info	:	'日期不能为空',
				isRight	:	false	
			}
		}
	
		var s = start.split(/-/g), e = end.split(/-/g);
		
		if ((parseInt(s[0], 10) < parseInt(e[0], 10)) || 
			(parseInt(s[0], 10) == parseInt(e[0], 10) && parseInt(s[1], 10) < parseInt(e[1], 10)) || 
			(s[0] == e[0] && s[1] == e[1] && parseInt(s[2], 10) <= parseInt(e[2], 10))) 
		{
			return {
				info	:	'',
				isRight	:	true
			}	
		}
		
		return {
			info	:	'起始日期不能小于结束日期',
			isRight	:	false	
		}
	},

//时间段的验证
	time		:		function (start, end) {
		//只选择一个时间
		if(isNaN(start) ^ isNaN(end)) {
			return {
				info	:	'请选择' +　['开始', '结束'][!!isNaN(start) ? 0 : 1] + '时间',
				isRight	:	false	
			}
		}
		
		var isRight = true, info = '';
		//两个都选
		if (!isNaN(start) && !isNaN(end)) {
			
			if (parseInt(start, 10) > parseInt(end, 10)) {
				isRight = false,
				info = '起始时间不能大于结束时间';
			}
		}
		
		return {
			info	:	info,
			isRight	:	isRight
		}
	},

//多IP的验证

	mIP			:		function (str) {
		var ips = str.replace(/，/g, ',').replace(/\s+/g, '').split(',');
		for (var i = 0; i < ips.length; i++) {
			if (ips[i] == '') continue;
			if (!validateIP(ips[i])) {
				return {
					info	:	'IP格式错误',
					isRight	:	false
				};
			}
		}
		return {
			info	:	'',
			isRight	:	true
		};
	},

//关键字验证
	keyword		:		function (str) {
		var isRight = !(/["?]/.test(str));
		return {
			isRight		:	isRight,
			info		:	'关键字中不能含有双引号(")和问号(?)，请重新输入！'
		}
	},
//验证文件名
	fileName	:		function (name) {
		var isRight = !(/[\\\/:\*?<>\|]/.test(name));
		return {
			isRight		:	isRight,
			info		:	'文件名不能包这些字符(/ \ : * ? " < > |)，请重新输入！'	
		}
	},
//验证数字及范围
	number		:		function (num, min, max) {
		if (isNaN(num) || parseInt(num, 10) < min || parseInt(num, 10) > max) {
			return {
				isRight		:		false,
				info		:		'必须为' + min + '到' + max + '之间的数字'	
			}	
		}
		
		return {
			isRight		:		true,
			info		:		''
		}
	}
}

var UrlAudit = (function(){
	var auditName = ['work', 'illegal', 'forbid', 'unwork'], info = {}, intfs, intf, RuleId = {0 : 901, 1 : 900, 2 : 905, 3 : 902};
	
	return {
		isOpen	:	function(str) {
			if (!str || typeof str != 'string' || $.inArray(str, auditName) == -1) return 'error';
			if (typeof info[str] != 'boolean') {
				this.init();
			}
			return info[str];	
		},
		init	:	function() {
			if (intfs == null) {
				intfs = Util.getInterface('wan&up');
				intf = intfs[0];
			}
			var s = Util.request('exec', 'show  url-rule content-policy ' + intf.get('port'));
			for (var i = 0; i < auditName.length; i++) {
				info[auditName[i]] = false;	
			}
			for (var i = 0; i < s.length; i++) {
				if (s[i].indexOf('(active)url-rule 902') != -1 && s[i].indexOf('url-object unwork') != -1 && s[i].indexOf('deny audit') != -1) {
					info['unwork'] = true;
				} else if (s[i].indexOf('(active)url-rule 901') != -1 && s[i].indexOf('url-object work') != -1 && s[i].indexOf('permit audit') != -1) {
					info['work'] = true;
 				} else if (s[i].indexOf('(active)url-rule 900') != -1 && s[i].indexOf('url-object illegal') != -1 && s[i].indexOf('deny audit') != -1) {
					info['illegal'] = true;
				} else if (s[i].indexOf('(active)url-rule 905') != -1 && s[i].indexOf('url-object forbid') != -1 && s[i].indexOf('deny audit') != -1) {
					info['forbid'] = true;
				}
			}
		},
		getTotal	:	function(name) {
			var cmd = 'show url-audit detail time-range from ' + Time.start + ' to ' + Time.end + ' url-object ' + name + ' total-count\r\n';
			var s = Util.request('exec', cmd);
			return parseInt(s[0], 10) || 0;
		},
		setClose	:	function(str) {
			var count = $.inArray(str, auditName);
			if (!str || typeof str != 'string' || count == -1) return 'error';
			var cmd = '';
			for (var i = 0; i < intfs.length; i++) {
				cmd += 'content-policy ' + intfs[i].get('port') + '\r\n';
				cmd += 'no url-rule ' + RuleId[count] + '\r\n';
				cmd += 'exit\r\n';
			}
			Util.request('config', cmd);
			info[str] = false;
		},
		setOpen		:	function(str) {
			var count = $.inArray(str, auditName);
			if (!str || typeof str != 'string' || count == -1) return 'error';
			if (!!info[str]) return true;
			
			var cmdPart = this._getCmd(count), cmd = '';
			
			for (var i = 0; i < intfs.length; i++) {
				cmd += 'content-policy ' + intfs[i].get('port') + '\r\n';
				cmd += cmdPart;
				cmd += 'exit\r\n';
				cmd += 'int ' + intfs[i].get('port') + '\r\n';
				cmd += 'no content-policy-map\r\n content-policy-map ' + intfs[i].get('port') + '\r\n';
			}
			if (count == 2) {
				if (window.navigator.userLanguage.indexOf('zh-cn') != -1) {
					cmd += 'url-class forbidClass\r\n comment 您手动阻断的URL分类\r\n exit\r\n'
					cmd += 'url-object forbid\r\n class forbidClass\r\n comment 您手动阻断的网站分类对象\r\n exit\r\n';
					cmd += 'url-filter-notice display 您访问的网页已被禁止，请与管理员联系！\r\n';
				} else {
					cmd += 'url-class forbidClass\r\n comment "The URL you manually block classification"\r\n exit\r\n'
					cmd += 'url-object forbid\r\n class forbidClass\r\n comment "You manually block the site classification object"\r\n exit\r\n';
					cmd += 'url-filter-notice display "You visit the page has been prohibited, please contact your administrator!"\r\n';	
				}
			}
			var s = Util.request('config', cmd);
			info[str] = true;
		},
		_getCmd		:	function (count) {
			var cmd = 'no url-rule ' + RuleId[count] + '\r\n';
			cmd += {
				0		:		'url-rule 901 subscriber any url-object work time-range any action permit audit comment work\r\n',
				1		:		'url-rule 900 subscriber any url-object illegal time-range any action deny audit comment illegal\r\n',
				2		:		'url-rule 905 subscriber any url-object forbid time-range any action deny audit comment block\r\n',
				3		:		'url-rule 902 subscriber any url-object unwork time-range any action deny audit comment unwork\r\n'
			}[count];
			return cmd;
		}
	}
})();
 
function Name2Port(p) {
	if (p.indexOf("Ten") != -1) {
		p = p.replace("TenGigabitEthernet", "Te");
	}
	else if (p.indexOf("dia") != -1) {
		p = p.replace("dialer", "di");
	}
	else {
		p = p.replace("GigabitEthernet", "Gi");
	}
	p = p.replace(/\s+/g, "");
	return p;
}
 
function getSfcIntf() {
	var data = request("exec", "show intelligent-fc info"), info = [], key = "";
	for (var i = 0; i < data.length; i++) {
		key = data[i].indexOf(":") != -1 ? $.trim(data[i].split(":")[0]) : key;
		var getValue = function (data) {
			return data.indexOf(":") != -1 ? $.trim(data.split(":")[1]) : data;
		};
		var value = getValue(data[i]);
		
		if (key == "intf") {
			info.push({
				name	:	Name2Port(value),
				"in"	:	getValue(data[i + 1]).split(/\s+/),
				key		:	getValue(data[i + 2]).split(/\s+/),
				other	:	getValue(data[i + 3]).split(/\s+/),
				total	:	getValue(data[i + 5]),
				user	:	getValue(data[i + 6]),
				perIP	:	getValue(data[i + 7])
			});
		}
	}
	return info;
}
 
//添加新接口类
function filterIntf(intf) {
	if (intf.indexOf("(") != -1) {
		return intf.substring(0, intf.indexOf("("));
	}
	else {
		return intf;
	}
}
function isInOpenAll() {
	var ins = getSfcIntf(), str = '', wans = get_wan_intf();
	for (var i = 0; i < ins.length; i++) {
		str += '+' + ins[i].name + '+';	
	}
	for (var i = 0; i < wans.length; i++) {
		var o = wans[i];
		if (o.indexOf('(') != -1) o = o.substring(0, o.lastIndexOf('('));
		if (str.indexOf('+' + o + '+') == -1) return false;	
	}
	return true;
}
function initIntelligent(intf, isOpen) {
	var cmd = "";
	if (isOpen) {
		cmd += "intelligent-fc total-bandwidth " + intf + " " + 10000 + " \r\n ";
		cmd += "intelligent-fc inhibitive-bandwidth " + intf + " 1 " + 20 + " 1 " + 10 + " \r\n ";
		cmd += "intelligent-fc other-bandwidth " + intf + " " + 20 + " " + 30 + " " + 15 + " " + 15 + " \r\n ";
		cmd += "intelligent-fc total-user " + intf + " " + 500 + " \r\n ";
		cmd += "intelligent-fc per-ip " + intf + " " + 5 + " \r\n ";
	}
	else {
		cmd += "no intelligent-fc total-bandwidth " + intf + " \r\n ";
		cmd += "no intelligent-fc inhibitive-bandwidth " + intf + " \r\n ";
		cmd += "no intelligent-fc other-bandwidth " + intf + " \r\n ";
		cmd += "no intelligent-fc total-user " + intf + " \r\n ";
		cmd += "no intelligent-fc per-ip " + intf + " \r\n ";
	}
	asy_request("config", cmd, null);
}

function isNumber(v){
	return typeof v === 'number' && isFinite(v);
}

function isDefined(value) {
	return typeof value !== 'undefined';
}

function isObject(value) {
	return !!value && Object.prototype.toString.call(value) === '[object Object]';
}

function isArray(value) {
	return Object.prototype.toString.apply(value) === '[object Array]';
}
Interface = function (data) {
	this.data = data || {};
	this.configed = false;
	this.init();
}

Interface.prototype = {
	init		:		function () {
		this.initInfo();
	},
	
	initInfo	:		function () {
		if (this.data.info) {
			var data = this.data.info.split("#");
			var json = {};
			json.port = PF.filter(data[1]);
			json.ip = data[2];
			json.mask = data[3];
			json.gateway = data[4];
			json.mac = data[5];
			if (data[6] == "LAN" || data[6] == "WAN") {
				json.type = data[6] + json.port.split("/")[1];
			}
			else {
				json.type = data[6];
			}
			json.isOptical = !!parseInt(data[9]);
			json.isUp = data[10] == "UP";
			json.width = parseInt(data[11]);
			if (data[1].indexOf('Gi') != -1) {
				json.number = parseInt(data[1].substr(data[1].indexOf('/') + 1, 1), 10);
			} else {
				json.number = parseInt(data[1].substr(-1), 10);	
			}
			$.extend(this.data, json);
		}
	},
	
	hasControl	:		function () {
		this.initConfig();
		return isDefined(this.data["flow-policy"]);
	},
	
	initConfig	:		function () {
		if (!this.configed) {
			var data = request("exec", "show run interface " + this.data["port"]);
			for (var i = 3; i < data.length - 1; i++) {
				var map = data[i].split(/\s+/);
				if (map.length > 2) continue;
				this.data[map[0]] = map[1];
			}
			this.configed = true;
		}
	},
	
	getFlowID	:		function () {
		var cmd = "flow-control " + this.data["port"] + " \r\n ex \r\n ";
		request("config", cmd);
		cmd = "show flow-control-policy free-num group " + this.data["port"] + " \r\n ";
		var data = request("exec", cmd)[0].split(/\s+/);
		return data[data.length - 1];
	},
	
	change			:		function(str) {
		var v = this.data.port, v = v.indexOf("(") != -1 ? v.substring(0, v.indexOf("(")) : v;;
		if (!str || v.indexOf(str) != -1) return this;
		if (str == 'gi') {
			str = 'Gi0/';
		}
		return getOneIntf(str + this.data.number);
	},
	
	applyFlow	:		function (isApply) {
		var cmd = "";
		if (isApply) {
			cmd += "flow-control " + this.data["port"] + " \r\n ex \r\n ";
			cmd += "interface " + this.data["port"] + " \r\n flow-policy " + this.data["port"] + " \r\n ";
		}
		else {
			cmd	+= "interface " + this.data["port"] + " \r\n no flow-policy \r\n ";
		}
		request("config", cmd);
		this.write();
	},
	
	write		:		function () {
		request("exec", "write \r\n ");
	}
};

function getInterface(str) {
	var filter = ["all"], relation = "||", func = {
			"up"	:	function (intf) {return intf.data["isUp"];},
			"down"	:	function (intf) {return !intf.data["isUp"];},
			"wan"	:	function (intf) {return intf.data["type"].indexOf("WAN") != -1;},
			"lan"	:	function (intf) {return intf.data["type"].indexOf("LAN") != -1;},
			"all"	:	function () {return true;}
		};
	if (str) {
		if (str.indexOf("&") != -1) {
			relation = "&&";
			filter = str.split("&");
		}
		else {
			filter = str.split("|");
		}
	}
	
	for (var i = 0; i < filter.length; i++) {
		filter[i] = func[filter[i]];
	}

	var data = request("exec", "show html interface info");
	if (!__ToolCookie.getCookie('intf')) {
		//__ToolCookie.setCookie({key : 'intf', value : data.join('88888888')});	
	} 
	var result = [];
	for (var i = 0; i < data.length - 1; i++) {
		var intf = new Interface({info:data[i]});
		var condition = "";
		for (var j = 0; j < filter.length; j++) {
			condition += filter[j](intf);
			if (j != filter.length - 1) {
				condition += relation;
			}
		}
		condition = eval(condition);
		if (condition && !PF.isJoinAg(intf.data.port)) {
			result.push(intf);
		}
	}
	return result;
}

function getOneIntf(name){
	if (!name || typeof name != 'string') return null;
	var intfs = getInterface();
	for (var i = 0; i < intfs.length; i++) {
		var v = intfs[i].data.port, v = v.indexOf("(") != -1 ? v.substring(0, v.indexOf("(")) : v;;
		if (v == name) {
			return intfs[i];	
		}
	}
	return null;
}

function getFirstUp(str) {
	var intf = getInterface(str);
	for (var i = 0; i < intf.length; i++) {
		if (intf[i].data.isUp) {
			return intf[i].data.port;
		}
	}
}
 
function filterUser(users) {
	var groups = [];
	if (users.length == 0 || users[0].length == 1) {
		return users;
	}
	if (users[0][1] == "any") {
		return ["所有用户"];
	}
	if (users[0][1] == "All users") {
		return ["All users"];
	}
	for (var i = 0; i < users.length; i++) {
		if (users[i].length && users[i][0]) {
			var j = 0
			for (; j < groups.length; j++) {
				if (users[i][2].indexOf(groups[j][2]) != -1) {
					break;
				}
			}
			if (j == groups.length) {
				groups.push(users[i]);
			}
		}
	}
	
	for (var j = 0; j < users.length; j++) {
		for (var k = 0; k < groups.length; k++) {
			if (users[j].length && users[j][2] != groups[k][2] && users[j][2].indexOf(groups[k][2]) != -1) {
				users.splice(j, 1);
				j--;
				break;
			}
		}
		if (k == groups.length && users[j].length) {
			users[j] = users[j][1];
		}
	}
	
	return users;
}

function filterApp(app) {
	var groups = [], res = [];
	if (app.length == 0 || app[0].length == 1) {
		return app;
	}
	if (app[0][0] == "所有应用") {
		return ["所有应用"];
	}
	if (app[0][0] == "any") {
		return ["any"];
	}
/*
	for (var i = 0; i < app.length; i++) {
		if (app[i].length && app[i][0]) {
			var j = 0
			for (; j < groups.length; j++) {
				if (app[i][2].indexOf(groups[j][2]) != -1) {
					break;
				}
			}
			if (j == groups.length) {
				groups.push(app[i]);
			}
		}
	}
*/
	for (var j = 0; j < app.length; j++) {
		/*for (var k = 0; k < groups.length; k++) {
			if (app[j].length && app[j][2] != groups[k][2] && app[j][2].indexOf(groups[k][2]) != -1) {
				app.splice(j, 1);
				j--;
				break;
			}
		}
		if (k == groups.length && app[j].length) {
			app[j] = app[j][1];
		}*/
		if (!app[j][1]) {
			res.push(app[j][0]);
		}
	}
	
	return res;
}
 //t90设置通道对象
function setChannel(flowName, in_out, channelName, limit) {
	if (arguments.length != 4) return 1;
	var Stencil = {
		'100kbps'	:	100,	
		'200kbps'	:	200,	
		'300kbps'	:	300,	
		'500kbps'	:	500,	
		'1mbps'		:	1000
	}
	if (!Stencil[channelName]) return 2;

	var s = request('exec', 'show flow-c ' + flowName + ' ' + in_out), r = {}, root = getRootChannel(flowName, in_out);
	for (var i = 2; i < s.length - 1; i++) {
		if (!s[i]) break;
		if (i == 3) root == s[i].split(/\s+/)[0] || '';
		r[s[i].split(/\s+/)[0] || ''] = i;
	}
	if (r[channelName]) return true;
	var cmd = 'flow-c ' + flowName + '\r\n';
	cmd += 'channel-tree ' + in_out + '\r\n';
	if (!root) { 
		var cir = pir = getRootBandwidth(flowName);
		if (cir == '') return 3;
		cmd += 'channel-g root parent null cir ' + cir + ' pir ' + pir + '\r\n';
		root = 'root';
	}
	
	cmd += 'channel-g ' + channelName + ' parent ' + root + ' cir ' + /* + Stencil[channelName] + */' 100 ' + ' pir ' + Stencil[channelName] + '\r\n';
	var l = request('config', cmd);
	if (l[0] != '') {
		alert('限速通道已经配满，请先到通道对象页面删除多余通道!');
	}
	return l[0] == '';
}

function getRootBandwidth(intf){
	if (!intf) return '10000';
	var s = get_intf_info();
	if (intf.indexOf('di') != -1) {
		intf = 'Gi0/' + intf.replace('di', '') + '(' + intf + ')';
	}
	for (var i = 0; i < s.length; i++) {
		if (s[i].intf_name == intf || intf.indexOf(s[i].intf_name) != -1) {
			return s[i].bandwidth;
		}
	}
	return '10000';
}

function getRootChannel(flowName, in_out, isCir) {
	var s = request('exec', 'show flow-c ' + flowName + ' ' + in_out);
	if (s.length < 4) {
		return false;	
	} else {
		var cir = s[2].split(/\s+/)[1] || 0;
		if (isCir) {
			return cir;
		} else {
			return 	s[2].split(/\s+/)[0] || '';
		}
	}
}
function setFlowObj(wans, isBandwidth){
	var cmd = '', limit = '';
	for (var i = 0; i < wans.length; i++) {
		var root_in = getRootChannel(wans[i], 'inbound', true), root_out = getRootChannel(wans[i], 'outbound', true);
		limit = getRootBandwidth(wans[i]);
		cmd += 'flow-control ' + wans[i] + '\r\n' + 'channel-tree inbound\r\n';
		if (!root_in || (!!isBandwidth && parseInt(limit, 10) > parseInt(root_in, 10))) cmd += 'channel-g root parent null cir ' + limit + ' pir ' + limit + '\r\n';
		cmd += 'exit\r\n';
		cmd += 'channel-tree outbound\r\n';
		if (!root_out || (!!isBandwidth && parseInt(limit, 10) > parseInt(root_out, 10))) cmd += 'channel-g root parent null cir ' + limit + ' pir ' + limit + '\r\n';
		cmd += 'exit\r\n';
	}
	asy_request('config', cmd);
}
//t90设置时间对象
function setTimeObj(){
	var Name = {
		en	:	{
			any		:	'any',
			work	:	'work_time',
			unwork	:	'unwork_time',
			weekend	:	'weekend'
		},
		zh	:	{
			any		:	'所有时间',
			work	:	'工作时间',
			unwork	:	'非工作时间',
			weekend	:	'周末'
		}
	};
	/*
	var time = Name.zh;
	if (window.navigator.userLanguage.indexOf('zh-cn') == -1) {
		time = Name.en;
	}
	*/
	var time = Name.en, cmd = '';
	
	var isExit = function (n) {
		return $.trim(request('exec', 'show time-range ' + n)[0]) != '';
	}
	if (!isExit(time.any)) {
		cmd += 'time-range ' + time.any + '\r\n' + 'periodic daily 00:00 to 23:59\r\n' + 'exit\r\n';
	}
	if (!isExit(time.work)) {
		cmd += 'time-range ' + time.work + '\r\n' + 'periodic weekdays 08:00 to 12:00\r\n' + 'periodic weekdays 13:00 to 18:00\r\n' + 'exit\r\n';
	}
	if (!isExit(time.unwork)) {
		cmd += 'time-range ' + time.unwork + '\r\n' + 'periodic weekdays 00:00 to 08:00\r\n' + 'periodic weekdays 12:00 to 13:00\r\n' + 'periodic weekdays 18:00 to 23:59\r\n' + 'exit\r\n';
	}
	if (!isExit(time.weekend)) {
		cmd += 'time-range ' + time.weekend + '\r\n' + 'periodic weekend 00:00 to 23:59\r\n';
	}
	asy_request('config', cmd);
}
function setTimeRange (cfg) {
	if (typeof cfg != 'string') return;
	var name = {'any' : 1, 'work_time' : 2, 'unwork_time' : 3, 'weekend' : 4};
	if (!name[cfg]) return;
	
	var isExit = function (n) {
		return $.trim(request('exec', 'show time-range ' + n)[0]) != '';
	}
	if (isExit(cfg)) return;
	
	var cmd = {
		1	:	'time-range any\r\n' + 'periodic daily 00:00 to 23:59\r\n' + 'exit\r\n',
		2	:	'time-range work_time\r\n' + 'periodic weekdays 08:00 to 12:00\r\n' + 'periodic weekdays 13:00 to 18:00\r\n' + 'exit\r\n',
		3	:	'time-range unwork_time\r\n' + 'periodic weekdays 00:00 to 08:00\r\n' + 'periodic weekdays 12:00 to 13:00\r\n' + 'periodic weekdays 18:00 to 23:59\r\n' + 'exit\r\n',
		4	:	'time-range weekend\r\n' + 'periodic weekend 00:00 to 23:59\r\n'
	}
	request('config', cmd[name[cfg]]);
}
function initURLObj() {
	var cmd = 'url-object illegal\r\n';
	cmd += 'exit\r\n';
	cmd += 'url-object work\r\n'
	cmd += 'exit\r\n';
	cmd += 'url-object unwork\r\n'
	cmd += 'exit\r\n';
	cmd += 'url-object other\r\n'
	asy_request('config', cmd);
}
function getVer() {
	var data = request("exec", "sh ver");
	return data[0].substring(data[0].indexOf("(") + 1, data[0].indexOf(")"));
}

function getScene() {
	var data = request("exec", "show intelligent-fc type"), result = [];
	for (var i = 0; i < data.length - 1; i++) {
		result.push(data[i].split(/\s+/)[1]);
	}
	return result;
}

function getCode() {
	var data = request("exec", "show sys-mode");
	if (!__ToolCookie.getCookie('mode')) {
		//__ToolCookie.setCookie({key : 'mode', value : data[0]});
	}
	for (var i = 0; i < data.length; i++) {
		if (data[i].indexOf("web-coding") != -1) {
			return data[i].split(/\s+/)[1];
		}
	}
	return "";
}

function isEG() {
	return getVer().indexOf("EG") != -1;
}

function isNPE() {
	return getVer().indexOf("NPE") != -1;
}

var pub_intelligent = "none";

function isIntelligent() {
	if (pub_intelligent == "none") {
		var data = request("exec", "show intelligent-fc info");
		pub_intelligent = data.length != 1 && data.toString().indexOf("%") == -1;
	}
	return pub_intelligent;
}

function intelligentType() {
	var data = request("exec", "show intelligent-fc info");
	return data[0].split(/\s+/)[2];
}
 
function getElById(idVal){
    if (document.getElementById != null) 
        return document.getElementById(idVal);
    if (document.all != null) 
        return document.all[idVal];
    alert("getting element by id error!");
    return null;
}

/* 用于全选Select栏所有的option. */
function sltAll(sId){
    var oSel = document.getElementById(sId);
    
    if (oSel == null) {
        return;
    }
    var iLen = oSel.options.length;
    
    for (var i = 0; i < iLen; i++) {
        oSel.options[i].selected = true;
    }
}

/* 禁用或者启用相对应的控件，如Select栏，Text栏等等。*/
function enbWin(obj, bSta){
    if (obj != null) {
        obj.disabled = !bSta;
    }
}

/* 判断字符串是否为空,为空返回true,否则返回false */
function isEmpty(str){
    if ((str == null) || (str.length == 0)) {
        return true;
    }
    return false;
}

/* 如果输入是数字,返回true,否则返回false */
function isNumber(str){
    var i;
    if (str==undefined||str.length <= 0) {
        return false;
    }
    for (i = 0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        if (c < 48 || c > 57) 
            return false;
    }
    return true;
}

function isCH(sStr){
    signCode = new RegExp("[[*?+()<>]");
    
    var codeList = "`1234567890-=\\qwertyuiop[]asdfghjkl;'zxcvbnm,./" +
    "~!@#$%^&*()_+| QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?";
    
    for (var i = 0; i < sStr.length; i++) {
        if (sStr.substr(i, 1) == "\\") 
            continue;
        
        if (signCode.test(sStr.substr(i, 1))) {
            continue;
        }
        
        if (codeList.search(sStr.substr(i, 1)) == -1) {
            return true;
        }
    }
    
    return false;
}

function isValidChar(sStr){
    var re = "/:*?\"<> \\|";
    
    for (var i = 0; i < sStr.length; i++) {
        if (re.indexOf(sStr.substr(i, 1)) >= 0) {
            return false;
        }
    }
    
    return true;
}
/* 验证用户名，是否合法(包含空格和非法字符验证)*/
function validateUser(str) {
	var reg = /[~`!@#$%^&*?？ ]/g;
	return !reg.test(str);
}
/* 对输入的IP地址进行校验,格式为xx.xx.xx.xx */
function validateIP(IPstr){
    /* 有效性校验 */
    var IPPattern = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
    if (!IPPattern.test(IPstr)) 
        return false;
    /* 检查域值 */
    var IPArray = IPstr.split(".");
    if (IPArray.length != 4) 
        return false;
	if(IPArray[0]==127 || parseInt(IPArray[0])>=224){
		return false;
	}
    var tInt = 0;
    var iInt = 0;
    for (iInt = 0; iInt < 4; iInt++) {
        /* 每个域值范围0-255 */
        tInt = parseInt(IPArray[iInt]);
        if (tInt < 0 || tInt > 255) 
            return false;
    }
    return true;
}

function validateMask(sMask){
    /* 有效性校验 */
    var IPPattern = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
    if (!IPPattern.test(sMask)) 
        return false;
    
    /* 检查域值 */
    var IPArray = sMask.split(".");
    if (IPArray.length != 4) 
        return false;
    
    /* 网络掩码的第一字节最小为192,第四字节最大为252 */
    if (parseInt(IPArray[0]) < 192 && parseInt(IPArray[0]) != 0) 
        return false;
    
    for (var i = 0; i < 4; i++) {
        /* 每项值必须是以下值才能通过 */
        switch (parseInt(IPArray[i])) {
            case 0:
                break;
            case 128:
            case 192:
            case 224:
            case 240:
            case 248:
            case 252:
            case 254:
            case 255:{
                if (i > 0) {
                    if (parseInt(IPArray[i - 1]) != 255) {
                        return false;
                    }
                }
                break;
            }
            default:
                return false;
        }
    }
    
    return true;
}

function isZeroStr(szVal){
    if (szVal == null || szVal.length == 0) {
        return true;
    }
    
    return false;
}

function lTrim(szVal){
    for (i = 0; i < szVal.length && szVal.charAt(i) == " "; i++) 
        ;
    return szVal.substring(i);
}

function rTrim(szVal){
    for (i = szVal.length - 1; i >= 0 && szVal.charAt(i) == ' '; i--) 
        ;
    
    return szVal.substr(0, i + 1);
}

function Trim(szVal){
    if (isZeroStr(szVal)) {
        return "";
    }
    
    return rTrim(lTrim(szVal));
    
}

function validatePort(port){
    /*先判断是不是数字*/
    if (isNumber(port) == false) {
        return false;
    }
    
    if (port >= 1 && port <= 65535) 
        return true;
    else 
        return false;
}
//判断字符串所占字节数
function getByteLen(str){
	return   str.replace(/[^\x00-\xff]/g,"**").length;}



/* 控件相关的公用函数集 */

function enCtl(vId){
    var oCtl = vId;
    
    if (vId == null) 
        return false;
    
    if (typeof(vId) == "string") 
        oCtl = getElById(vId);
    
    if (oCtl != null) 
        oCtl.disabled = false;
}

function foCtl(vId){
    var oCtl = vId;
    
    if (vId == null) 
        return false;
    
    if (typeof(vId) == "string") 
        oCtl = getElById(vId);
    
    if (oCtl != null) 
        oCtl.focus();
}

function diCtl(vId){
    var oCtl = vId;
    
    if (vId == null) 
        return false;
    
    if (typeof(vId) == "string") 
        oCtl = getElById(vId);
    
    if (oCtl != null) 
        oCtl.disabled = true;
}

/*
 功能：返回产品名称，用来区分产品
 */
function gerproduce(){
    var cmdstr = "show basic-info d\r\n"
    var modestr = "exec";
    var result = new Array;
    
    /*
     var produce=new Array(
     "NBR2000",
     "NBR200",
     "NBR300",
     "NBR1000",
     "NBR1100",
     "NBR1200"
     );*/

    var index = -1;
    result = request(modestr, cmdstr);
    if (result == null) 
        return;
	if (result.join().indexOf('EG1000-CM') != -1 || result.join().indexOf('EG1000CM') != -1 || result.join().indexOf('NBR2000D') != -1) {
		return 'EG1000C';	
	}else if(result.join().indexOf('EG2000P') != -1 || result.join().indexOf('EG2000CE') != -1 || result.join().indexOf('EG2000SE') != -1 || result.join().indexOf('EG2000D') != -1 || result.join().indexOf('BCR8000-T1') != -1){
        return 'EG2000T'; //EG2000P和EG2000T界面一致
    }else if(result.join().indexOf('EG2000UE') != -1 || result.join().indexOf('EG2000XE') != -1){
        return 'EG2000X'; //EG2000UE和EG2000X界面一致
    }
    return result[2].substring(63);
    //return null;
}
/**
*判断设备是否是XE-NPE,XE-NPE show version会显示成EG20000XE
*
*/
function isXeNpe(hardtype){
	var hardtype = hardtype || gerproduce();
	if(hardtype.indexOf('EG2000XE')==-1) return false;
	var resData = request('exec','show ip fpm statistics');
	if(resData && resData.length>0){
		var tableNum = $.trim(resData[0].split("table:")[1]);
		return (parseInt(tableNum,10) >= 3000000)
	}
	return false;
}

function intf(intf_name, ip, mask, gateway, mac, lan_wan, isp, desc, sfp_utp, up_down, bandwidth){
    this.intf_name = Trim(intf_name);
	if (this.intf_name.indexOf('(') != -1) {
		this.intf_name = this.intf_name.substring(0, this.intf_name.indexOf('('));
	}
    this.ip = Trim(ip)
    this.mask = Trim(mask)
    this.gateway = Trim(gateway)
    this.mac = Trim(mac);
    this.lan_wan = Trim(lan_wan);
    this.isp = Trim(isp) == 'CUCC' ? 'CNC' : Trim(isp);
    this.desc = Trim(desc);
    this.sfp_utp = Trim(sfp_utp);//1为电口，0为光口
    this.up_down = Trim(up_down)
    this.bandwidth = Trim(bandwidth);
    var dialer = /di(\d+)/g.exec(intf_name);
    this.dialer = dialer && dialer[1];
}

///////////////////////////////////////////////////////////////////////////////////获取接口信息
function get_intf_info(){
    var intf_str = request("exec", "show html interface info");
    if (intf_str == null)
        return;
    var i, arr;
    var intf_array = [];
    for (i = 0; i < intf_str.length - 1; i++) {
        var arr = intf_str[i].split("#");
        //var full = arr[1].replace(/Gi/,"Gidad");
        arr[1] = PF.filter(arr[1]);
		if (arr[1].indexOf('vlan') != -1 || PF.isJoinAg(arr[1])) {
			continue;
		}
        var obj = new intf(arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7], arr[8], arr[9], arr[10], arr[11]);
		//intf_array[i] = obj;
        intf_array.push(obj)
    }
	if (!__ToolCookie.getCookie('intf')) {
		intf_str.pop();
		//__ToolCookie.setCookie({key : 'intf', value : intf_str.join('88888888')});
	}
    return intf_array;
}

/*
 功能：返回所有up的外网接口。
 */
function get_up_intf(){
    var ints = get_intf_info();
    var inters = new Array();
    var j = 0;
    for (var i = 0; i < ints.length; i++) {
        if (ints[i].up_down == "UP" && ints[i].lan_wan == "WAN") {
            inters[j] = ints[i].intf_name;
            j++;
        }
    }
    return inters;
}

/*
 功能：返回所有up的网桥。
 */
function get_up_bri(){
    var bridges = new Array();
    var j = -1;
    var strCommand = "show bridge-map";
    var result = request("exec", strCommand);
    for (var i = 0; i < result.length - 5; i = i + 5) {
        if (result[i].toString().indexOf("UP") >= 0) {
            j++;
			bridges[j]=result[i].replace(/\r\n/g,"").split(" ")[0].toLowerCase()+" "+result[i].replace(/\r\n/g,"").split(",")[0].split(" ")[2];
        }
    }
    return bridges;
}
/*
 功能：返回所有up的网桥。
 */
function get_config_bri(){
    var bridges = new Array();
    var strCommand = "show bridge-map";
    var result = request("exec", strCommand);
    for (var i = 0; i < result.length - 5; i = i + 5) {
        if (result[i+1].toString().indexOf("GigabitEthernet") !=-1) {
			bridges.push(result[i].replace(/\r\n/g,"").split(" ")[0].toLowerCase()+" "+result[i].replace(/\r\n/g,"").split(",")[0].split(" ")[2]);
        }
    }
    return bridges;
}
/*
 功能：返回指定网桥的外网口。
 */
function get_up_bri_wan(bri){
    if (!isNumber(parseInt(bri))) {
        return bri;
    }
    var inter;
    var strCommand = "show bridge-map", result;
    if (bridgeMap) {
    	result = bridgeMap;
    }
    else {
    	result = request("exec", strCommand);
    	bridgeMap = result;
    }
    for (var i = 0; i < result.length - 5; i = i + 5) {
        if (result[i].toString().indexOf(bri) >= 0) {
            var len = result[i + 1].split(" ").length;
            inter = result[i + 1].split(" ")[len - 2] + " " + result[i + 1].split(" ")[len - 1];
        }
    }
    return intf_name_to_brief(inter);
}

/*
 功能：判断是否是网关模式，是返回true，不是返回false。
 */
function isGatewayMode(){
    var result = request("exec", "show sys-mode");
	if (!__ToolCookie.getCookie('mode')) {
		result.pop();
		//__ToolCookie.setCookie({key : 'mode', value : result[0]});
	}
    return result[0].indexOf("gateway") != -1;
}

/*
 功能：获取带宽，返回单位为M的数字。
 */
function getBandwidth(interName){
    var bandwidth;
    var strCommand = "show html interface info";
	if (!__ToolCookie.getCookie('intf')) {
		//__ToolCookie.setCookie({key : 'intf', value : strCommand.join('88888888')});	
	} 
    var result = request("exec", strCommand);
    var interInfos = new Array();
    
    for (var i = 0; i < result.length; i++) {
        interInfos = result[i].split("#");
        if (interInfos[1] == interName) {
            bandwidth = interInfos[interInfos.length - 1];
            break;
        }
    }
    if (isNumber(bandwidth)) {
        return (bandwidth / 1000);
    }
    else {
        return (120);
    }
}

/*
 功能：获取指定接口的IP。
 */
function getInterIP(inter){
    var strCommand = "show ip interface " + inter;
    var result = request("exec", strCommand);
    for (var i = 0; i < result.length; i++) {
        if (Trim(result[i].replace(/\r\n/g, "")) == "IP address is:") {
            result[i + 1] = Trim(result[i + 1].replace(/\r\n/g, ""));
            return (result[i + 1].split("/")[0]);
        }
    }
    return null;
}

/*
 功能：获取指定接口IP的掩码。
 */
function getInterIPMask(inter){
    var strCommand = "show ip interface " + inter;
    var result = request("exec", strCommand);
    var mask = null;
    for (var i = 0; i < result.length; i++) {
        if (Trim(result[i].replace(/\r\n/g, "")) == "IP address is:") {
            result[i + 1] = Trim(result[i + 1].replace(/\r\n/g, ""));
            mask = result[i + 1].split(" ")[0];
            mask = getSubnetMaskString(mask);
            break;
        }
    }
    return mask;
}

/*
 函数名：get_intf_all()
 输入：无
 输出：包含所有物理接口字符串描述符的数组
 描  述：获取所有物理接口，返回包含所有物理接口的数组，数组元素按LAN,WAN0,WAN1顺序排列
 */
function get_intf_all(){
    var intf_str = new Array();
    var g_all_intf = new Array();
    var cmdstr;
    var i;
    var intf_pos;
    var start;
    var end;
    var pos;
    var type;
    var exist_5;
    var exist_19;
    var exist_wz;
    var intf_pos = 0;
    
    
    cmdstr = "show html interface status";
    intf_str = request("exec", cmdstr);
    if (intf_str == null) 
        return;
    for (i = 0; i < intf_str.length - 1; i++) {
        exist_5 = intf_str[i].indexOf("Fa");
        exist_19 = intf_str[i].indexOf("Gi");
        exist_wz = intf_str[i].indexOf("Te");
        
        if (exist_5 != -1 || exist_19 != -1 || exist_wz != -1) {
            pos = intf_str[i].indexOf("\/");
            //intf_pos = parseInt(intf_str[i].charAt(pos-1)) + parseInt(intf_str[i].charAt(pos+1));
            //alert(intf_pos);
            start = intf_str[i].indexOf("#");
            end = intf_str[i].indexOf("#", start + 1);
            g_all_intf[intf_pos] = intf_str[i].substring(start + 1, end);
            intf_pos++;
            
            
        }
    	
        if (g_all_intf[i] == null) 
            continue;
        
        if (exist_5 != -1) {
            g_all_intf[i] = "FastEthernet " + g_all_intf[i].substr(2);
        }
        else if (exist_19 != -1) {
            g_all_intf[i] = "GigabitEthernet " + g_all_intf[i].substr(2);
        }
        else {
            g_all_intf[i] = "TenGigabitEthernet " + g_all_intf[i].substr(2);
        }
    }
    return g_all_intf;
}

//////////////////////////////////////////////////获取lan口
function get_lan_intf(){
    var value = get_intf_info();
    var intf = new Array();
    for (var i = 0; i < value.length; i++) {
        if (value[i].lan_wan == "LAN") {
            intf.push(value[i].intf_name);
        }
    }
    return intf;
}

//////////////////////////////////////////////////获取wan口
function get_wan_intf(){
    var value = get_intf_info();
    var intf = new Array();
    for (var i = 0; i < value.length; i++) {
        if (value[i].lan_wan == "WAN") {
			var t = value[i].intf_name;
            intf.push(t.indexOf('(') != -1 ? t.substring(0, t.indexOf('(')) : t);
        }
    }
    return intf;
}
////////////////////////////////////////////////////获取第一个UP的wan口，若没有，返回第一个wan口
function get_wan_first_up(){
	var data = __ToolCookie.getCookie('intf');
	if (!data) {
		var value = getWans();
		for (var i = 0; i < value.length; i++) {
			if (value[i].up_down == "UP") {
				return value[i];
			}
		}
		return value[0];
	} else {
		data = data.split('88888888');
		var o = {};
		for (var i = 0; i < data.length; i++) {
			var t = data[i].split('#');
			if (t[6] && t[6] == 'WAN' && t[10] && t[10] == 'UP') {
				o.intf_name = t[1];
				return o;	
			}
		}
		o.intf_name = getWanFromCookie()[0];
		return o;
	}
}
//////////////////////////////////////////////////获取lan口对象数组
function getLans(){
    var value = get_intf_info();
    var intf = new Array();
    for (var i = 0; i < value.length; i++) {
        if (value[i].lan_wan == "LAN") {
            intf.push(value[i]);
        }
    }
    return intf;
}

//////////////////////////////////////////////////获取wan口对象数组
function getWans(){
    var value = get_intf_info();
    var intf = new Array();
    for (var i = 0; i < value.length; i++) {
        if (value[i].lan_wan == "WAN") {
            intf.push(value[i]);
        }
    }
    return intf;
}
//////////////////////////////////////////////////获取mgmt口对象数组
function getMgmt(){
	var value = get_intf_info();
    var intf = new Array();
    for (var i = 0; i < value.length; i++) {
        if (value[i].intf_name.indexOf("Mg") !== -1) {
            intf.push(value[i]);
        }
    }
    return intf[0] || null;
}

//////////////////////////////////////////将GigabitEthernet 0/0 转换成Gi0/0

function intf_name_to_brief(intf_name){
	var brief_name;
	if (intf_name.indexOf("Ten") != -1) {
		brief_name = intf_name.replace("TenGigabitEthernet", "Te");
	}
	else {
		brief_name = intf_name.replace("GigabitEthernet", "Gi");
	}
    var reg = /\s/g;
    brief_name = brief_name.replace(reg, "");
    return brief_name;
}

/*
 函数名：get_intf_single()
 输入：要获取的接口名，LAN，WAN0,WAN1
 输出：指定接口的描述符
 */
function get_intf_single(intf){
    var g_all_intf = new Array();
    g_all_intf = get_intf_all();
    if (intf == "LAN0") {
        return get_real_intf(g_all_intf[0]);
    }
    if (intf == "LAN1") {
        return get_real_intf(g_all_intf[1]);
    }
    if (intf == "WAN0") {
        return get_real_intf(g_all_intf[2]);
    }
    if (intf == "WAN1") {
        return get_real_intf(g_all_intf[3]);
    }
    if (intf == "WAN2") {
        return get_real_intf(g_all_intf[4]);
    }
    if (intf == "WAN3") {
        return get_real_intf(g_all_intf[5]);
    }
    return intf;
}


/*
 函数名：get_vir_intf()
 输入：指定接口的描述符
 输出：要获取的接口名，LAN，WAN0,WAN1
 */
function get_vir_intf(intf){
    var g_all_intf = new Array();
    g_all_intf = get_intf_all();
    if (intf == g_all_intf[0]) {
        return "LAN0";
    }
    if (intf == get_real_intf(g_all_intf[1])) {
        return "LAN1";
    }
    if (intf == get_real_intf(g_all_intf[2])) {
        return "WAN0";
    }
    if (intf == get_real_intf(g_all_intf[3])) {
        return "WAN1";
    }
    if (intf == get_real_intf(g_all_intf[4])) {
        return "WAN2";
    }
    if (intf == get_real_intf(g_all_intf[5])) {
        return "WAN3";
    }
    return intf;
}

/*
 函数名：get_lan_port_num()
 输入：无
 输出：获取lan端口个数
 */
function get_lan_port_num(){
    var device;
    device = gerproduce();
    if (device == "NBR2000" || device == "NBR28-21") {
        return 1;
    }
    else 
        if (device == "NBR2500" || device == "NBR3000") {
            return 5;
        }
        else {
            return 4;
        }
    //此处添加其他设备
}

/*页面刷新*/
function refresh(destination){
    window.location = destination;
}


/*192.168.62.230/24中获取192.168.62.230*/
function getIPString(strIP){
    var findIndex;
    var strInterfaceIP;
    findIndex = strIP.indexOf('/');
    if (findIndex == -1) 
        return null;
    strInterfaceIP = strIP.substring(0, findIndex);
    return strInterfaceIP;
}

/*192.168.62.230/24中获取255.255.255.0*/
function getSubnetMaskString(strIP){
    var findIndex;
    var strSubnetMask = "";
    var mask;
    findIndex = strIP.indexOf('/');
    if (findIndex == -1) 
        return null;
    mask = strIP.substring(findIndex + 1);
    //parse
    var maskvalue = Trim(mask);
    maskvalue = parseInt(maskvalue);
    var bValue = 0xffffffff;
    if (maskvalue != 0) 
        bValue = bValue << (32 - maskvalue);
    else 
        bValue = 0;
    for (var i = 0; i < 4; i++) {
        var b = bValue & 0xff;
        strSubnetMask = "." + b + strSubnetMask;
        bValue = bValue >> 8;
    }
    strSubnetMask = strSubnetMask.substring(1, strSubnetMask.length);
    return strSubnetMask;
}

/*MAC验证*/
function validateMAC(MACstr){
    var MACPattern = /^[0-9,a-f,A-F]{4}\.[0-9,a-f,A-F]{4}\.[0-9,a-f,A-F]{4}$/
    if (MACstr == "0000.0000.0000") {
        return false;
    }
    if (!MACPattern.test(MACstr)) 
        return false;
    var unicastPattern = /^[0-9,a-f,A-F]{1}[1,3,5,7,9,b,d,f]{1}.*$/
    if (unicastPattern.test(MACstr)) 
        return false;
    return true;
}

/*设置成功提示*/
function op_finished(info){
    alert(info + "成功!");
}

/*IP地址转换成整型*/
function ip_to_long(ipstr){
    var iplong;
    var ipArr = new Array();
    ipArr = ipstr.split(".");
    iplong = parseInt(ipArr[0]) * 256 * 256 * 256 + parseInt(ipArr[1]) * 256 * 256 +
    parseInt(ipArr[2]) * 256 +
    parseInt(ipArr[3]);
    return iplong;
}

/*ip掩码匹配验证,匹配返回true,不匹配返回false*/
/*输入:ip和mask字符串*/
function ip_mask_match(ipstr, maskstr){
    var ip;
    var mask;
    
    ip = ip_to_long(ipstr);
    mask = ip_to_long(maskstr);
    if (ip == 0 && mask == 0) {
        return true;
    }
    if ((ip & (mask)) == 0) {
        return false;
    }
    if ((ip & (~ mask)) == 0) {
        return false;
    }
    return true;
    
}


/*判断字符串中是否包含空格*/
/*输入：待检查的字符串*/
/*输出:包含空格，返回true,不包含返回false*/
function has_space(str_in){
    var pos;
    pos = str_in.indexOf(" ");
    if (pos != -1) {
        return true;
    }
    else {
        return false;
    }
}

/*判断字符串中是否包含问号*/
/*输入：待检查的字符串*/
/*输出:包含空格，返回true,不包含返回false*/
function has_quest(str_in){
    var pos;
    pos = str_in.indexOf("?");
    if (pos != -1) {
        return true;
    }
    else {
        return false;
    }
}


/*判断用户名合法性，目前只判断是否包含空格和问号*/
/*输入：待检查的字符串*/
/*输出:包含空格，返回true,不包含返回false*/
function validate_username(str_in){
    if (has_space(str_in) == true || has_quest(str_in) == true) {
        return false;
    }
    return true;
}


/*
 ???:QueryString(name)
 ???:lj
 ????:2007,3,28
 ??:????url?????
 ??:??name??
 ?  ?:??????url?????????????
 */
function QueryString(name){
    var qs = name + "=";
    var str = location.search;
    if (str.length > 0) {
        begin = str.indexOf(qs);
        if (begin != -1) {
            begin += qs.length;
            end = str.indexOf("&", begin);
            if (end == -1) 
                end = str.length;
            return (str.substring(begin, end).replace("%20", " "));
        }
    }
    return "";
}


function QueryPar(name, urlpar){
    var qs = name + "=";
    var str = urlpar;
    if (str.length > 0) {
        begin = str.indexOf(qs);
        if (begin != -1) {
            begin += qs.length;
            end = str.indexOf("&", begin);
            if (end == -1) 
                end = str.length;
            return (str.substring(begin, end));
        }
    }
    return "";
}

//??????url???????
function get_url_par(){
    var str = location.search;
    var begin = str.indexOf("?");
    if (begin == -1) {
        return "";
    }
    return (str.substring(begin));
}

//??url,?????name???,?????value,?????,???
//??value????(???),???url???name??
function set_url_par(name, value, urlpar){
    var newurlpar;
    var oldvalue;
    var newvalue;
    var pos;
    var endpos;
    var check_value;
    //check_value = Trim(value);
    
    if (value == "") {
        return urlpar;
    }
    
    if (urlpar == "") {
        urlpar = "?";
    }
	var name1 = "[?&]"+name+"="+value+"[&]*";
	
    pos = urlpar.search(new RegExp(name1));
	
	

    if (pos == -1) {
        if (urlpar == "?") {
            newurlpar = urlpar + name + "=" + value;
        }
        else {
            newurlpar = urlpar + "&" + name + "=" + value;
        }
        return newurlpar;
    }
    //??name???value
    endpos = urlpar.indexOf("&", pos + 1);
    if (endpos == -1) {
        //??name???????
        endpos = urlpar.length;
		
    }
	oldvalue = urlpar.substring(pos+1, endpos);
	    newvalue = name + "=" + value;
	    newurlpar = urlpar.replace(oldvalue, newvalue);
	    return newurlpar;
    
}
function str2array(str){
	var result="";
	if(str.length>0)
	   for(i=0;i<str.length;i++)
	      result+=str[i];
    return result;		  
		
}
/*判断线路接口类型*/
/*输入：接口描述符
 * 输出：静态、动态、pppoe分别返回"static"、"dhcp"、"pppoe"
 */
function get_wan_type(intf_str){
    var cmdstr;
    var pos;
    var resultstr;
    var result = new Array();
    
    cmdstr = "show run interface " + intf_str;
    result = request("exec", cmdstr);
    resultstr = str2array(result);
    
    pos = resultstr.indexOf("ip address");
    if (pos != -1) {
        pos = resultstr.indexOf("ip address dhcp");
        if (pos != -1) {
            return "dhcp"; //dhcp
        }
        else { //static
            return "static";
        }
    }
    else {
        pos = resultstr.indexOf("pppoe");
        if (pos != -1) {
            return "pppoe";
        }
        else {
            /*没配任何接口*/
            return "";
        }
    }
}


/*验证数字是否合法
 *输入：待验证的数字字符串，数字下界，数字上界
 *输出：合法返回TRUE，否则返回FALSE
 */
function validate_number(numstr, down, up){
    var num;
    /*先判断是不是数字*/
    if (isNumber(numstr) == false) {
        return false;
    }
    num = parseInt(numstr);
    if (num >= down && num <= up) 
        return true;
    else 
        return false;
}

/*根据值，设定select控件的选中项
 *输入：控件id，选项值
 *输出：将select控件的选中项设置成值等于entry的项
 */
function set_selected_as(selectid, entry){
    var i;
    var select_obj;
    select_obj = document.getElementById(selectid);
    for (i = 0; i < select_obj.length; i++) {
        if (select_obj.options[i].text == entry) {
            select_obj.options[i].selected = true;
        }
    }
}


/*根据输入接口名，如fa1/0,返回真实接口，针对pppoe返回对应dialer口，其他返回以太口（原值返回）*/
function get_real_intf(intf){
    var ret_intf = intf;
    var pppoe_par = new Array();
    if (get_wan_type(intf) == "pppoe") {
        pppoe_par = get_pppoe_par(intf);
        if (pppoe_par == null || pppoe_par == "") 
            return;
        if (pppoe_par.length > 1) {
            //alert(pppoe_par);
            ret_intf = "dialer " + pppoe_par[1];
        }
    }
    return ret_intf;
}


function get_pppoe_par(intf){
    var result = new Array();
    var pppoe_par = new Array();
    var cmdstr;
    var i;
    cmdstr = "show html ip interface " + intf + " pppoe";
    /*最后有一空行*/
    result = request("exec", cmdstr);
    
    if (result.length == 1) {
        pppoe_par[0] = "";
        return pppoe_par;
    }
    
    for (i = 0; i < result.length - 1; i++) {
        pppoe_par[i] = get_value(result[i]);
    }
    
    return pppoe_par;
}


function get_value(str){
    var result;
    var pos;
    pos = str.indexOf(":");
    result = str.substr(pos + 2); //一个冒号和一个空格
    //如果是IP，空值会返回0.0.0.0，需修正为空字符串
    if (result == "0.0.0.0") {
        result = "";
    }
    return result;
}

/*返回系统所处模式，分别返回NAT，PUBLIC，NONE*/
function get_sys_mode(){
    var result = new Array();
    var i, pos, pos1;
    var intf_lan = get_intf_single("LAN0");
    var cmdstr = "show run interface " + intf_lan;
    result = request("exec", cmdstr);
    
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("ip nat inside");
        if (pos != -1) {
            return "NAT";
        }
        pos = result[i].indexOf("ip rate-limit in");
        pos1 = result[i].indexOf("ip area inside");
        if ((pos != -1) || (pos1 != -1)) {
            return "PUBLIC";
        }
    }
    return "NONE";
}


/*判断是否配置了防内网攻击，配置了返回所配命令，否则返回空串*/
function defence_lan_is_configed(){
    var cmdstr = "show run";
    var result = new Array();
    var i, pos;
    
    result = request("exec", cmdstr);
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("security anti-lan-attack");
        if (pos != -1) {
            return result[i];
        }
    }
    return "";
}
var lang = window.top.SysLan || 'en';
var Const = lang == 'en'?{
    linkError:'Unable to establish a connection！',
    servError:'Get server IP address error！',
    netError:'Please check your network connection is normal'
}:{
    linkError:'无法建立连接！',
    servError:'获取服务器IP地址错误！',
    netError:'请检查您的网络连接是否正常'
};
/* 从pub_fun_for_switch.js移过来的 */
function request_with_ip(ipstr,strCLIMode,strCLICommand){
    var ip_request = false;
    var commandStr;
    var resultall,resultArray;
    var ipadd_get;

    if(window.ActiveXObject) {
        try {
            ip_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
            try {
                ip_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e) {
                ip_request = false;
            }
        }
    }
    if(ip_request) {
        if(ipstr!=null){
            ipadd_get= _getProtocol() + "//"+ipstr+"/WEB_VMS/LEVEL15/";
            try {
                ip_request.open("POST", ipadd_get, false);
            }
            catch(e) {
                alert(Const.linkError);
                return;
            }
        }
        else{
            alert(Const.servError);
        }
        commandStr="command="+strCLICommand+"&strurl="+strCLIMode+"%04&mode=%02PRIV_EXEC&signname=Red-Giant."
        try {
            ip_request.send(commandStr);
        }
        catch(e) {
            alert(Const.servError);
            return;
        }
        //debug(commandStr);
        resultall = ip_request.ResponseText;
        resultArray=parseResult(resultall);
    }
    //debug(resultall);
    return resultArray;
}

function get_sw_produce(sw_ip){
    var cmdstr = "show basic-info d\r\n"
    var result = request_with_ip(sw_ip, "exec", cmdstr);
    if (result == null || result == "") 
        return "";
    
    var produce = result[2].substr(60);
    produce = Trim(produce);
    return produce;
}

function get_sw_hostname(sw_ip){
    var cmdstr = "show basic-info \r\n"
    var result = request_with_ip(sw_ip, "exec", cmdstr);
    
    if (result == null || result == "") 
        return "";
    
    var pos = result[0].indexOf(":");
    if (pos == -1) {
        return "";
    }
    var hosts = Trim(result[0].substr(pos + 1));
    return hosts;
}

/*删除公网模式限速和弹性带宽命令*/
function del_all_rate_public(){
    var cmdstr = "";
    var result = new Array();
    var cmdtmp = new Array();
    var i;
    var pos;
    var pool_name = "";
    
    result = request("exec", "show run");
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("ip rate-limit default");
        if (pos != -1) {
            cmdstr += "no ip rate-limit default\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip rate-limit iprange");
        if (pos != -1) {
            cmdtmp = result[i].split(" ");
            cmdstr += "no ip rate-limit iprange " + cmdtmp[3] + " " + cmdtmp[4] + "\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip rate-limit ip");
        if (pos != -1) {
            cmdtmp = result[i].split(" ");
            cmdstr += "no ip rate-limit ip " + cmdtmp[3] + "\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip bandwidth-auto-adjust total-bandwidth");
        if (pos != -1) {
            cmdstr += "no ip bandwidth-auto-adjust total-bandwidth\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip bandwidth-auto-adjust default");
        if (pos != -1) {
            cmdstr += "no ip bandwidth-auto-adjust default\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip bandwidth-auto-adjust iprange");
        if (pos != -1) {
            cmdtmp = result[i].split(" ");
            cmdstr += "no ip bandwidth-auto-adjust iprange " + cmdtmp[3] + " " + cmdtmp[4] + "\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip bandwidth-auto-adjust ip");
        if (pos != -1) {
            cmdtmp = result[i].split(" ");
            cmdstr += "no ip bandwidth-auto-adjust ip " + cmdtmp[3] + "\r\n";
            continue;
        }
        
        pos = result[i].indexOf("ip bandwidth-auto-adjust disable");
        if (pos != -1) {
            cmdstr += "no ip bandwidth-auto-adjust disable\r\n";
            continue;
        }
    }
    return cmdstr;
}


/*返回弹性带宽及IP限速是基于接口及ACL还是基于全局*/
function get_bw_auto_mode(){

    var result = new Array();
    var i;
    var pos;
    var pos0;
    var pos1;
    var pos2;
    
    result = request("exec", "show run");
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("ip nat translation rate-limit");
        pos1 = result[i].indexOf("ip nat translation bandwidth-auto-adjust");
        pos0 = result[i].indexOf("ip nat translation netflow");
        if (pos != -1 || pos1 != -1) {
            pos2 = result[i].indexOf("interface");
            if (pos2 != -1) 
                return 2;
            else 
                return 1;
        }
        if (pos0 != -1) {
            pos2 = result[i].indexOf("interface");
            if (pos2 != -1) 
                return 4;
            else 
                return 3;
        }
    }
    
    return 0;
    
    
}


/*IP地址由整型转换成字符串*/
function long_to_ip(ip_num){
    var ipstr;
    ipstr = ((ip_num & 0xFF000000) >>> 24).toString() + "." +
    ((ip_num & 0x00FF0000) >>> 16).toString() +
    "." +
    ((ip_num & 0x0000FF00) >>> 8).toString() +
    "." +
    ((ip_num & 0x000000FF)).toString();
    return ipstr;
}


function update_timer(timer_func){
    timer_func();
    setTimeout("update_timer(" + timer_func + ")", 5000);
    
    
}


function add_option(id, text, value){
    var Option;
    Option = document.createElement("OPTION");
    id.options.add(Option);
    Option.innerText = text;
    Option.value = value;
}


/*返回wan口所处模式，分别返回NAT，PUBLIC，NONE*/
function get_interface_mode(intf){
    var result = new Array();
    var cmdstr = "show run interface " + intf;
    result = request("exec", cmdstr);
    
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("ip nat ");
        if (pos != -1) {
            return "NAT";
        }
        pos = result[i].indexOf("ip area ");
        if (pos != -1) {
            return "PUBLIC";
        }
    }
    return "NONE";
}


/*获取限速模式，公网返回ip，nat返回ip nat translation，其他返回空*/
function get_ratelimit_mode(){
    var rate_mode = "";
    var cmdstr = "show run interface "
    var result = new Array();
    var g_intf = new Array();
    var i, pos;
    
    g_intf = get_intf_all();
    cmdstr += g_intf[0];
    result = request("exec", cmdstr);
    
    for (i = 0; i < result.length; i++) {
        pos = result[i].indexOf("ip nat inside");
        if (pos != -1) {
            rate_mode = "ip nat translation ";
            break;
        }
        else {
            pos = result[i].indexOf("ip rate-limit in");
            if (pos != -1) {
                rate_mode = "ip ";
                break;
            }
        }
    }
    
    /*rate_mode为空，不一定就不是nat或公网模式（cli直接no掉lan口的模式）*/
    if (rate_mode == "") {
        cmdstr = "show html nat mode";
        result = request("exec", cmdstr);
        if (result[0].substr(6) == "1") {
            rate_mode = "ip nat translation ";
        }
        if (result[0].substr(6) == "2") {
            rate_mode = "ip ";
        }
    }
    return rate_mode;
}

/* 保留小数 */
function ForDight(Dight, How){
    Dight = Math.round(Dight * Math.pow(10, How)) / Math.pow(10, How);
    return Dight;
}

function isfloatNumeric(str){
    if (isEmpty(str)) 
        return true
    if ((isNaN(str)) || (str.indexOf("-") != -1)) 
        return false
    return true
}


function get_intf_vir_ppp(){
    var intf_str = new Array();
    var g_all_intf = new Array();
    var cmdstr;
    var i;
    var intf_pos;
    var start;
    var end;
    var pos;
    var type;
    var exist_17;
    var intf_pos = 0;
    
    cmdstr = "show html interface status";
    intf_str = request("exec", cmdstr);
    
    if (intf_str == null) 
        return;
    
    for (i = 0; i < intf_str.length; i++) {
        exist_17 = intf_str[i].indexOf("Vi");
        
        if (exist_17 != -1) {
            start = intf_str[i].indexOf("#");
            end = intf_str[i].indexOf("#", start + 1);
            g_all_intf[intf_pos++] = intf_str[i].substring(start + 1, end);
            
        }
        
    }
    
    for (i = 0; i < g_all_intf.length; i++) {
        pos = g_all_intf[i].indexOf("Vi");
        if (pos != -1) {
            g_all_intf[i] = "virtual-ppp " + g_all_intf[i].substr(2);
        }
    }
    
    return g_all_intf;
}


function vpn_stats_trans(flag){
    var val_str;
    
    switch (flag) {
        case "1":
            val_str = "拨号成功";
            break;
        case "2":
            val_str = "处于人工关闭状态，需要打开才能拨号";
            break;
        case "3":
            val_str = "拨号未成功：隧道认证失败，请检查密码";
            break;
        case "4":
            val_str = "拨号未成功：pap认证失败,请检查用户名密码";
            break;
        case "5":
            val_str = "拨号未成功：chap认证失败,请检查用户名密码";
            break;
        case "6":
            val_str = "拨号未成功：ppp认证超时,可能是线路问题";
            break;
        case "7":
            val_str = "拨号未成功：对端需要隧道认证，或者本端没配置隧道认证密码";
            break;
        case "8":
            val_str = "正在拨号中......\r\n如长时间无法连接,可能是线路问题,请和线路提供商联系";
            break;
        default:
            val_str = "";
            break;
    }
    
    return val_str;
}

function get_acl_lists(detail){
    var lists = new Array();
    var standard = {};
    var extended = {};
    var result = request("exec", "show access-lists");
    if (result.length == 0)
        return ""
    var i;
    var pos;
    for (i = 0; i < result.length; i++) {
        if (result[i].indexOf("ip access-list") == -1)
            continue;
        var pos = result[i].lastIndexOf(" ");
        var a = Trim(result[i].substr(pos));
        /*/^([1-9])/.test(a) ?*/ lists.push(a) /*: ''*/;//只返回数字开头的ACL号|| 20141105改为获取全部的
        result[i].indexOf('standard')!=-1 ? (standard[a]=1) : (extended[a]=1);
    }
    if (detail) {
    	return {lists : lists, standard : standard, extended : extended}
    };
    return lists;
}

//计算每个刻度值，然后返回六个刻度值。
function getCalibration(band, val, unit){
    var cals = new Array();
    if (unit == "K" || unit == "k") {
        for (var i = 300; i < band; i = i * 2) {
            if (val < i) {
                val = i;
                break;
            }
        }
    }
    else {
        for (var i = 6; i < band; i = i * 2) {
            if (val < i) {
                val = i;
                break;
            }
        }
    }
    var oneCal = Math.ceil(val / 6);
    for (var i = 0; i < 6; i++) {
        cals[i] = oneCal * (i + 1);
    }
    return cals;
}

//获取数组最大值
function maxValue(vals){
    var max = 0;
    for (var i = 0; i < vals.length; i++) {
        if (parseInt(vals[i]) > max) {
            max = parseInt(vals[i]);
            continue;
        }
    }
    return max;
}

//验证str中是否含有非法字符（`~%^&*+?）,有的话return true else return false
function testValue(str){
	var reg = /[\,\`\"\'\~\#\$\%\^\&\*\?\+\？\……\·\￥]+/g;
	return reg.test(str);
}//定义字符串分隔符
var g_split_str = "★ワЁ";


//信息存储到cookie
var __ToolCookie = {
	/**
	 * cfg : {key : key, value : value}
	 * 
	 */
	setCookie	:	function (cfg) {
		var d = new Date();
		d.setTime(d.getTime() + 3600*1000);
		document.cookie = cfg.key + '=' + escape(cfg.value) + ';expire=' + d.toGMTString();
	},
	getCookie	:	function (key) {
		var cookie = document.cookie || '', pos = cookie.indexOf(key + '=');
		if (pos == -1) {
			return null;
		}
		var end = cookie.indexOf(';', pos);
		return unescape(cookie.slice(pos, end == -1 ? cookie.length : end));
	}
}

var getWanFromCookie = function () {
	var source = __ToolCookie.getCookie('intf') && __ToolCookie.getCookie('intf').split('88888888'), result = [];
	
	if (!source){
		source = request('exec', 'show html int info');
		source.pop();
		//__ToolCookie.setCookie({key : 'intf', value : source.join('88888888')});
	}
	
	for (var i = 0; i < source.length; i++) {
		var t = source[i].split('#');
		if (t[6] && (t[6] == 'WAN')) {
			result.push(t[1]);	
		}	
	}
	return result;
}

var getSysModeFromCookie = function () {
	var source = __ToolCookie.getCookie('mode') && __ToolCookie.getCookie('mode').split('88888888'), result = [];

	if (!source){
		source = request('exec', 'show sys-mode');
		//source.pop();
		//__ToolCookie.setCookie({key : 'mode', value : source[0]});
	}

	return source[0].indexOf('gateway') == -1 ? 'bridge' : 'gateway';
}

var isOpenIllegal = function (auditName) {
	var s = request('exec', 'show ' + auditName + ' config ' + get_wan_first_up().intf_name);
	for (var i = 0, length = s.length - 1; i < length; i++) {
		if (s[i].indexOf(auditName + ' 100') != -1 && s[i].indexOf('illegal') != -1) {
			return true;
		}
	}
	return false;
}

function isAuthOpen () {
	var res = request("exec", "show web-auth port-control");
	return res[2] && Trim(res[2]) == 'On';
}