[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/zte_webui_min/js/net.js b/ap/app/zte_webui_min/js/net.js
new file mode 100755
index 0000000..f245f41
--- /dev/null
+++ b/ap/app/zte_webui_min/js/net.js
@@ -0,0 +1,4175 @@
+

+define("firewall_url_filter","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    //system url filter setting VM

+     

+    function UrlFilterSettingVM() {

+        var target = this;

+        var urlFltInfo = service.getUrlFilterList();

+        var columnsTmpl = [{

+                columnType: "checkbox",

+                rowText: "index",

+                width: "30%"

+            }, {

+                headerTextTrans: "url",

+                rowText: "url",

+                width: "70%"

+            }

+        ];

+        target.rules = ko.observableArray(urlFltInfo.urlFilterRules);

+

+        target.gridTemplate = new ko.simpleGrid.viewModel({

+            data: target.rules(),

+            idName: "index",

+            columns: columnsTmpl,

+            tmplType: 'list',

+            pageSize: 10

+        });

+

+        target.clear = clearFunc;

+		

+        target.callback = callbackFunc;

+		//删除规则

+         

+        target.deleteRule = deleteRuleFunc;

+		

+        //添加规则

+         

+        target.addRule = addRuleFunc;

+		function callbackFunc(elem) {

+            if (elem.result != "success") {

+                errorOverlay();                

+            } else {

+				target.clear();

+                initialize(target);

+                successOverlay();

+                $("#urlFilters").translate();

+            }

+		}

+		

+		//添加规则

+		function addRuleFunc() {

+            if (target.rules().length >= config.urlFilterMax) {

+                showAlert({

+                    msg: "url_filter_max",

+                    params: config.urlFilterMax

+                });

+                return false;

+            }

+            var tmpArr = [];

+            for (var idx = 0; idx < target.rules().length; idx++) {

+                tmpArr.push(target.rules()[idx].url);

+            }

+            if ($.inArray($("#addURLFilter").val(), tmpArr) != -1) {

+                showAlert("url_repeated");

+                return false;

+            }

+

+            showLoading();

+            var urlFltParams = {

+                goformId: "URL_FILTER_ADD",

+                addURLFilter: $("#addURLFilter").val()

+            };

+            service.addUrlFilterRule(urlFltParams, target.callback);

+        }

+		//删除规则

+		function deleteRuleFunc() {

+            showConfirm('confirm_data_delete', function () {

+                showLoading();

+                var urlFltParams = {

+                    goformId: "URL_FILTER_DELETE",

+                    url_filter_delete_id: target.gridTemplate.selectedIds().join(";") + ";"

+                };

+                service.deleteSelectedRules(urlFltParams, target.callback);

+            });

+        }

+		

+    }

+	

+		function clearFunc() {

+            $("#addURLFilter").val("");

+        }

+		

+    //页面初始化

+     

+    function initialize() {

+       

+        var vm = new UrlFilterSettingVM();

+		bindContainer(vm);

+    }

+	function bindContainer(vm){

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+		ko.applyBindings(vm, container[0]);

+        $('#urlFilterForm').validate({

+            submitHandler: function () {

+                vm.addRule();

+            },

+            rules: {

+                addURLFilter: 'url_filter_check'

+            }

+        });

+

+        $("#urlFilterListForm").validate({

+            submitHandler: function () {

+                vm.deleteRule();

+            }

+        });

+	}

+

+    return {

+        init: initialize

+    };

+});

+

+define("firewall_upnp_set","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    //system upnp setting VM

+     

+    function UpnpSettingVM() {

+        var target = this;

+        var upnpInfo = getUpnpSetting();

+

+        target.upnpSetting = ko.observable(upnpInfo.upnpSetting);

+

+        target.save = saveFunc;

+		function saveFunc() {

+            showLoading();

+            var upnpParams = {};

+            upnpParams.upnpSetting = target.upnpSetting();

+            service.setUpnpSetting(upnpParams, function (rlt) {

+                if (rlt.result == "success") {

+                    successOverlay();

+                } else {

+                    errorOverlay();

+                }

+            });

+

+        }

+    }

+	

+		

+    //获取upnp 信息

+     

+    function getUpnpSetting() {

+        return service.getUpnpSetting();

+    }

+

+    //初始化UpnpSettingVM model

+     

+    function initialize() {

+        

+        var vm = new UpnpSettingVM();

+		bindContainer(vm);

+        

+    }

+	function bindContainer(vm) {

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+		ko.applyBindings(vm, container[0]);

+        $('#upnpSettingForm').validate({

+            submitHandler: function () {

+                vm.save();

+            }

+        });

+	}

+

+    return {

+        init: initialize

+    };

+});

+

+//端口映射

+ 

+define("firewall_port_map","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    var protocolModes = _.map(config.MAP_PROTOCOL_MODES, function (ele) {

+        return new Option(ele.name, ele.value);

+    });

+

+    var columnsTmpl = [{

+            columnType: "checkbox",

+            rowText: "index",

+            width: "8%"

+        }, {

+            headerTextTrans: "source_port",

+            rowText: "sourcePort",

+            width: "20%"

+        }, {

+            headerTextTrans: "dest_ip_address",

+            rowText: "destIpAddress",

+            width: "20%"

+        }, {

+            headerTextTrans: "dest_port",

+            rowText: "destPort",

+            width: "20%"

+        }, {

+            headerTextTrans: "protocol",

+            rowText: "protocol",

+            width: "12%"

+        }, {

+            headerTextTrans: "comment",

+            rowText: "comment",

+            width: "20%"

+        }

+    ];

+

+    //prot_map VM

+     

+    function PortMapVM() {

+        var target = this;

+        var mapInfo = getPortMap();

+

+        target.oriPortMapEnable = ko.observable(mapInfo.portMapEnable);

+        target.rules = ko.observableArray(mapInfo.portMapRules);

+        target.portMapEnable = ko.observable(mapInfo.portMapEnable);

+

+		

+        target.comment = ko.observable('');

+        target.selectedMode = ko.observable('TCP&UDP');

+        target.modes = ko.observableArray(protocolModes);

+		

+        target.destPort = ko.observable('');

+        target.destIpAddress = ko.observable('');

+        target.sourcePort = ko.observable('');

+

+

+

+        target.gridTemplate = new ko.simpleGrid.viewModel({

+            data: target.rules(),

+            idName: "index",

+            columns: columnsTmpl,

+            tmplType: 'list',

+            pageSize: 10

+        });

+

+        //设定,新增,删除回调函数

+         

+        target.callback = callbackFunc;

+		

+		//删除规则

+         

+        target.deleteMapRules = deleteMapRulesFunc;

+		

+		//检查新增规则是否已经存在

+         

+        target.checkExist = checkExistFunc;

+		

+        //设定端口映射

+         

+        target.enablePortMap = enablePortMapFunc;

+

+        //保存规则

+         

+        target.save = saveFunc;

+		        

+		//保存规则

+		function saveFunc() {

+            if (target.rules().length >= config.portForwardMax) {

+                showAlert({

+                    msg: "rules_max",

+                    params: config.portForwardMax

+                });

+                return;

+            }

+

+            if (target.checkExist()) {

+                showAlert("rule_exist");

+                return;

+            }

+

+            showLoading();

+            var mapParams = {};

+            mapParams.portMapEnable = target.portMapEnable();

+            mapParams.sourcePort = target.sourcePort();

+            mapParams.destIpAddress = target.destIpAddress();

+            mapParams.destPort = target.destPort();

+            mapParams.protocol = target.selectedMode();

+            mapParams.comment = target.comment();

+            service.setPortMap(mapParams, target.callback);

+        }

+		

+		//检查新增规则是否已经存在

+		function checkExistFunc() {

+            var newMapRule = {

+                sourcePort: target.sourcePort(),

+                destIpAddress: target.destIpAddress(),

+                destPort: target.destPort(),

+                protocol: transProtocolValue(target.selectedMode())

+            };

+

+            var oldMapRule;

+            var mapRules = target.rules();

+            for (var idx = 0; idx < mapRules.length; idx++) {

+                oldMapRule = {

+                    sourcePort: mapRules[idx].sourcePort,

+                    destIpAddress: mapRules[idx].destIpAddress,

+                    destPort: mapRules[idx].destPort,

+                    protocol: mapRules[idx].protocol

+                };

+

+                if (_.isEqual(newMapRule, oldMapRule)) {

+                    return true;

+                }

+            }

+            return false;

+        }

+		

+		//设定端口映射

+		function enablePortMapFunc() {

+            showLoading();

+            var mapParams = {};

+            mapParams.portMapEnable = target.portMapEnable();

+            service.enablePortMap(mapParams, target.callback);

+        }

+		

+		//删除规则

+		function deleteMapRulesFunc() {

+            var ids = target.gridTemplate.selectedIds();

+            if (ids.length == 0) {

+                showAlert("no_data_selected");

+                return;

+            }

+

+            showConfirm("confirm_data_delete", function () {

+                showLoading();

+                var mapParams = {};

+                mapParams.indexs = ids;

+                service.deleteMapRules(mapParams, target.callback);

+            });

+        }

+		

+		//设定,新增,删除回调函数

+		function callbackFunc(ret) {

+            if (ret.result == "success") {

+                clear();

+                initialize(target);

+                successOverlay();

+            } else {

+                errorOverlay();

+            }

+        }

+

+        //情况添加规则输入

+         

+        function clear() {

+            target.sourcePort('');

+            target.destIpAddress('');

+            target.destPort('');

+            target.selectedMode('TCP&UDP');

+            target.comment('');

+        }

+    }

+

+    //获取port map信息

+     

+    function getPortMap() {

+        return service.getPortMap();

+    }

+

+	function bindingContainer(vm){

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(vm, container[0]);

+

+	}

+    //初始化port map view model

+     

+    function initialize(viewModel) {

+        var vm;

+        if (viewModel) {

+            vm = viewModel;

+            var mapInfo = getPortMap();

+            vm.portMapEnable(mapInfo.portMapEnable);

+            vm.oriPortMapEnable(mapInfo.portMapEnable);

+            vm.rules(mapInfo.portMapRules);

+            vm.gridTemplate.clearAllChecked();

+            vm.gridTemplate.data(mapInfo.portMapRules);

+            refreshTableHeight();

+            renderCheckbox();

+            return;

+        }

+

+        vm = new PortMapVM();

+        bindingContainer(vm);

+        fixTableHeight();

+

+        $('#mapBasicForm').validate({

+            submitHandler: function () {

+                vm.enablePortMap();

+            }

+        });

+

+        $('#portMapListForm').validate({

+            submitHandler: function () {

+                vm.deleteMapRules();

+            }

+        });

+

+        $('#portMapForm').validate({

+            submitHandler: function () {

+                vm.save();

+            },

+            rules: {

+                txtDestIpAddress: {

+                    ip_check: true

+                },

+                txtSourcePort: {

+                    digits: true,

+                    range_except: [1, 65000]

+                },

+                txtDestPort: {

+                    digits: true,

+                    range_except: [1, 65000]

+                },

+                txtComment: {

+                    comment_check: true

+                }

+            },

+            errorPlacement: function (error, element) {

+                if (element.attr("name") == "txtDestIpAddress") {

+                    error.appendTo("#txtDestIpAddressErrorDiv");

+                } else if (element.attr("name") == "txtSourcePort") {

+                    error.appendTo("#txtSourcePortErrorDiv");

+                } else if (element.attr("name") == "txtDestPort") {

+                    error.appendTo("#txtDestPortErrorDiv");

+                } else

+                    error.insertAfter(element);

+            }

+        });

+    }

+

+    return {

+        init: initialize

+    };

+});

+

+//端口转发

+ 

+define("firewall_port_forward","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    var protocolModes = _.map(config.FORWARD_PROTOCOL_MODES, function (ele) {

+        return new Option(ele.name, ele.value);

+    });

+    //列表模板的columns项

+     

+    var columnsTmpl = [{

+            columnType: "checkbox",

+            rowText: "index",

+            width: "8%"

+        }, {

+            headerTextTrans: "ip_address",

+            rowText: "ipAddress",

+            width: "23%"

+        }, {

+            headerTextTrans: "port_range",

+            rowText: "portRange",

+            width: "23%"

+        }, {

+            headerTextTrans: "protocol",

+            rowText: "protocol",

+            width: "23%"

+        }, {

+            headerTextTrans: "comment",

+            rowText: "comment",

+            width: "23%"

+        }

+    ];

+

+    //prot_forward VM

+     

+    function PortForwardVM() {

+        var target = this;

+        var fwdinfo = getPortForward();

+

+        target.portForwardEnable = ko.observable(fwdinfo.portForwardEnable);

+        target.oriPortForwardEnable = ko.observable(fwdinfo.portForwardEnable);

+		

+        target.portEnd = ko.observable('');

+        target.portStart = ko.observable('');

+        target.ipAddress = ko.observable('');

+		

+        target.comment = ko.observable('');

+        target.selectedMode = ko.observable('3');

+        target.modes = ko.observableArray(protocolModes);

+

+        target.rules = ko.observableArray(fwdinfo.portForwardRules);

+		

+		//设定,新增,删除回调函数

+         

+        target.callback = callbackFunc;

+		

+        //创建列表模板

+         

+        target.gridTemplate = new ko.simpleGrid.viewModel({

+            data: target.rules(),

+            idName: "index",

+            columns: columnsTmpl,

+            tmplType: 'list',

+            pageSize: 10

+        });

+

+        //检查新增规则是否已经存在

+         

+        target.checkExist = checkExistFunc;

+				

+		//保存规则

+         

+        target.save = saveFunc;

+		

+		//删除规则

+         

+        target.deleteForwardRules = deleteForwardRulesFunc;

+		

+        //设定虚拟服务器

+         

+        target.enableVirtualServer = enableVirtualServerFunc;

+		

+		//设定虚拟服务器

+		function enableVirtualServerFunc() {

+            showLoading();

+            var fwdParams = {};

+            fwdParams.portForwardEnable = target.portForwardEnable();

+            service.enableVirtualServer(fwdParams, target.callback);

+        }

+		

+		//删除规则

+		function deleteForwardRulesFunc() {

+            var ids = target.gridTemplate.selectedIds();

+            if (ids.length == 0) {

+                showAlert("no_data_selected");

+                return;

+            }

+

+            showConfirm("confirm_data_delete", function () {

+                showLoading('deleting');

+                var fwdParams = {};

+                fwdParams.indexs = ids;

+                service.deleteForwardRules(fwdParams, target.callback);

+            });

+        }

+		

+		//保存规则

+		function saveFunc() {

+            if (target.rules().length >= config.portForwardMax) {

+                showAlert({

+                    msg: "rules_max",

+                    params: config.portForwardMax

+                });

+                return;

+            }

+

+            if (target.checkExist()) {

+                showAlert("rule_exist");

+                return;

+            }

+

+            showLoading();

+            var fwdParams = {};

+            fwdParams.comment = target.comment();

+            fwdParams.protocol = target.selectedMode();

+            fwdParams.portEnd = target.portEnd();

+            fwdParams.portStart = target.portStart();

+            fwdParams.ipAddress = target.ipAddress();

+            service.setPortForward(fwdParams, target.callback);

+        }

+         //情况添加规则输入

+        function clear() {

+            target.ipAddress('');

+            target.portStart('');

+            target.portEnd('');

+            target.selectedMode('TCP&UDP');

+            target.comment('');

+        }

+		

+		//设定,新增,删除回调函数

+		function callbackFunc(ret) {

+            if (ret.result == "success") {

+                clear();

+                initialize(target);

+                successOverlay();

+            } else {

+                errorOverlay();

+            }

+        }

+

+		//检查新增规则是否已经存在

+		function checkExistFunc() {

+            var newRule = {

+                ipAddress: target.ipAddress(),

+                portRange: target.portStart() + ' - ' + target.portEnd(),

+                protocol: transProtocolValue(target.selectedMode())

+            };

+

+            var oldRule;

+            var fwdrules = target.rules();

+            for (var ki = 0; ki < fwdrules.length; ki++) {

+                oldRule = {

+                    ipAddress: fwdrules[ki].ipAddress,

+                    portRange: fwdrules[ki].portRange,

+                    protocol: fwdrules[ki].protocol

+                };

+

+                if (_.isEqual(newRule, oldRule)) {

+                    return true;

+                }

+            }

+            return false;

+        }

+    }

+

+    //获取port forward信息

+     

+    function getPortForward() {

+        return service.getPortForward();

+    }

+

+    //初始化port forward view model

+     

+    function initialize(viewModel) {

+        var vm;

+        if (viewModel) {

+            vm = viewModel;

+            var fwdinfo = getPortForward();

+            vm.gridTemplate.clearAllChecked();

+            vm.gridTemplate.data(fwdinfo.portForwardRules);

+            vm.rules(fwdinfo.portForwardRules);

+            vm.portForwardEnable(fwdinfo.portForwardEnable);

+            vm.oriPortForwardEnable(fwdinfo.portForwardEnable);

+            refreshTableHeight();

+            return;

+        }

+

+        vm = new PortForwardVM();

+        bindContainer(vm);

+		

+        fixTableHeight();

+        renderCheckbox();

+

+        $('#virtualServerForm').validate({

+            submitHandler: function () {

+                vm.enableVirtualServer();

+            }

+        });

+

+        $('#portForwardListForm').validate({

+            submitHandler: function () {

+                vm.deleteForwardRules();

+            }

+        });

+

+        $('#portForwardForm').validate({

+            submitHandler: function () {

+                vm.save();

+            },

+            rules: {

+                txtIpAddress: {

+                    ip_check: true

+                },

+                txtPortStart: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtPortEnd"

+                },

+                txtPortEnd: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtPortStart"

+                },

+                txtComment: {

+                    comment_check: true

+                }

+            },

+            groups: {

+                range: "txtPortStart txtPortEnd"

+            },

+            errorPlacement: function (error, element) {

+                if (element.attr("name") == "txtIpAddress") {

+                    error.appendTo("#ipErrorDiv");

+                } else if (element.attr("name") == "txtPortStart" || element.attr("name") == "txtPortEnd") {

+                    error.appendTo("#portRangeErrorDiv");

+                } else

+                    error.insertAfter(element);

+            }

+        });

+    }

+	

+	function bindContainer(vm){

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(vm, container[0]);

+

+	}

+	

+

+    return {

+        init: initialize

+    };

+});

+

+define("firewall_port_filter","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    var PROTOCOLS = {

+        ICMP: 'ICMP',

+        NONE: 'None'

+    };

+

+    var columnsTmpl = [{

+            columnType: "checkbox",

+            rowText: "index",

+            width: "4%"

+        }, {

+            headerTextTrans: "mac_address",

+            rowText: "macAddress",

+            width: "12%"

+        }, {

+            headerTextTrans: "ip_type",

+            rowText: "ipType",

+            width: "5%",

+            display: config.IPV6_SUPPORT

+        }, {

+            headerTextTrans: "source_ip_address",

+            rowText: "sourceIpAddress",

+            width: "12%"

+        }, {

+            headerTextTrans: "dest_ip_address",

+            rowText: "destIpAddress",

+            width: "12%"

+        }, {

+            headerTextTrans: "protocol",

+            rowText: "protocol",

+            width: "12%",

+            needTrans: true

+        }, {

+            headerTextTrans: "source_port_range",

+            rowText: "sourcePortRange",

+            width: "12%"

+        }, {

+            headerTextTrans: "dest_port_range",

+            rowText: "destPortRange",

+            width: "12%"

+        }, {

+            headerTextTrans: "port_filter_action",

+            rowText: "action",

+            width: "12%",

+            needTrans: true

+        }, {

+            headerTextTrans: "comment",

+            rowText: "comment",

+            width: "12%"

+        }

+    ];

+

+    var protocolModes = _.map(config.FILTER_PROTOCOL_MODES, function (elem) {

+        return new Option(elem.name, elem.value);

+    });

+    //prot_filter VM

+     

+    function PortFilterVM() {

+        var target = this;

+        var info = getPortFilter();

+		

+        target.oriDefaultPolicy = ko.observable(info.defaultPolicy);

+        target.defaultPolicy = ko.observable(info.defaultPolicy);

+        target.oriPortFilterEnable = ko.observable(info.portFilterEnable);

+        target.portFilterEnable = ko.observable(info.portFilterEnable);

+        target.rules = ko.observableArray(info.portFilterRules);

+		

+        target.ipv6Support = ko.observable(config.IPV6_SUPPORT);

+        target.comment = ko.observable('');

+        target.selectedMode = ko.observable('5');

+        target.modes = ko.observableArray(protocolModes);

+        target.sourcePortEnd = ko.observable('');

+        target.sourcePortStart = ko.observable('');

+        target.destPortEnd = ko.observable('');

+        target.destPortStart = ko.observable('');

+        target.destIpv6Address = ko.observable('');

+        target.sourceIpv6Address = ko.observable('');

+        target.sourceIpAddress = ko.observable('');

+        target.destIpAddress = ko.observable('');

+        target.macAddress = ko.observable('');

+        target.portFilterAction = ko.observable('');

+

+        target.ipType = ko.observable('ipv4');

+

+        //设定,新增,删除回调函数

+         

+        target.callback = callbackFunc;

+		

+        //创建列表模板

+         

+        target.gridTemplate = new ko.simpleGrid.viewModel({

+            data: target.rules(),

+            idName: "index",

+            columns: columnsTmpl,

+            tmplType: 'list',

+            pageSize: 20

+        });

+        //default policy change handler

+         

+        target.policyChangeHandler = policyChangeHandlerFunc;

+

+        //保存规则

+         

+        target.save = saveFunc;

+	

+        //设定过滤基本信息

+         

+        target.setPortFilterBasic = setPortFilterBasicFunc;

+		

+		//清空添加规则输入

+         

+        target.clear = clearFunc;

+

+        //检查新增规则是否已经存在

+         

+        target.checkExist = checkExistFunc;

+

+		//ip类型变化事件监听

+         

+        target.ipTypeChangeHandler = ipTypeChangeHandlerFunc;

+		

+        //协议变化事件监听

+         

+        target.protocolChangeHandler = protocolChangeHandlerFunc;

+

+        //删除规则

+         

+        target.deleteFilterRules = deleteFilterRulesFunc;

+

+        //init to call

+        target.policyChangeHandler();

+		

+		//设定,新增,删除回调函数

+		function callbackFunc(ret) {

+            if (ret.result != "success") {

+                errorOverlay();

+            } else {

+                target.clear();

+                initialize(target);

+                successOverlay();

+            }

+        }

+		//default policy change handler

+		function policyChangeHandlerFunc() {

+            var action = target.defaultPolicy() != "1" ? "Drop" : "Accept";

+            target.portFilterAction(action);

+            return true;

+        }

+		

+		//保存规则

+		function saveFunc() {

+            target.sourceIpAddress(target.sourceIpAddress().replace(/\s+/g, ''));

+            target.destIpAddress(target.destIpAddress().replace(/\s+/g, ''));

+            target.sourceIpv6Address(target.sourceIpv6Address().replace(/\s+/g, ''));

+            target.destIpv6Address(target.destIpv6Address().replace(/\s+/g, ''));

+            target.macAddress(target.macAddress().replace(/\s+/g, ''));

+            if (target.ipv6Support() == false) {

+                if (target.rules().length >= config.portForwardMax) {

+                    showAlert({

+                        msg: "rules_max",

+                        params: config.portForwardMax

+                    });

+                    return;

+                }

+

+                if (target.checkExist()) {

+                    showAlert("rule_exist");

+                    return;

+                }

+

+            } else {

+				var type = target.ipType() == "ipv4" ? "IPv4" : "IPv6";

+                var oldRules = _.filter(target.rules(), function (item) {

+                    return item.ipType == type;

+                });

+

+                if (oldRules.length >= config.portForwardMax) {

+                    showAlert({

+                        msg: "rules_max_v4v6",

+                        params: [type, config.portForwardMax]

+                    });

+                    return;

+                }

+

+                if (target.checkExist()) {

+                    showAlert({

+                        msg: "rule_exist_v4v6",

+                        params: type

+                    });

+                    return;

+                }

+            }

+            showConfirm("confirm_data_effect", function () {

+                showLoading();

+                var fltParams = {};

+                fltParams.macAddress = target.macAddress();

+

+                if (target.ipv6Support() && target.ipType() != 'ipv6') {

+                    fltParams.destIpAddress = target.destIpAddress();

+                    fltParams.sourceIpAddress = target.sourceIpAddress();

+                } else {

+                    fltParams.destIpAddress = target.destIpv6Address();

+                    fltParams.sourceIpAddress = target.sourceIpv6Address();

+                }

+				

+                fltParams.ipType = target.ipType();

+                fltParams.comment = target.comment();

+                fltParams.protocol = target.selectedMode();

+                fltParams.action = target.portFilterAction();

+                fltParams.sourcePortEnd = target.sourcePortEnd();

+                fltParams.sourcePortStart = target.sourcePortStart();

+                fltParams.destPortEnd = target.destPortEnd();

+                fltParams.destPortStart = target.destPortStart();

+                service.setPortFilter(fltParams, target.callback);

+            });

+        }

+		

+		//设定过滤基本信息

+		function setPortFilterBasicFunc() {

+            showLoading();

+            var elems = {};

+            elems.defaultPolicy = target.defaultPolicy();

+            elems.portFilterEnable = target.portFilterEnable();

+            service.setPortFilterBasic(elems, target.callback);

+        }

+		//清空添加规则输入

+		function clearFunc() {

+            target.comment('');

+            target.selectedMode('None');

+            target.sourcePortEnd('0');

+            target.sourcePortStart('0');

+            target.destPortEnd('0');

+            target.destPortStart('0');

+            target.sourceIpv6Address('');

+            target.sourceIpAddress('');

+            target.destIpv6Address('');

+            target.destIpAddress('');

+            target.macAddress('');

+            clearValidateMsg();

+        }

+		

+		//检查新增规则是否已经存在

+		function checkExistFunc() {

+            target.macAddress(target.macAddress().toUpperCase());

+            var currIpType = target.ipType().toUpperCase();

+            var newRule = {

+                macAddress: target.macAddress(),

+                destIpAddress: currIpType == "IPV4" ? target.destIpAddress() : target.destIpv6Address(),

+                sourceIpAddress: currIpType == "IPV4" ? target.sourceIpAddress() : target.sourceIpv6Address(),

+                destPortRange: target.destPortStart() == '0' ? '' : target.destPortStart() + ' - ' + target.destPortEnd(),

+                sourcePortRange: target.sourcePortStart() == '0' ? '' : target.sourcePortStart() + ' - ' + target.sourcePortEnd(),

+                action: target.portFilterAction() == "Drop" ? "filter_drop" : "filter_accept",

+                protocol: transProtocolValue(target.selectedMode()),

+                ipType: currIpType

+            };

+

+            var oldRule;

+            var rules = target.rules();

+            for (var ki = 0; ki < rules.length; ki++) {

+                oldRule = {

+                    macAddress: rules[ki].macAddress,

+                    destIpAddress: rules[ki].destIpAddress,

+                    sourceIpAddress: rules[ki].sourceIpAddress,

+                    destPortRange: rules[ki].destPortRange,

+                    sourcePortRange: rules[ki].sourcePortRange,

+                    action: rules[ki].action,

+                    protocol: rules[ki].protocol,

+                    ipType: rules[ki].ipType.toUpperCase()

+                };

+

+                if (_.isEqual(newRule, oldRule)) {

+                    return true;

+                }

+            }

+            return false;

+        }

+		

+		//协议变化事件监听

+		function protocolChangeHandlerFunc() {

+            if (target.selectedMode() == PROTOCOLS.ICMP || target.selectedMode() == PROTOCOLS.NONE) {

+                target.sourcePortEnd('0');

+                target.sourcePortStart('0');

+                target.destPortEnd('0');

+                target.destPortStart('0');

+                clearValidateMsg('#portRangeArea');

+            } else {

+                target.sourcePortEnd('65535');

+                target.sourcePortStart('1');

+                target.destPortEnd('65535');

+                target.destPortStart('1');

+            }

+            return true;

+        }

+		

+		//删除规则

+		function deleteFilterRulesFunc() {

+            var ids = target.gridTemplate.selectedIds();

+            if (ids.length == 0) {

+                showAlert("no_data_selected");

+                return;

+            }

+

+            showConfirm("confirm_data_effect", function () {

+                showLoading('deleting');

+                var rules = {};

+                rules.indexs = ids;

+                service.deleteFilterRules(rules, target.callback);

+            });

+        }

+		

+    }

+

+    //获取port filter信息

+     

+    function getPortFilter() {

+        return service.getPortFilter();

+    }

+		

+	//ip类型变化事件监听

+	function ipTypeChangeHandlerFunc() {

+        clearValidateMsg();

+        return true;

+    }

+	

+    //初始化port filter view model

+     

+    function initialize(viewModel) {

+        var vm;

+        if (viewModel) {

+            vm = viewModel;

+            var fltinfo = getPortFilter();

+            vm.gridTemplate.clearAllChecked();

+            vm.gridTemplate.data(fltinfo.portFilterRules);

+			vm.defaultPolicy(fltinfo.defaultPolicy);

+            vm.oriDefaultPolicy(fltinfo.defaultPolicy);

+            vm.portFilterEnable(fltinfo.portFilterEnable);

+            vm.oriPortFilterEnable(fltinfo.portFilterEnable);

+            vm.rules(fltinfo.portFilterRules);

+            refreshTableHeight();

+            $('#portFilters').find('tbody').translate();

+            renderCheckbox();

+            $('.notes-content').translate();

+            return;

+        }

+

+        vm = new PortFilterVM();

+        var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(vm, container[0]);

+

+        fixTableHeight();

+

+        $('#filterBasicForm').validate({

+            submitHandler: function () {

+                showConfirm("confirm_data_effect", function () {

+                    vm.setPortFilterBasic();

+                });

+            }

+        });

+

+        $('#portFilterListForm').validate({

+            submitHandler: function () {

+                vm.deleteFilterRules();

+            }

+        });

+

+        $('#portFilterForm').validate({

+            submitHandler: function () {

+                vm.save();

+            },

+            rules: {

+                txtMacAddress: {

+                    filter_optional: true,

+                    mac_check: true

+                },

+                txtDestIpAddress: {

+                    ip_check: true

+                },

+                txtSourceIpAddress: {

+                    ip_check: true

+                },

+                txtSourceIpv6Address: {

+                    ipv6: true

+                },

+                txtDestIpv6Address: {

+                    ipv6: true

+                },

+                txtDestPortStart: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtDestPortEnd"

+                },

+                txtDestPortEnd: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtDestPortStart"

+                },

+                txtSourcePortStart: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtSourcePortEnd"

+                },

+                txtSourcePortEnd: {

+                    digits: true,

+                    range: [1, 65535],

+                    portCompare: "#txtSourcePortStart"

+                },

+

+                txtComment: {

+                    comment_check: true

+                }

+            },

+            groups: {

+                destPort: "txtDestPortStart txtDestPortEnd",

+                sourcePort: "txtSourcePortStart txtSourcePortEnd"

+            },

+            errorPlacement: function (error, element) {

+                if (element.attr("name") == "txtMacAddress") {

+                    error.appendTo("#macErrorDiv");

+                } else if (element.attr("name") == "txtDestPortStart" || element.attr("name") == "txtDestPortEnd") {

+                    error.appendTo("#destPortErrorDiv");

+                } else if (element.attr("name") == "txtSourcePortStart" || element.attr("name") == "txtSourcePortEnd") {

+                    error.appendTo("#sourcePortErrorDiv");

+                } else

+                    error.insertAfter(element);

+            }

+        });

+    }

+

+    $.validator.addMethod("filter_optional", function (value, element, param) {

+        var result = _.any(['#txtMacAddress', '#txtDestIpAddress', '#txtSourceIpAddress', '#txtSourceIpv6Address', '#txtDestIpv6Address'],

+                function (item) {

+            var tmp = $(item).val().replace(/\s+/g, '');

+            return $(item + ':visible').length > 0 && tmp != '';

+        });

+

+        var portResult = _.any(['#txtDestPortStart', '#txtDestPortEnd', '#txtSourcePortStart', '#txtSourcePortEnd'],

+                function (item) {

+            return $(item).val() != '0';

+        });

+

+        return result || portResult;

+    });

+

+    return {

+        init: initialize

+    };

+});

+

+//家长控制

+ 

+define("firewall_parental_control","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    var maxItem = 10;

+    var pcVm = null;

+    var PAGES = {

+        MAIN: 0,

+        MANAGE: 1,

+        RULE: 2

+    };

+	

+	

+    function ParentalControlVM() {

+        var target = this;

+        var hostNameList = service.getHostNameList({}).devices;

+        target.currentPage = ko.observable(PAGES.MAIN);

+        target.pages = PAGES;

+

+

+        target.childGroupList = ko.observable([]);

+        target.childGroupMac = ko.computed(function () {

+            return _.map(target.childGroupList(), function (data) {

+                return data.mac;

+            });

+        });

+		

+        target.currentUserInChildGroup = ko.observable(true);

+        //获取儿童组设备列表

+         

+        target.fetchChildGroupList = fetchChildGroupListFunc;

+		

+        target.fetchChildGroupList();

+

+        target.manageHandler = manageHandlerFunc;

+		function manageHandlerFunc() {

+            target.currentPage(PAGES.MANAGE);

+            target.fetchAttachedDevices();

+        }

+        target.attachedDevices = ko.observable([]);

+        //获取已连接设备列表

+         

+        target.fetchAttachedDevices = fetchAttachedDevicesFunc;

+		

+

+		//儿童组设备 标签按钮事件

+         

+        target.backToMainHandler = backToMainHandlerFunc;

+		

+		

+        ko.computed(function () {

+            target.attachedDevices();

+            target.childGroupList();

+            $("#pc_children_group_form").translate();

+        }).extend({

+            notify: 'always',

+            throttle: 300

+        });

+        

+        //添加至儿童组

+         

+        function addChildGroupFun(flag, eleData) {

+            showLoading();

+            service.addChildGroup(eleData, function (data) {

+                target.fetchChildGroupList(function () {

+                    target.fetchAttachedDevices(function () {

+                        hideLoading();

+                        if (flag) {

+                            service.logout({}, function () {

+                                window.location = 'index.html';

+                            });

+                        }

+                    });

+                });

+            }, function (data) {

+                errorOverlay();

+            });

+        }

+		

+        //移除按钮事件

+         

+        target.removeChildGroupHandler = removeChildGroupHandlerFunc;

+		

+		

+        //添加按钮事件

+         

+        target.addChildGroupHandler = addChildGroupHandlerFunc;

+		

+

+        target.dealElement = dealElementFunc;

+		

+		

+		

+        //取消编辑主机名按钮事件

+         

+        target.cancelEditHostNameHandler = cancelEditHostNameHandlerFunc;

+		

+        //主机名编辑保存按钮事件

+         

+        target.saveHostNameHandler = saveHostNameHandlerFunc;

+		

+        //主机名编辑按钮事件

+         

+        target.editHostNameHandler = editHostNameHandlerFunc;

+		

+		

+        target.selectedIds = ko.observableArray([]);

+        target.siteList = ko.observable([]);

+        /////////////////////////////////////////////////////////////////

+        target.disableAdd = ko.computed(function () {

+            return target.siteList().length == maxItem;

+        });

+        

+        ko.computed(function () {

+            target.siteList();

+            target.selectedIds();

+            setTimeout(function () {

+                renderCheckbox();

+            }, 100);

+            $("#pc_site_white_list_form").translate();

+        });

+		

+        //网站白名单添加按钮事件

+         

+        target.openAddSitePopoverHandler = openAddSitePopoverHandlerFunc;

+		

+        //网站白名单列表选择框点击事件

+         

+        target.checkboxClickHandler = checkboxClickHandlerFunc;

+		

+		//获取网站白名单列表

+         

+        target.fetchSiteWhiteList = fetchSiteWhiteListFunc;

+		

+		//网站白名单删除函数

+         

+        function removeSiteWhiteItem(ids) {

+            showConfirm('confirm_data_delete', function () {

+                showLoading();

+                service.removeSiteWhite({

+                    ids: ids

+                }, function (data) {

+                    target.fetchSiteWhiteList(function () {

+                        successOverlay();

+                    });

+                }, function (data) {

+                    target.fetchSiteWhiteList(function () {

+                        errorOverlay();

+                    });

+                });

+            });

+        }

+		//网站白名单删除所有按钮事件

+         

+        target.removeAllWhiteSite = removeAllWhiteSiteFunc;

+		

+        //网站白名单删除按钮事件

+         

+        target.removeSelectedWhiteSite = removeSelectedWhiteSiteFunc;

+		

+        //网站白名单移除按钮事件

+         

+        target.removeWhiteSite = removeWhiteSiteFunc;

+		

+        

+        

+        //网站白名单添加框保存按钮事件

+         

+        target.saveSiteWhite = saveSiteWhiteFunc;

+		

+        //////////////////////////////////////////////////////////////////

+        target.notSave = ko.observable(false);

+        //获取时间限制信息

+         

+        target.fetchTimeLimited = fetchTimeLimitedFunc;

+		

+        

+        //上网时间设置时间表格事件绑定

+         

+        target.bindEvent = bindEventFunc;

+		

+		//上网时间设置保存按钮事件

+         

+        target.saveTimeLimitedHandler = saveTimeLimitedHandlerFunc;

+		

+        //////////////////////////////////////////////////////////////////

+        var isBinded = false;

+        //上网规则标签点击事件

+         

+        target.openRulePage = openRulePageFunc;

+		function openRulePageFunc() {

+            if (target.currentPage() == PAGES.RULE) {

+                return;

+            }

+            target.currentPage(PAGES.RULE);

+            target.currentUserInChildGroup(service.checkCurrentUserInChildGroup().result);

+            initTableData();

+            if (!isBinded) {

+                if (!target.currentUserInChildGroup()) {

+                    target.bindEvent();

+                }

+                isBinded = true;

+            }

+            showLoading();

+            target.fetchTimeLimited();

+            target.fetchSiteWhiteList(function () {

+                hideLoading();

+            });

+        }

+		

+		//获取儿童组设备列表

+		function fetchChildGroupListFunc(cb) {

+            service.childGroupList({}, function (data) {

+                target.currentUserInChildGroup(service.checkCurrentUserInChildGroup(data.devices).result);

+                target.childGroupList([]);

+                _.map(data.devices, function (elem, idx) {

+                    elem.idx = idx;

+                    elem.hostname = pcUtil.getHostName(elem.hostname, elem.mac, hostNameList);

+                });

+                target.childGroupList(data.devices);

+                if (_.isFunction(cb)) {

+                    cb.apply(this);

+                }

+            });

+		}

+		

+		//获取已连接设备列表

+		function fetchAttachedDevicesFunc(cb) {

+            target.attachedDevices([]);

+            var counter = 0;

+            var currDevices = [];

+            //RJ45 已连接设备

+            service.getAttachedCableDevices({}, function (data) {

+                counter++;

+                var devs = _.map(data.attachedDevices, function (elem) {

+                    elem.idx = _.uniqueId('wireless_');

+                    elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList);

+                    elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress);

+                    return elem;

+                });

+                if (counter != 1) {

+                    target.attachedDevices(_.flatten([currDevices, devs]));

+                    if (_.isFunction(cb)) {

+                        cb.apply(this);

+                    }

+                } else {

+                    currDevices = devs;

+                }

+            });

+			

+            //wifi 已连接设备

+            service.getCurrentlyAttachedDevicesInfo({}, function (data) {

+                counter++;

+                var devs = _.map(data.attachedDevices, function (elem) {

+                    elem.idx = _.uniqueId('wireless_');

+                    elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList);

+                    elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress);

+                    return elem;

+                });

+                if (counter != 1) {

+                    target.attachedDevices(_.flatten([currDevices, devs]));

+                    if (_.isFunction(cb)) {

+                        cb.apply(this);

+                    }

+                } else {

+                    currDevices = devs;

+                }

+            });

+		}

+		//儿童组设备 标签按钮事件

+		function backToMainHandlerFunc() {

+			target.currentPage(PAGES.MAIN);

+		}

+		

+		//移除按钮事件

+		function removeChildGroupHandlerFunc(ele) {

+            showLoading();

+            service.removeChildGroup(ele, function (data) {

+                target.fetchChildGroupList(function () {

+                    target.fetchAttachedDevices(function () {

+                        hideLoading();

+                    });

+                });

+            }, function (data) {

+                errorOverlay();

+            });

+        }

+		

+		//添加按钮事件

+		function addChildGroupHandlerFunc(data) {

+            var uMacAddr = service.getCurretnMAC();

+            if (uMacAddr != data.macAddress) {

+                addChildGroupFun(false, data);

+            } else {

+                showConfirm("parental_add_self", function () {

+                    addChildGroupFun(true, data);

+                })

+            }

+        }

+		

+		//取消编辑主机名按钮事件

+		function cancelEditHostNameHandlerFunc(eleData) {

+            target.dealElement(false, eleData.idx);

+        }

+		

+		//主机名编辑保存按钮事件

+		function saveHostNameHandlerFunc(ele) {

+            var $hostInput = $("#hostname_input_" + ele.idx);

+            var hostname = $.trim($hostInput.val());

+			if (hostname.indexOf(" ") == 0 || hostname.lastIndexOf(" ") == (hostname.length - 1) || /[\*\+\$\[&:,;<>'"\\`\]¥]{1,32}/.test(hostname)) {

+                showAlert('modify_hostname_invalid');

+                return false;

+            }else if (hostname == '') {

+                $(".promptErrorLabel", "#confirm-message-container").text($.i18n.prop("required"));

+                var $closestTD = $hostInput.closest('td').addClass('has-error');

+                addTimeout(function () {

+                    $closestTD.removeClass('has-error');

+                }, 5000);

+                showAlert('required');

+                return false;

+            }  

+            showLoading();

+            ele.hostname = hostname;

+            service.editHostName(ele, function () {

+                service.getHostNameList({}, function (hostNameData) {

+                    hostNameList = hostNameData.devices;

+                    target.fetchChildGroupList(function () {

+                        hideLoading();

+                    });

+                    target.fetchAttachedDevices();

+                });

+            }, function () {

+                errorOverlay();

+            });

+        }

+		

+		//主机名编辑按钮事件

+		function editHostNameHandlerFunc(ele) {

+            $("#hostname_input_" + ele.idx).val(ele.hostname);

+            target.dealElement(true, ele.idx);

+            return false;

+        }

+		//网站白名单添加按钮事件

+		function openAddSitePopoverHandlerFunc() {

+            var addNewSiteTmpl = $("#addNewSiteTmpl").html();

+            popover.open({

+                target: $("#openAddSiteBtn"),

+                html: addNewSiteTmpl,

+                width: "300px",

+                validation: addValidation

+            });

+        }

+		

+		//网站白名单列表选择框点击事件

+		function checkboxClickHandlerFunc(eleData, evt) {

+            addTimeout(function () {

+                target.selectedIds(getSelectedValues());

+            }, 100);

+        }

+		//获取网站白名单列表

+		function fetchSiteWhiteListFunc(cb) {

+            service.getSiteWhiteList({}, function (eledata) {

+                target.selectedIds([]);

+                target.siteList(eledata.siteList);

+                _.isFunction(cb) && cb.apply(this);

+            }, function () {

+                target.siteList([]);

+                _.isFunction(cb) && cb.apply(this);

+            });

+        }

+		

+		//网站白名单删除所有按钮事件

+		function removeAllWhiteSiteFunc() {

+            removeSiteWhiteItem(getAllCheckboxValues());

+        }

+		//网站白名单删除按钮事件

+		function removeSelectedWhiteSiteFunc() {

+            removeSiteWhiteItem(getSelectedValues());

+        }

+		//网站白名单移除按钮事件

+		function removeWhiteSiteFunc(ele, evt) {

+            removeSiteWhiteItem([ele.id]);

+        }

+		

+		//网站白名单添加框保存按钮事件

+		function saveSiteWhiteFunc(name, site) {

+            popover.hide();

+            var matched = _.find(target.siteList(), function (one) {

+                return one.site == site;

+            });

+            if (matched) {

+                showAlert("pc_link_exist", function () {

+                    setTimeout(function () {

+                        popover.show();

+                    }, 200);

+                });

+                return false;

+            }

+

+            showLoading();

+            service.saveSiteWhite({

+                name: name,

+                site: site

+            }, function () {

+                target.fetchSiteWhiteList(function () {

+                    popover.close();

+                    successOverlay();

+                });

+            }, function () {

+                target.fetchSiteWhiteList(function () {

+                    errorOverlay();

+                    popover.show();

+                });

+            });

+        }

+		

+		//上网时间设置时间表格事件绑定

+		function bindEventFunc() {

+            $("td:not('.col-head')", "#pc_time_limited_tbody").addClass('cursorhand').die().click(function () {

+                target.notSave(true);

+                $(this).toggleClass('active');

+            }).hover(function () {

+                var $this = $(this);

+                var w = $this.data('week');

+                var h = $this.data('hour');

+                $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").addClass('time_td_hover');

+                $("#col_" + h).addClass('time_td_hover');

+                if ($this.not('.active')) {

+                    $this.addClass('time_td_hover');

+                }

+            }, function () {

+                var $this = $(this);

+                var w = $this.data('week');

+                var h = $this.data('hour');

+                $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").removeClass('time_td_hover');

+                $("#col_" + h).removeClass('time_td_hover');

+                $this.removeClass('time_td_hover');

+            });

+        }

+		

+		//上网时间设置保存按钮事件

+		function saveTimeLimitedHandlerFunc() {

+            showLoading();

+            var tds = getSelectedTds();

+            var timeStr = getSavedData(tds);

+            service.saveTimeLimited({

+                time: timeStr

+            }, function () {

+                target.notSave(false);

+                successOverlay();

+            }, function () {

+                errorOverlay();

+            });

+        }

+		

+    }

+	

+		function dealElementFunc(flag, idx) {

+            if (flag == false) {

+                $("#edit_btn_" + idx + ",#hostname_txt_" + idx).show();

+                $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).hide();

+            } else {

+                $("#edit_btn_" + idx + ",#hostname_txt_" + idx).hide();

+                $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).show();

+            }

+        }

+

+		//获取时间限制信息

+		function fetchTimeLimitedFunc() {

+            service.getTimeLimited({}, function (ele) {

+                for (var ki in ele) {

+                    for (var idx = 0; idx < ele[ki].length; idx++) {

+                        var id = 'td_' + ki + '_' + ele[ki][idx];

+                        $("#" + id).addClass('active');

+                    }

+                }

+            }, function () {});

+        }

+

+    var pcUtil = {

+        getHostName: function (hostName, mac, hostNameList) {

+            var ele = _.find(hostNameList, function (ele) {

+                return ele.mac == mac;

+            });

+            return ele ? ele.hostname : hostName;

+        }

+    };

+	function getCheckboxValues(flag) {

+        var selectedValues = [];

+        $(":checkbox" + (flag ? ":checked" : ""), "#pb_white_list").each(function (i, n) {

+            selectedValues.push(n.value)

+        });

+        return selectedValues;

+    }

+    //获取列表中被选中项的value值

+     

+    function getSelectedValues() {

+        return getCheckboxValues(true);

+    }

+    function getAllCheckboxValues() {

+        return getCheckboxValues(false);

+    }

+    

+    //增加网站白名单表单提交函数绑定和校验规则设置

+     

+    function addValidation() {

+        $('#whiteSiteAddForm').validate({

+            submitHandler: function () {

+                var name = $("#siteName").val();

+                var site = $("#siteLink").val();

+                pcVm.saveSiteWhite(name, site);

+            },

+            rules: {

+                siteName: 'siteName_check',

+                siteLink: 'siteLink_check'

+            }

+        });

+    }

+	

+    function getSavedData(timeDatas) {

+        var ret = '';

+        for (var ki in timeDatas) {

+            var hours = _.sortBy(timeDatas[ki], function (n) {

+                return n;

+            });

+            if (timeDatas[ki].length) {

+                ret += ki + '+';

+                ret += hours.join(',');

+                ret += ';'

+            }

+        }

+        return ret.substring(0, ret.length - 1);

+    }

+    //获取时间表格选中的时间

+     

+    function getSelectedTds() {

+        var defaultValue = {

+            '0': [],

+            '1': [],

+            '2': [],

+            '3': [],

+            '4': [],

+            '5': [],

+            '6': []

+        };

+        $("td.active", "#pc_time_limited_tbody").each(function (i, n) {

+            var $this = $(n);

+            var week = $this.data('week');

+            var hour = $this.data('hour');

+            defaultValue[week].push(hour);

+        });

+        return defaultValue;

+    }

+

+	function convertHour(hour) {

+        if (hour <= 16) {

+            return hour + 7;

+        } else {

+            return hour - 17;

+        }

+    }

+    //初始化时间表格

+     

+    function initTableData() {

+        $("tr", "#pc_time_limited_tbody").each(function (idx, n) {

+            var $tr = $(n);

+            $("td:not(:first)", $tr).each(function (j, m) {

+                var $td = $(m);

+                var hour = convertHour(j);

+                $td.attr({

+                    id: 'td_' + idx + '_' + hour

+                }).data({

+                    week: idx,

+                    hour: hour

+                });

+            });

+        });

+        $("td.active", "#pc_time_limited_tbody").removeClass("active");

+        $("thead td:not(:first)", "#pc_time_limited_form").each(function (idx, n) {

+            var hour = convertHour(idx);

+            $(n).attr({

+                id: 'col_' + hour

+            });

+        });

+        pcVm.notSave(false);

+    }

+

+    

+    //页面初始化

+     

+    function initialize() {

+       

+        pcVm = new ParentalControlVM();

+		bindContainer(pcVm);

+    }

+	function bindContainer(pcVm)

+	{

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(pcVm, container[0]);

+	}

+

+    return {

+        init: initialize

+    };

+});

+

+define("firewall_dmz_set","underscore jquery knockout set service".split(" "),

+    function ( _, $, ko, config, service) {

+

+    //system dmz setting VM

+     

+    function DmzSettingVM() {

+        var target = this;

+        var dmzInfo = getDmzSetting();

+        target.dmzSetting = ko.observable(dmzInfo.dmzSetting);

+        target.ipAddress = ko.observable(dmzInfo.ipAddress);

+        target.isDataCard = config.PRODUCT_TYPE == 'DATACARD';

+

+        target.clear = clearFunc;

+        //应用按钮事件

+         

+        target.save = saveFunc;

+		

+		function saveFunc() {

+			showLoading();

+			var params = {};

+			params.dmzSetting = target.dmzSetting();

+			params.ipAddress = target.ipAddress();

+			service.setDmzSetting(params, function (result) {

+				if (result.result != "success") {

+					errorOverlay();

+				} else {

+					target.clear();

+					successOverlay();

+				}

+			});

+		}

+		

+    }

+	

+	function clearFunc() {

+		initialize();

+    }

+	

+	

+    //获取dmz 信息

+     

+    function getDmzSetting() {

+        return service.getDmzSetting();

+    }

+

+    //初始化DmzSettingVM model

+     

+    function initialize() {

+        

+        var dmzVm = new DmzSettingVM();

+        bindContainer(dmzVm);

+    }

+	function bindContainer(dmzVm){

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+		ko.applyBindings(dmzVm, container[0]);

+        $('#dmzSettingForm').validate({

+            submitHandler: function () {

+                dmzVm.save();

+            },

+            rules: {

+                txtIpAddress: 'dmz_ip_check'

+            }

+        });

+	}

+

+    return {

+        init: initialize

+    };

+});

+

+define("firewall","underscore jquery knockout set service".split(" "),

+

+function(_, $, ko, config, service) {

+

+    function FirewallVM() {

+        var target = this;

+		target.hasDdns = config.DDNS_SUPPORT;

+		target.hasUpdateCheck = config.HAS_UPDATE_CHECK;

+		target.hasUrlFilter = config.HAS_URL;

+		target.hasUssd = config.HAS_USSD;

+		target.hasUpnp = config.HAS_UPNP;

+    }

+

+	function initialize() {        

+        var fwVm = new FirewallVM();

+		bindingContainer(fwVm);

+    }

+	function bindingContainer(fwVm)

+	{

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(fwVm, container[0]);

+	}

+	return {

+		init : initialize

+	};

+});

+

+define("ddns","underscore jquery knockout set service".split(" "), function (_, $, ko, config, service) {

+    var ddnsSetModes = _.map(config.DDNSSetMode, newOption);

+    var ddnsProviderList = _.map(config.DDNSDDP, newOption);

+    var ddns_mode_select = _.map(config.ddns_Modeselect, newOption);

+    function newOption(optItem) {

+        return new Option(optItem.name, optItem.value);

+    }

+    function DdnsViewModel() {

+        var target = this;

+        target.hasUssd = config.HAS_USSD;

+        target.hasUpdateCheck = config.HAS_UPDATE_CHECK;

+        var data = service.getDdnsParams();

+        target.ddnsSetModes = ko.observableArray(ddnsSetModes);

+        target.ddnsProviderList = ko.observableArray(ddnsProviderList);

+        target.ddns_mode_select = ko.observableArray(ddns_mode_select);

+        target.currentMode = ko.observable(data.DDNS_Enable);

+        target.currentModeselect = ko.observable(data.DDNS_Mode);

+        target.currentProviderList = ko.observable("dyndns.org");

+        $.each(config.DDNSDDP, function (i, n) {

+            if (data.DDNSProvider == n.value) {

+                target.currentProviderList(data.DDNSProvider);

+            }

+        });

+        target.DDNSaccount = ko.observable(data.DDNSAccount);

+        target.DDNSpasswd = ko.observable(data.DDNSPassword);

+        target.DDNSname = ko.observable(data.DDNS);

+        target.DDNS_HashValue = ko.observable(data.DDNS_Hash_Value);

+        target.isddnsStatusTrans = ko.observable();

+        target.isEnableSet = ko.observable();

+        target.isHashValue = ko.observable();

+        target.isddnsaccount = ko.observable();

+        target.isddnspasswd = ko.observable();

+        target.isDDNSStatus = ko.observable();

+        target.isddnsdomainName = ko.observable();

+        target.isNone = ko.observable();

+        target.onStates = ko.observable();

+        target.showPassword_ddns = ko.observable(false);

+        target.showPasswordHandler_ddns = showPasswordHandler_ddns;

+        changeddnsProviderList();

+        target.changeDdnsProvider = changeDdnsProviderFunc;

+        changeSetDdnsMode();

+        target.changeSetDdnsMode = changeSetDdnsModeFunc;

+        updateScanDdnsStatus();

+        target.apply = applyFunc;

+        function updateScanDdnsStatus() {

+            var trans = "";

+            $.getJSON("/reqproc/proc_get", {

+                cmd: "getddns_status",

+                "_": new Date().getTime()

+            }, function (data) {

+                if (data.getddns_status == "0") {

+                    trans = "register successful";

+                    target.onStates(true);

+                } else if (data.getddns_status == "1") {

+                    trans = "login error";

+                    target.onStates(true);

+                } else if (data.getddns_status == "2") {

+                    trans = "network error";

+                    target.onStates(true);

+                } else if (data.getddns_status == "3") {

+                    trans = "registering";

+                    target.onStates(true);

+                } else if (data.getddns_status == "4") {

+                    trans = "not registered";

+                    target.onStates(true);

+                } else if (data.getddns_status == "5") {

+                    trans = "error registering";

+                    target.onStates(true);

+                } else if (data.getddns_status == "-1") {

+                    trans = "";

+                    target.onStates(true);

+                }

+                target.isddnsStatusTrans($.i18n.prop(trans));

+                addTimeout(updateScanDdnsStatus, 2000);

+            });

+        }

+        function changeSetDdnsMode() {

+            if (target.currentMode() != "1") {

+                target.isEnableSet(false);

+            } else {

+                target.isEnableSet(true);

+            }

+            return true;

+        }

+        function changeSetDdnsModeFunc() {

+            changeSetDdnsMode();

+        }

+        function showPasswordHandler_ddns() {

+            $("#ddns_secretcode_input").parent().find(".error").hide();

+            var checkbox = $("#showPassword_ddns:checked");

+            if (checkbox && checkbox.length == 0) {

+                target.showPassword_ddns(true);

+            } else {

+                target.showPassword_ddns(false);

+            }

+        }

+        function changeDdnsProviderFunc() {

+            if (data.DDNSProvider != target.currentProviderList()) {

+                target.DDNSaccount("");

+                target.DDNSpasswd("");

+                target.DDNSname("");

+            } else {

+                target.DDNSaccount(data.DDNSAccount);

+                target.DDNSpasswd(data.DDNSPassword);

+                target.DDNSname(data.DDNS);

+            }

+            changeddnsProviderList();

+        }

+        function changeddnsProviderList() {

+            if (target.currentProviderList() != "none") {

+                target.isddnsaccount(true);

+                target.isddnspasswd(true);

+                target.isddnsdomainName(true);

+                target.isHashValue(true);

+                target.isDDNSStatus(true);

+            } else {

+                target.isddnsaccount(false);

+                target.isddnspasswd(false);

+                target.isddnsdomainName(false);

+                target.isHashValue(false);

+                target.isDDNSStatus(false);

+            }

+            if (target.currentProviderList() != "freedns.afraid.org") {

+                target.isHashValue(false);

+            } else {

+                target.isHashValue(true);

+            }

+            return true;

+        }

+        function applyFunc() {

+            showLoading();

+            var params = {};

+            params.goformId = "DDNS";

+            params.DDNS_Enable = target.currentMode();

+            if (target.currentMode() == "1") {

+                params.DDNS_Mode = target.currentModeselect();

+                params.DDNSProvider = target.currentProviderList();

+                if (target.currentProviderList() != "none") {

+                    params.DDNS = target.DDNSname();

+                    params.DDNSPassword = target.DDNSpasswd();

+                    params.DDNSAccount = target.DDNSaccount();

+                }

+                if (target.currentProviderList() == "freedns.afraid.org") {

+                    params.DDNS_Hash_Value = target.DDNS_HashValue();

+                }

+            }

+            service.setDDNSForward(params, function (result) {

+                if (result.result == "success") {

+                    successOverlay();

+                    data = service.getDdnsParams();

+                } else {

+                    errorOverlay();

+                }

+            });

+        }

+    }

+    function initialize() {

+        var container = $('#container');

+        ko.cleanNode(container[0]);

+        var vm = new DdnsViewModel();

+        ko.applyBindings(vm, container[0]);

+        $("#ddnsForm").validate({

+            submitHandler: function () {

+                vm.apply();

+            },

+            rules: {

+                ddns_secretcode_input: "secretcode_check",

+                DDNS_Hash_Value: "ddns_hashvalue_check",

+                ddns_secretcode_inputshow: "secretcode_check"

+            },

+            errorPlacement: function (error, element) {

+                var id = element.attr("id");

+                if (id == "ddns_secretcode_input" || id == "ddns_secretcode_inputshow") {

+                    error.insertAfter("#lblShowPassword");

+                } else {

+                    error.insertAfter(element);

+                }

+            }

+        });

+    }

+    return {

+        init: initialize

+    };

+});

+

+

+//选网模块

+ 

+define("network_net_select","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    var selectModes = _.map(config.AUTO_MODES, function (item) {

+        return new Option(item.name, item.value);

+    });

+

+    //选网功能view model

+     

+    function NetSelectVM() {

+        var target = this;

+

+        target.networkList = ko.observableArray([]);

+        target.selectNetwork = ko.observable('');

+        target.enableFlag = ko.observable(true);

+        target.types = ko.observableArray(selectModes);

+        target.selectedType = ko.observable();

+        target.selectMode = ko.observable();

+

+		target.networkText = networkTextFunc;

+		

+		target.networkStatusId = networkStatusIdFunc;

+		

+        target.networkStatus = networkStatusFunc;

+

+        target.subnetworkType = subnetworkTypeFunc;

+

+		target.networkType = networkTypeFunc;

+

+        target.operatorName = operatorNameFunc;

+

+        target.networkValue = networkValueFunc;

+

+        target.networkTypeId = networkTypeIdFunc;

+

+        target.subnetTypeId = subnetTypeIdFunc;

+       //手动搜网.

+         

+        target.search = searchFunc;

+

+        //自动选网时设置网络模式.

+         

+        target.save = saveFunc;

+

+        target.checkEnable = checkEnableFunc;

+

+        //注册选择的网络.

+         

+        target.register = registerFunc;

+

+        //init data

+        target.checkEnable();

+        var info = getNetSelectInfo();

+        if ("manual_select" == info.net_select_mode || "manual_select" == info.m_netselect_save) {

+            target.selectMode("manual_select");

+        } else {

+            target.selectMode("auto_select");

+        }

+

+        target.selectedType(info.net_select);

+		

+		//注册选择的网络.

+		function registerFunc() {

+            showLoading('registering_net');

+            var networkToSet = target.selectNetwork().split(',');

+            service.setNetwork(networkToSet[0], parseInt(networkToSet[1]), parseInt(networkToSet[2]), function (result) {

+                if (result) {

+                    target.networkList([]);

+                    var autoType = getNetSelectInfo();

+                    target.selectedType(autoType.net_select);

+                    successOverlay();

+                } else {

+                    errorOverlay();

+                }

+            });

+        }

+		

+		function checkEnableFunc() {

+            var status = service.getStatusInfo();

+            if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {

+                target.enableFlag(false);

+            } else {

+                target.enableFlag(true);

+            }

+        }

+		

+		//自动选网时设置网络模式.

+		function saveFunc() {

+            showLoading();

+

+            //AutoSelect call SetBearerPreference

+            var params = {};

+            params.strBearerPreference = target.selectedType();

+            service.setBearerPreference(params, function (result) {

+                if (result.result == "success") {

+                    target.networkList([]);

+                    successOverlay();

+                } else {

+                    errorOverlay();

+                }

+            });

+        }

+		

+		//手动搜网.

+		function searchFunc() {

+            showLoading('searching_net');

+            service.scanForNetwork(function (result, networkList) {

+                hideLoading();

+                if (result) {

+                    target.networkList(networkList);

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

+                        var n = networkList[i];

+                        if (n.nState == '2') {

+                            target.selectNetwork(n.strNumeric + ',' + n.nRat + ',' + n.SubAct);

+                            return;

+                        }

+                    }

+                } else {

+                    target.networkList([]);

+                }

+            });

+        }

+		

+		function subnetTypeIdFunc(data) {

+            return getSubNetworkTypeTog(data.nRat, data.SubAct);

+        }

+		

+		function networkTypeIdFunc(data) {

+            return getNetworkType(data.nRat);

+        }

+		

+		function networkValueFunc(data) {

+            var result = [];

+            result.push(data.strNumeric); //strNumeric

+            result.push(data.nRat); //nRat

+            result.push(data.SubAct);

+            return result.join(',');

+        }

+		

+		function operatorNameFunc(data) {

+            return data.strShortName;

+        }

+		

+		function networkTypeFunc(data) {

+            var result = getNetworkType(data.nRat);

+            if (result == "auto")

+                result = $.i18n.prop("auto");

+            return result;

+        }

+		

+		function subnetworkTypeFunc(data) {

+            var result = getSubNetworkTypeTog(data.nRat, data.SubAct);

+            return result;

+        }

+		

+		function networkStatusFunc(data) {

+            return $.i18n.prop(getNetworkStatusTog(data.nState));

+        }

+		

+		function networkStatusIdFunc(data) {

+            return getNetworkStatusTog(data.nState);

+        }

+		

+		function networkTextFunc(data) {

+            return data.strNumeric;

+        }

+

+    }

+

+    //获取网络选择信息.

+     

+    function getNetSelectInfo() {

+        return service.getNetSelectInfo();

+    }

+

+    //搜网结果中的状态转换为对应的语言项.

+     

+    function getNetworkStatusTog(status) {

+        if ("3" == status) {

+            return "forbidden";

+        } else if ("2" == status) {

+            return "current";

+        } else if ("1" == status) {

+            return "available";

+        }else if ("0" == status) {

+            return "unknown";

+        }

+    }

+	//子网络类型转换.

+     

+    function getSubNetworkTypeTog(type, subtype) {

+        var type_3g = [2, 4, 5, 6, 8];

+        if ("1" == subtype) {

+            if ("7" == type) {

+                subtype = "FDD-LTE";

+            } else if ($.inArray(type, type_3g) != -1) {

+                subtype = "WCDMA";

+            }else {

+                subtype = "GSM";

+            }

+        } else if ("0" == subtype) {

+            if ("7" == type) {

+                subtype = "TD-LTE";

+            } else if ($.inArray(type, type_3g) != -1) {

+                subtype = "TD-SCDMA";

+            } else {

+                subtype = "GSM";

+            }

+        } else {

+            subtype = "";

+        }

+        return subtype;

+    }

+    //网络类型转换.

+     

+    function getNetworkType(type) {

+        if ("7" == type) {

+            return "4G";

+        } else if ("2" == type) {

+            return "3G";

+        } else if ("0" == type) {

+            return "2G";

+        } else {

+            return "auto";

+        }

+    }

+

+    function bindContainer(vm){

+	

+        var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(vm, container[0]);

+	}

+

+    //初始化选网功能view model.

+     

+    function initialize() {

+        var vm = new NetSelectVM();

+		bindContainer(vm);

+        addInterval(vm.checkEnable, 1000);

+    }

+

+    return {

+        init: initialize

+    };

+});

+define("locknet","jquery knockout service jquery set main".split(" "),

+    function ($, ko, service, config, home) {

+

+    function initialize() {

+        var container = $('#container')[0];

+        ko.cleanNode(container);

+        var vm = new locknetViewMode();

+        ko.applyBindings(vm, container);

+

+        $("#frmNetworkLock").validate({

+            submitHandler: function () {

+                vm.unlock();

+            },

+            rules: {

+                txtLockNumber: "unlock_code_check"

+            }

+        });

+    }

+

+    function locknetViewMode() {

+        var target = this;

+        var curCableMode = false;

+        target.isCPE = config.PRODUCT_TYPE == 'CPE';

+        target.hasRj45 = config.RJ45_SUPPORT;

+        target.hasSms = config.HAS_SMS;

+        target.hasPhonebook = config.HAS_PHONEBOOK;

+        target.isSupportSD = config.SD_CARD_SUPPORT;

+        if (config.WIFI_SUPPORT_QR_SWITCH == false) {

+            target.showQRCode = config.WIFI_SUPPORT_QR_CODE;

+        } else {

+            var wifiInfo = service.getWifiBasic();

+            target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;

+        }

+        if(config.WIFI_SUPPORT_QR_CODE){

+            target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now();

+        } else {

+            target.qrcodeSrc = './pic/res_blacktrans.png';

+        }

+        target.hasParentalControl = ko.observable(config.HAS_PARENTAL_CONTROL && curCableMode);

+        target.deviceInfo = ko.observable([]);

+        target.isHomePage = ko.observable(false);

+        if (window.location.hash == "#main") {

+            target.isHomePage(true);

+        }

+

+        target.supportUnlock = config.NETWORK_UNLOCK_SUPPORT;

+        target.unlockCode = ko.observable();

+

+        var info = service.getNetworkUnlockTimes();

+        target.times = ko.observable(info.unlock_nck_time);

+

+        //显示工作模式设置窗口

+        target.showOpModeWindow = showOpModeWindowFunc;

+		

+        target.isLoggedIn = ko.observable(false);

+        target.enableFlag = ko.observable(false);

+        //解锁

+        target.unlock = unlockFunc;

+

+        //更新工作模式状态

+        target.refreshOpmodeInfo = refreshOpmodeInfoFunc;

+		

+        //定时检查工作模式状态

+        if (target.hasRj45) {

+            target.refreshOpmodeInfo();

+            addInterval(function () {

+                target.refreshOpmodeInfo();

+            }, 1000);

+        }

+		

+		//更新工作模式状态

+		function refreshOpmodeInfoFunc() {

+            var obj = service.getStatusInfo();

+            target.isLoggedIn(obj.isLoggedIn);

+

+            if (!curCableMode && checkCableMode(obj.blc_wan_mode)) { //如果有线,则重新加载

+                window.location.reload();

+                return;

+            }

+

+            curCableMode = checkCableMode(obj.blc_wan_mode);

+            target.hasParentalControl(config.HAS_PARENTAL_CONTROL && curCableMode);

+            if (curCableMode && obj.ethWanMode.toUpperCase() == "DHCP") {

+                target.enableFlag(true);

+            } else if ((!curCableMode && obj.connectStatus != "ppp_disconnected") || (curCableMode && obj.rj45ConnectStatus != "idle" && obj.rj45ConnectStatus != "dead")) {

+                target.enableFlag(false);

+            } else {

+                target.enableFlag(true);

+            }

+            var getMode = (obj.blc_wan_mode == "AUTO_PPP" || obj.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : obj.blc_wan_mode;

+            var currMode = "";

+            switch (getMode) {

+			case "PPP":

+                currMode = "opmode_gateway";

+                break;

+			case "PPPOE":

+                currMode = "opmode_cable";

+                break;

+            case "AUTO":

+                currMode = "opmode_auto";

+                break;

+            default:

+                break;

+            }

+            $("#opmode").attr("data-trans", currMode).text($.i18n.prop(currMode));

+        }

+		

+		//解锁

+		function unlockFunc() {

+            showLoading();

+            service.unlockNetwork({

+                unlock_network_code: target.unlockCode()

+            }, function (data) {

+                target.unlockCode("");

+                if (data && data.result == "success") {

+                    successOverlay();

+                    if (window.location.hash == "#main") {

+                        setTimeout(function () {

+                            window.location.reload();

+                        }, 500);

+                    } else {

+                        window.location.hash = "#main";

+                    }

+                } else {

+                    var info = service.getNetworkUnlockTimes();

+                    target.times(info.unlock_nck_time);

+                    errorOverlay();

+                }

+            })

+        }

+		

+		//显示工作模式设置窗口

+		function showOpModeWindowFunc() {

+            showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {});

+        }

+    }

+

+    return {

+        init: initialize

+    };

+});

+

+// RJ45联网设置模块

+ 

+define("network_dial_set_cpe","underscore jquery knockout set service".split(" "),

+function(_, $, ko, config, service) {

+	var dialActions = _.map(config.dialActions, function(elem){

+		return new Option(elem.name, elem.value);

+	});

+	

+	var dialModes = _.map(config.pppoeModes, function(elem) {

+		return new Option(elem.name, elem.value);

+	});

+		

+    var checkStatusTimer = 0;

+    var checkConCounter = 0;

+    var timeoutTipShowed = false;

+

+    // 联网设置view model.

+     

+	function PPPoEViewModel() {

+		var pppObj = service.getPppoeParams();

+        var ethParams = pppObj;

+		var target = this;

+		

+		target.staticNoticeShow = ko.observable();

+		target.dhcpNoticeShow = ko.observable();

+		target.pppoeNoticeShow = ko.observable();

+		target.autoNoticeShow = ko.observable();

+		target.staticNotice = ko.observable();

+		target.dhcpNotice = ko.observable();

+		target.pppoeNotice = ko.observable();

+		target.autoNotice = ko.observable();

+		target.dhcpNoticeText = ko.observable();

+		target.staticNoticeText = ko.observable();

+		target.pppoeNoticeText = ko.observable();

+        target.autoNoticeText = ko.observable();		

+		target.currentMode = ko.observable(pppObj.ethwan_mode);//auto dhcp pppoe static

+		target.showPassword = ko.observable(false);

+		target.modes = ko.observableArray(dialModes);

+		target.isPppoeMode = ko.observable(false);

+		target.isStaticMode = ko.observable(false);

+		target.isAutoMode = ko.observable(false);

+		target.action = ko.observable();

+		target.btnTrans = ko.observable();

+		target.enableFlag = ko.observable();

+		target.isShowDisbtn = ko.observable();

+		target.isShowCancelbtn = ko.observable();

+		

+		if(pppObj.rj45_state == "dead"){

+			checkRj45DeadTip();

+		} else if(pppObj.rj45_state == "connect"){

+			timeoutTipShowed = true;

+			setRj45CheckTimer("connect");

+		} else if(pppObj.rj45_state == "working"){

+			setRj45WorkingTip();

+		}

+		

+		target.user = ko.observable(pppObj.pppoe_username);

+		target.password = ko.observable(pppObj.pppoe_cc);

+		target.autoUser = ko.observable(pppObj.pppoe_username);

+		target.autoPassword = ko.observable(pppObj.pppoe_cc);

+		target.pppMode = ko.observable(pppObj.ethwan_dialmode);

+		initContronler();

+		

+

+		//下拉框选择改变下面DIV模块

+		target.changeModeDiv = changeModeDivFunc;

+				

+		target.radioHandler = radioHandlerFunc;

+				

+		target.primaryDNS = ko.observable(pppObj.static_wan_primary_dns);

+		target.secondaryDNS = ko.observable(pppObj.static_wan_secondary_dns);

+		target.ipAddress = ko.observable(pppObj.static_wan_ipaddr);

+		target.subnetMask = ko.observable(pppObj.static_wan_netmask);

+		target.defaultGateway = ko.observable(pppObj.static_wan_gateway);

+		

+		addInterval(function(){

+			ethParams = service.getPppoeParams();

+			pppObj.rj45_state = ethParams.rj45_state;

+			initContronler();

+		}, 1000);

+		

+        // 取消连接按钮事件.

+         					

+		target.cancelConnect = cancelConnectFunc;

+		

+        // 应用按钮事件.

+         		

+		target.save = saveFunc;

+		

+		 //密码显示事件

+        target.showPasswordHandler = function () {

+            var checkbox = $("#showPassword:checked");

+            if (checkbox && checkbox.length == 0) {

+                target.showPassword(true);

+            } else {

+                target.showPassword(false);

+            }

+        };

+		

+        // 更新当前界面状态、按钮、提示语等.

+         			

+		function initContronler() {	

+            checkRj45DeadTip();		

+			if(target.currentMode() == "PPPOE"){

+				target.isPppoeMode(true);

+				target.isStaticMode(false);

+				target.isAutoMode(false);

+				target.staticNoticeShow(false);

+				target.dhcpNoticeShow(false);	

+				target.autoNoticeShow(false);	

+			} else if(target.currentMode() == "AUTO"){

+				target.isStaticMode(false);

+				target.isPppoeMode(false);

+				target.isAutoMode(true);

+				target.dhcpNoticeShow(false);

+				target.pppoeNoticeShow(false);

+				target.staticNoticeShow(false);

+			} else if(target.currentMode() == "STATIC"){

+				target.isStaticMode(true);

+				target.isPppoeMode(false);

+				target.isAutoMode(false);

+				target.dhcpNoticeShow(false);

+				target.pppoeNoticeShow(false);

+				target.autoNoticeShow(false);

+			} else{

+				target.isStaticMode(false);

+				target.isPppoeMode(false);

+				target.isAutoMode(false);

+				target.staticNoticeShow(false);

+				target.pppoeNoticeShow(false);

+                target.autoNoticeShow(false);					

+			}

+			if(ethParams.ethwan_dialmode != "auto_dial" && (pppObj.rj45_state == "working" || pppObj.rj45_state =="connect") ){

+				target.enableFlag(false);

+			} else {

+				target.enableFlag(true);

+			}

+			if(pppObj.rj45_state == "connect"){

+				if(target.pppMode() == "auto_dial"){

+					target.action("connect");

+				}else{

+					target.action("disconnect");

+				}					

+			} else if(pppObj.rj45_state == "working"){

+				target.action("disconnect");

+			}else{

+				target.action("connect");

+			}

+			//应用/连接按钮

+			if(target.pppMode() != "auto_dial" && target.currentMode() == ethParams.ethwan_mode){

+				target.btnTrans("connect");

+			} else{

+				target.btnTrans("apply");

+			}

+			if(pppObj.rj45_state != "idle"){

+				$("#pppoeApply").attr("disabled", true);

+		    }else {

+				$("#pppoeApply").attr("disabled", false);

+            }

+			

+			//取消/断开按钮

+			target.isShowDisbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "working");

+			target.isShowCancelbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "connect");

+			

+			$("#pppoeApply").translate();

+		}

+        // 设置后通过定时检查rj45_state状态,判断连接或断开操作结果.

+         		

+	    function setRj45CheckTimer(action){

+            checkStatusTimer && window.clearInterval(checkStatusTimer);

+            if("connect" != action){				

+                checkStatusTimer = addInterval(function () {

+                    checkDisconnectStatus();

+                }, 2000);

+            }else{

+                if(target.currentMode() == "PPPOE"){

+                    target.pppoeNoticeShow(true);

+                    target.pppoeNotice("pppoe_processing");

+                    target.pppoeNoticeText($.i18n.prop("pppoe_processing"));

+                } else if(target.currentMode() == "STATIC"){

+                    target.staticNoticeShow(true);

+                    target.staticNotice("static_processing");

+                    target.staticNoticeText($.i18n.prop("static_processing"));

+                } else if(target.currentMode() == "DHCP"){

+                    target.dhcpNoticeShow(true);

+                    target.dhcpNotice("dyn_processing");

+                    target.dhcpNoticeText($.i18n.prop("dyn_processing"));

+                }else{

+                    target.autoNoticeShow(true);

+                    target.autoNotice("auto_processing");

+                    target.autoNoticeText($.i18n.prop("auto_processing"));

+                }

+                checkStatusTimer = addInterval(function () {

+                    checkConnectionStatus();

+                }, 2000);

+            }			

+        }

+        // 设置后通过定时检查rj45_state状态,判断连接操作结果.

+         			

+        function checkConnectionStatus(){

+            if(checkConCounter < 1){

+				checkConCounter++;

+				return;

+            }

+            if(pppObj.rj45_state == "connect"){

+                if(target.currentMode() != ethParams.ethwan_mode){

+                    if(target.currentMode() == "AUTO"){

+                        target.autoNoticeShow(true);

+                    }else if(target.currentMode() == "PPPOE"){

+                        target.pppoeNoticeShow(true);

+                    }else if(target.currentMode() == "STATIC"){

+                        target.staticNoticeShow(true);

+                    }else if(target.currentMode() == "DHCP"){

+                        target.dhcpNoticeShow(true);

+                    }

+                }

+                if(checkConCounter > 6){

+                    if(timeoutTipShowed == false){

+                        timeoutTipShowed = true;

+                        showAlert("ussd_operation_timeout");

+                    }

+                }

+                checkConCounter++;

+            } else if (pppObj.rj45_state == "working") {

+                hideLoading();

+                setRj45WorkingTip();

+                window.clearInterval(checkStatusTimer);						

+            } else if (pppObj.rj45_state == "dead") {

+				hideLoading();

+				checkRj45DeadTip();

+                window.clearInterval(checkStatusTimer);

+            } else if(pppObj.rj45_state == "idle"){

+                hideLoading();

+                if(target.currentMode() == "DHCP" && ethParams.ethwan_mode == "DHCP") {

+                    timeoutTipShowed == false && target.dhcpNoticeShow(true);

+                    target.dhcpNotice("dyn_fail");

+                    target.dhcpNoticeText($.i18n.prop("dyn_fail"));

+                }

+                if(target.currentMode() == "STATIC" && ethParams.ethwan_mode == "STATIC") {

+                    timeoutTipShowed == false && target.staticNoticeShow(true);

+                    target.staticNotice("static_fail");

+                    target.staticNoticeText($.i18n.prop("static_fail"));

+                }

+                if(target.currentMode() == "PPPOE" && ethParams.ethwan_mode == "PPPOE") {

+                    timeoutTipShowed == false && target.pppoeNoticeShow(true);

+                    target.pppoeNotice("pppoe_fail");

+                    target.pppoeNoticeText($.i18n.prop("pppoe_fail"));

+                }

+                if(target.currentMode() == "AUTO" && ethParams.ethwan_mode == "AUTO") {

+                    timeoutTipShowed == false && target.autoNoticeShow(true);

+                    target.autoNotice("auto_fail");

+                    target.autoNoticeText($.i18n.prop("auto_fail"));

+                }

+                window.clearInterval(checkStatusTimer);

+            }   else{

+                hideLoading();

+				window.clearInterval(checkStatusTimer);

+			}

+        }

+		// 设置连接成功时提示语状态.

+         		

+        function setRj45WorkingTip(){

+            if(target.currentMode() == ethParams.ethwan_mode){

+                if(target.currentMode() == "AUTO") {

+                    target.autoNoticeShow(true);

+                    target.autoNotice("auto_success");

+                    target.autoNoticeText($.i18n.prop("auto_success"));

+                }else if(target.currentMode() == "PPPOE") {

+                    target.pppoeNoticeShow(true);

+                    target.pppoeNotice("pppoe_success");

+                    target.pppoeNoticeText($.i18n.prop("pppoe_success"));

+                }else if(target.currentMode() == "STATIC") {

+                    target.staticNoticeShow(true);

+                    target.staticNotice("static_success");

+                    target.staticNoticeText($.i18n.prop("static_success"));

+                }else if(target.currentMode() == "DHCP" ) {

+                    target.dhcpNoticeShow(true);

+                    target.dhcpNotice("dyn_success");

+                    target.dhcpNoticeText($.i18n.prop("dyn_success"));

+                }

+            }

+        }

+		

+		// 设置网线断开提示语状态.

+         		

+        function checkRj45DeadTip(){

+            if(pppObj.rj45_state != "dead"){

+                if(target.currentMode() == "AUTO"  && target.autoNotice() == "pppoe_msg") {

+                    target.autoNoticeShow(false);

+                }else if(target.currentMode() == "PPPOE"  && target.pppoeNotice() == "pppoe_msg") {

+                    target.pppoeNoticeShow(false);

+                }else if(target.currentMode() == "STATIC"  && target.staticNotice() == "pppoe_msg") {

+                    target.staticNoticeShow(false);

+                }else if(target.currentMode() == "DHCP" && target.dhcpNotice() == "pppoe_msg") {

+                    target.dhcpNoticeShow(false);

+                }				

+                

+            } else{

+				target.dhcpNotice("pppoe_msg");

+                target.dhcpNoticeText($.i18n.prop("pppoe_msg"));

+                target.staticNotice("pppoe_msg");

+                target.staticNoticeText($.i18n.prop("pppoe_msg"));

+                target.pppoeNotice("pppoe_msg");

+                target.pppoeNoticeText($.i18n.prop("pppoe_msg"));

+                target.autoNotice("pppoe_msg");

+                target.autoNoticeText($.i18n.prop("pppoe_msg"));

+                if(target.currentMode() == "AUTO") {

+                    target.autoNoticeShow(true);

+                }else if(target.currentMode() == "PPPOE") {

+                    target.pppoeNoticeShow(true);

+                }else if(target.currentMode() == "STATIC") {

+                    target.staticNoticeShow(true);

+                }else if(target.currentMode() == "DHCP") {

+                    target.dhcpNoticeShow(true);

+                }

+            }            

+		}

+        // 设置后通过定时检查rj45_state状态,判断断开操作结果.

+         		

+        function checkDisconnectStatus(){

+            if(checkConCounter < 1){

+                checkConCounter++;

+            } else if (pppObj.rj45_state != "working" && pppObj.rj45_state != "connect") {

+                target.dhcpNoticeShow(false);

+                target.staticNoticeShow(false);

+                target.pppoeNoticeShow(false);

+                target.autoNoticeShow(false);

+                window.clearInterval(checkStatusTimer);

+                successOverlay();

+            } else if(checkConCounter > 6){

+                if(timeoutTipShowed == false){

+                    timeoutTipShowed = true;

+                    showAlert("ussd_operation_timeout");

+                }

+                window.clearInterval(checkStatusTimer);

+            } else if(checkConCounter < 7) {

+                checkConCounter++;

+            } else {

+                hideLoading();

+                window.clearInterval(checkStatusTimer);

+            }				

+        }

+        

+		//应用按钮事件.

+		function saveFunc(){

+			target.dhcpNoticeShow(false);

+			target.staticNoticeShow(false);

+			target.pppoeNoticeShow(false);

+			target.autoNoticeShow(false);

+			if(pppObj.rj45_state == "dead"){

+				showAlert("pppoe_msg");

+				return;

+			}

+			var requestParams = {};

+			if($("#pppoe_mode").val() == "PPPOE") {

+				requestParams = $.extend({}, {

+					goformId: "WAN_GATEWAYMODE_PPPOE",

+					pppoe_username: target.user(),

+					pppoe_cc: target.password()

+				});

+			} else if($("#pppoe_mode").val() == "AUTO") {

+				requestParams = $.extend({}, {

+					goformId: "WAN_GATEWAYMODE_AUTO",

+					pppoe_username: target.autoUser(),

+					pppoe_cc: target.autoPassword()

+				});

+			} else if($("#pppoe_mode").val() == "STATIC") {

+				if(target.ipAddress() == target.defaultGateway()){

+					showAlert("ip_gate_not_same");

+					return;

+				}

+				if(isStaticIPValid(target.ipAddress(), pppObj.lan_ipaddr, pppObj.lan_netmask)){

+					showAlert("ip_innergate_not_same");

+					return;

+				}

+				requestParams = $.extend({}, {

+					goformId: "WAN_GATEWAYMODE_STATIC",

+					static_wan_ipaddr: target.ipAddress(),

+					static_wan_netmask: target.subnetMask(),

+					static_wan_gateway: target.defaultGateway(),

+					static_wan_primary_dns: target.primaryDNS(),

+					static_wan_secondary_dns: target.secondaryDNS(),

+					WAN_MODE: "STATIC"

+				});

+			} else {

+				requestParams = $.extend({}, {

+					goformId: "WAN_GATEWAYMODE_DHCP"

+				});

+			}

+			requestParams.action_link = "connect";

+			requestParams.dial_mode = target.pppMode();

+			showLoading("waiting");

+			

+			service.setPppoeDialMode(requestParams, function(data){

+				if(data.result){

+					target.currentMode($("#pppoe_mode").val());

+					pppObj = service.getPppoeParams();

+					checkConCounter = 0;

+					timeoutTipShowed = false;

+					setRj45CheckTimer("connect");					

+					$("#pppoeApply").translate();

+                } else {

+					errorOverlay("pppoe_message_send_fail");

+                }

+			});

+			

+		}

+		

+		//取消连接按钮事件.

+		function cancelConnectFunc(){

+			target.dhcpNoticeShow(false);

+			target.staticNoticeShow(false);

+			target.pppoeNoticeShow(false);

+			target.autoNoticeShow(false);

+			if(pppObj.rj45_state == "dead"){

+				showAlert("pppoe_msg");

+				return;

+			}

+			var requestParams = {

+				dial_mode: target.pppMode(),

+				action_link: "disconnect"

+			};

+			if(pppObj.ethwan_mode == "PPPOE") {

+				requestParams = $.extend(requestParams, {

+					goformId: "WAN_GATEWAYMODE_PPPOE",

+					pppoe_username: pppObj.pppoe_username,

+					pppoe_cc: pppObj.pppoe_cc					

+				});

+			}else if(pppObj.ethwan_mode == "AUTO") {

+				requestParams = $.extend(requestParams, {

+					goformId: "WAN_GATEWAYMODE_AUTO",

+					pppoe_username: pppObj.pppoe_username,

+					pppoe_cc: pppObj.pppoe_cc					

+				});

+			}else if(pppObj.ethwan_mode == "STATIC") {

+				requestParams = $.extend(requestParams, {

+					goformId: "WAN_GATEWAYMODE_STATIC",

+					static_wan_ipaddr: pppObj.static_wan_ipaddr,

+					static_wan_netmask: pppObj.static_wan_netmask,

+					static_wan_gateway: pppObj.static_wan_gateway,

+					static_wan_primary_dns: pppObj.static_wan_primary_dns,

+					static_wan_secondary_dns: pppObj.static_wan_secondary_dns,

+					WAN_MODE: "STATIC"

+				});

+			}else {

+				requestParams = $.extend(requestParams, {

+					goformId: "WAN_GATEWAYMODE_DHCP"

+				});

+			}

+			showLoading("waiting");

+			service.setPppoeDialMode(requestParams, function(data){

+				if(data.result){

+                    checkConCounter = 0;

+					timeoutTipShowed = false;

+					setRj45CheckTimer("disconnect");

+					$("#pppoeApply").translate();

+                } else {

+					errorOverlay("pppoe_message_send_fail");

+                }

+			});

+			

+		}

+		

+		function radioHandlerFunc(){

+			initContronler();

+			return true;

+		}

+		

+		function changeModeDivFunc(){

+			initContronler();

+		}

+        

+    }

+

+	function bindContainer(vm){

+		var container = $('#container');

+		ko.cleanNode(container[0]);

+		ko.applyBindings(vm, container[0]);

+	

+	}

+    // 联网设置初始化.

+     

+	function initialize() {

+		var vm = new PPPoEViewModel();

+		bindContainer(vm);

+		

+		$("#pppoeApply").translate();

+		

+		$('#pppoeForm').validate({

+			submitHandler : function() {

+				vm.save();

+			},

+            rules: {

+                txtPin: "wps_pin_check",

+				txtIpAddress: "dmz_ip_check",

+				txtSubnetMask: {

+					ipv4: true,

+                    subnetmask_check: true

+				},

+				txtDefaultGateway: {

+					ipv4: true,

+					gateway_check: true

+				},

+				txtPrimaryDNS: {

+					ipv4: true,

+					dns_check:true

+				},

+				txtSecondaryDNS: {

+					ipv4: true,

+					dns_check:true

+				}

+            }

+		});

+	}

+	

+	

+//from 4.0

+    // 有效DNS检查.

+     

+function validateDns(dns){

+	if ( "0.0.0.0" == dns || "255.255.255.255" == dns) {

+		return false;

+	}

+	return true;

+}

+    // 联网设置初始化.

+     

+function isStaticIPValid(ip, lanip, lanmask){

+	if(!ip || !lanip || !lanmask){//各参数不能为空

+        return false;

+    }

+	if(ip == lanip){// 与内网IP相等

+		return true;

+	}

+    var  res1 = [], res2 = [], mask = [];

+    addr1 = ip.split(".");

+    addr2 = lanip.split(".");

+    mask  = lanmask.split(".");

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

+        res1.push(parseInt(addr1[i]) & parseInt(mask[i]));

+        res2.push(parseInt(addr2[i]) & parseInt(mask[i]));

+    }

+    if(res1.join(".") == res2.join(".")){//在同一个网段

+        return true;

+    }else{//不在同一个网段

+        return false;

+    }

+}

+

+// 有效子网掩码验证.

+     

+function isNetmaskIPValid(ip) {

+	if (ip == 255 || ip == 254 || ip == 252 || ip == 248

+		|| ip == 240 || ip == 224 || ip == 192 || ip == 128 || ip == 0)

+	{

+		return true;

+	}

+	else

+	{

+		return false;

+	}

+}

+    // 有效子网掩码检查.

+     

+function validateNetmask(netmask) {

+	var array = new Array();

+	array = netmask.split(".");

+

+	if (array.length != 4) {

+		return false;

+	}

+

+	array[0] = parseInt(array[0]);

+	array[1] = parseInt(array[1]);

+	array[2] = parseInt(array[2]);

+	array[3] = parseInt(array[3]);

+

+	if (array[3] != 0) {

+		if (array[2] != 255 || array[1] != 255 || array[0] != 255) {

+			return false;

+		} else {

+			if (!isNetmaskIPValid(array[3])) {

+				return false;

+			}

+		}

+	}

+

+	if (array[2] != 0) {

+		if (array[1] != 255 || array[0] != 255) {

+			return false;

+		} else {

+			if (!isNetmaskIPValid(array[2])) {

+				return false;

+			}

+		}

+	}

+

+	if (array[1] != 0) {

+		if (array[0] != 255) {

+			return false;

+		} else{

+			if (!isNetmaskIPValid(array[1])) {

+				return false;

+			}

+		}

+	}

+	if(array[0]!=255) {

+		return false;

+	}

+	if ( "0.0.0.0" == netmask || "255.255.255.255" == netmask) {

+		return false;

+	}

+	return true;

+}

+    

+    // subnetmask_check校验规则

+     

+jQuery.validator.addMethod("subnetmask_check", function (value, element, param) {

+	var result = validateNetmask(value);

+    return this.optional(element) || result;

+});

+    // dns_check校验规则

+     

+jQuery.validator.addMethod("dns_check", function (value, element, param) {

+	var result = validateDns(value);

+    return this.optional(element) || result;

+});

+    // 有效网关检查.

+     

+function validateGateway(wanIp, netmaskIp, gatewayIp) {

+	if(myConcat(wanIp,netmaskIp) == myConcat(netmaskIp, gatewayIp)) {

+		return true;

+	} else {

+		return false;

+	}

+}

+    // IP和子网掩码转换成数组形式并相与,返回相与后的IP.

+     

+function myConcat(ip1,ip2){

+	var result = [];

+	var iplArr = ip1.split(".");

+	var ip2Arr = ip2.split(".");

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

+		result[i] = (iplArr[i] & ip2Arr[i]);

+	}

+	return result.join(".");

+}

+    // gateway_check校验规则

+     

+jQuery.validator.addMethod("gateway_check", function (value, element, param) {

+	var result = validateGateway($('#txtIpAddress').val(), $('#txtSubnetMask').val(), $("#txtDefaultGateway").val());

+    return this.optional(element) || result;

+});

+	

+	return {

+		init: initialize

+	};

+});

+//联网设置模块

+define("network_dial_set","underscore jquery knockout set service".split(" "),

+function(_, $, ko, config, service) {

+

+    //联网设置view model

+	function DialVM() {

+		var dialMode = service.getConnectionMode();

+		var target = this;

+

+		target.selectMode = ko.observable(dialMode.connectionMode);

+        target.enableFlag = ko.observable(true);

+        target.isAllowedRoaming = ko.observable(dialMode.isAllowedRoaming);

+        var originalRoaming = dialMode.isAllowedRoaming;

+

+        target.setAllowedRoaming = setAllowedRoamingFunc;

+		

+		var checkboxFlag = $(".checkboxToggle");

+        target.checkEnable = checkEnableFunc;

+		

+        //修改联网模式

+        target.save = saveFunc;

+		

+		function saveFunc() {

+            showLoading();

+            var connMode = target.selectMode();

+            //当选择自动时,下发原先的勾选状态

+            if (connMode == 'auto_dial') {

+                originalRoaming = target.isAllowedRoaming();

+            } else {

+                target.isAllowedRoaming(originalRoaming);

+            }

+            service.setConnectionMode({

+                connectionMode: connMode,

+                isAllowedRoaming: target.isAllowedRoaming()

+            }, function (result) {

+                if (result.result == "success") {

+                    successOverlay();

+                } else {

+                    errorOverlay();

+                }

+            });

+        }

+		

+		function setAllowedRoamingFunc() {

+            if(!$("#roamBtn").hasClass("disable")){

+                var checkbox = $("#isAllowedRoaming:checked");

+                if(checkbox && checkbox.length == 0 ){

+                    target.isAllowedRoaming("on");

+                }else{

+                    target.isAllowedRoaming("off");

+                }

+            }

+        }

+		

+		function checkEnableFunc() {

+            var status = service.getStatusInfo();

+

+            if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {

+                target.enableFlag(false);

+                disableCheckbox(checkboxFlag);

+            }

+            else {

+                target.enableFlag(true);

+                enableCheckbox(checkboxFlag);

+            }

+        }

+

+	}

+

+    //联网设置初始化.

+	function initialize() {

+		var vm = new DialVM();

+		bindContainer(vm);

+		

+        vm.checkEnable();

+        addInterval( vm.checkEnable, 1000);

+	}

+	

+	function bindContainer(vm){

+		var container = $('#container');

+		ko.cleanNode(container[0]);

+		ko.applyBindings(vm, container[0]);

+	

+	}

+	

+	return {

+		init: initialize

+	};

+});

+// APN Setting 模块

+define("network_apn_set","underscore jquery knockout set service".split(" "),

+    function (_, $, ko, config, service) {

+

+    //获取鉴权方式

+     

+    function getAuthModes() {

+        return _.map(config.APN_AUTH_MODES, function (item) {

+            return new Option(item.name, item.value);

+        });

+    }

+

+    function getApnPdpTypes() {

+        var pdpTypesArray = [new Option('IPv4', 'IP')];

+        if (config.IPV6_SUPPORT) {

+            pdpTypesArray.push(new Option('IPv6', 'IPv6'));

+            if (config.IPV4V6_SUPPORT) {

+                pdpTypesArray.push(new Option('IPv4v6', 'IPv4v6'));

+            }

+            if (config.IPV4_AND_V6_SUPPORT) {

+                pdpTypesArray.push(new Option('IPv4 & IPv6', 'IPv4v6'));

+            }

+        }

+        return pdpTypesArray;

+    }

+

+    //获取apn相关信息

+     

+    function getApnSet() {

+        var apnInfo = service.getApnSettings();

+        apnInfo.ipv6ApnConfigs = getApnConfigs(apnInfo.ipv6APNs, true);

+        apnInfo.apnConfigs = getApnConfigs(apnInfo.APNs, false);

+        apnInfo.autoApnConfigs = getAutoApnsConfig(apnInfo.autoApns, apnInfo.autoApnsV6);

+        return apnInfo;

+    }

+    var apnConfigs = {};

+    var ipv6ApnConfigs = {};

+    var autoApnConfigs = {};

+

+    //解析自动apn信息

+     

+    function getAutoApnsConfig(autoApnV4, autoApnV6) {

+        var autoApnsV4 = [];

+        var autoApnsV6 = [];

+

+        if (autoApnV4 && autoApnV4.length > 5) {

+            var apnArr = autoApnV4.split("||");

+            for (var ki = 0; ki < apnArr.length; ki++) {

+                if (apnArr[ki] != "") {

+                    var apnItem = parseApnItem(apnArr[ki], false);

+                    autoApnsV4.push(apnItem);

+                }

+            }

+        }

+        if (autoApnV6 && autoApnV6.length > 5) {

+            var apnArr = autoApnV6.split("||");

+            for (var ki = 0; ki < apnArr.length; ki++) {

+                if (apnArr[ki] != "") {

+                    var apnItem = parseApnItem(apnArr[ki], false);

+                    autoApnsV6.push(apnItem);

+                }

+            }

+        }

+        return dealAutoApnsV4V6(autoApnsV4, autoApnsV6);

+    }

+    //解析apn信息

+     

+    function getApnConfigs(apnsStr, isIpv6) {

+        var apnCfgs = [];

+        var theApnConfigs = {};

+        if (apnsStr && apnsStr.length > 10) {

+            var apnArr = apnsStr.split("||");

+            for (var ki = 0; ki < apnArr.length; ki++) {

+                if (apnArr[ki] != "") {

+                    var apnItem = parseApnItem(apnArr[ki], isIpv6);

+                    apnCfgs.push(apnItem);

+                    theApnConfigs[apnItem.profileName] = apnItem;

+                }

+            }

+        }

+        if (isIpv6 == false) {

+            apnConfigs = theApnConfigs;

+        } else {

+            ipv6ApnConfigs = theApnConfigs;

+        }

+        return apnCfgs;

+    }

+

+	//解析单条apn信息

+     

+    function parseApnItem(apnStr, isIpv6) {

+        var apnItem = {};

+        var items = apnStr.split("($)");

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

+            apnItem.profileName = items[0];

+            apnItem.pdpType = items[7];

+            if (isIpv6 == false) {	

+                apnItem.dnsMode = items[10];

+                apnItem.dns1 = items[11];

+                apnItem.dns2 = items[12];

+                apnItem.wanApn = items[1];

+                apnItem.authMode = items[4].toLowerCase();

+                apnItem.username = items[5];

+                apnItem.password = items[6];

+            } else {		

+                apnItem.dnsModeV6 = items[10];

+                apnItem.dns1V6 = items[11];

+                apnItem.dns2V6 = items[12];

+                apnItem.wanApnV6 = items[1];

+                apnItem.authModeV6 = items[4].toLowerCase();

+                apnItem.usernameV6 = items[5];

+                apnItem.passwordV6 = items[6];

+            }

+        }

+        return apnItem;

+    }

+    //合并V4\V6自动apn信息

+     

+    function dealAutoApnsV4V6(v4, v6) {

+        autoApnConfigs = {};

+        var autoApns = [];

+        for (var ki = 0; ki < v4.length; ki++) {

+            var apnElem = v4[ki];

+            var itemsV6 = v6[ki];

+            if (itemsV6 && (itemsV6.pdpType == 'IPv6' || itemsV6.pdpType == 'IPv4v6')) {

+                apnElem.usernameV6 = itemsV6.username;

+                apnElem.passwordV6 = itemsV6.password;

+                apnElem.dns1V6 = itemsV6.dns1;

+                apnElem.dns2V6 = itemsV6.dns2;

+                apnElem.wanApnV6 = itemsV6.wanApn;

+                apnElem.authModeV6 = itemsV6.authMode;

+                apnElem.dnsModeV6 = itemsV6.dnsMode;

+            }

+            autoApns.push(apnElem);

+            autoApnConfigs[apnElem.profileName] = apnElem;

+        }

+        return autoApns;

+    }

+

+    function getProfileOptions(apns) {

+        return _.map(apns, function (item) {

+            return new Option(item.profileName, item.profileName);

+        });

+    }

+

+    //APNViewModel

+     

+    function APNViewModel() {

+        var target = this;

+        var apnSettings = getApnSet();

+        if (apnSettings.apnNumPreset) {

+            config.maxApnNumber = apnSettings.apnNumPreset;

+        }

+

+        target.defApn = ko.observable(apnSettings.profileName); //当前默认APN

+        target.apnMode = ko.observable(apnSettings.apnMode);

+        target.autoProfiles = ko.observableArray(getProfileOptions(apnSettings.autoApnConfigs));

+        target.profiles = ko.observableArray(getProfileOptions(apnSettings.apnConfigs));

+        target.wanDial = ko.observable(apnSettings.wanDial);

+		

+        target.showApnDns = ko.observable(config.SHOW_APN_DNS);

+        target.index = ko.observable(apnSettings.currIndex);

+        target.supportIPv6 = ko.observable(config.IPV6_SUPPORT);

+        target.supportIpv4AndIpv6 = ko.observable(config.IPV4_AND_V6_SUPPORT);

+

+        target.apn = ko.observable(apnSettings.wanApn);

+        target.dnsMode = ko.observable(apnSettings.dnsMode == 'manual' ? 'manual' : 'auto');

+        target.dns1 = ko.observable(apnSettings.dns1);

+        target.dns2 = ko.observable(apnSettings.dns2);

+        target.authModes = ko.observableArray(getAuthModes());

+        target.username = ko.observable(apnSettings.username);

+        target.password = ko.observable(apnSettings.password);

+		

+        target.pdpTypes = ko.observableArray(getApnPdpTypes());

+        target.selectedPdpType = ko.observable(apnSettings.pdpType);

+        target.selectedPdpTypeTmp = ko.observable(apnSettings.pdpType); //the PdpType select's value before chang

+        target.profileName = ko.observable(apnSettings.profileName); //当前编辑框中的

+        target.selectedProfile = ko.observable(apnSettings.profileName); //当前下拉框选择的APN

+

+        target.showPassword = ko.observable(false);

+

+        target.apnV6 = ko.observable(apnSettings.wanApnV6);

+        target.dnsModeV6 = ko.observable(apnSettings.dnsModeV6 == 'manual' ? 'manual' : 'auto');

+        target.dns1V6 = ko.observable(apnSettings.dns1V6);

+        target.dns2V6 = ko.observable(apnSettings.dns2V6);

+        target.authModesV6 = ko.observableArray(getAuthModes());

+        target.usernameV6 = ko.observable(apnSettings.usernameV6);

+        target.passwordV6 = ko.observable(apnSettings.passwordV6);

+        target.pdpTypeNote = ko.observable(true);

+        if (apnSettings.autoApnConfigs && apnSettings.autoApnConfigs.length > 0) {

+            target.selectedAutoProfile = ko.observable(apnSettings.autoApnConfigs[0].profileName);

+        } else {

+            target.selectedAutoProfile = ko.observable();

+        }

+

+        if (config.EMPTY_APN_SUPPORT == false) {

+            $("#apn_ipv4_apn").addClass("required");

+            $("#apn_ipv6_apn").addClass("required");

+        } else {

+            $("#apn_ipv4_apn").removeClass("required");

+            $("#apn_ipv6_apn").removeClass("required");

+        }

+		

+        target.disableProfile = ko.observable(false); //表示处于新增页面

+        target.addApnHide = ko.observable(true);

+        target.defaultCfg = ko.observable(true); //当前选中的是默认APN

+        target.predeterminedCfg = ko.observable(true); //当前选中的是预置的APN

+		

+        target.selectedAuthentication = ko.observable(apnSettings.authMode);

+        target.selectedAuthenticationV6 = ko.observable(apnSettings.authModeV6);

+

+

+        target.transApnV6 = ko.observable('apn');

+        target.transDnsModeV6 = ko.observable('apn_dns_mode');

+        target.transDns1V6 = ko.observable('apn_dns1');

+        target.transDns2V6 = ko.observable('apn_dns2');

+        target.transAuthV6 = ko.observable('apn_authentication');

+        target.transUserNameV6 = ko.observable('apn_user_name');

+        target.transPasswordV6 = ko.observable('apn_password');

+		

+        target.transApn = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_ipv4_apn' : 'apn');

+        target.transDnsMode = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns_mode_ipv4' : 'apn_dns_mode');

+        target.transDns1 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns1_ipv4' : 'apn_dns1');

+        target.transDns2 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns2_ipv4' : 'apn_dns2');

+        target.transAuth = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_authentication_ipv4' : 'apn_authentication');

+        target.transUserName = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_user_name_ipv4' : 'apn_user_name');

+        target.transPassword = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_password_ipv4' : 'apn_password');

+

+        target.setDefaultVisible = ko.observable(!isConnectedNetWork());

+

+        target.tmp1 = ko.computed(function () {

+             if (target.selectedPdpType() == "IPv6") {

+                target.transApnV6('apn');

+                target.transDnsModeV6('apn_dns_mode');

+                target.transDns1V6('apn_dns1');

+                target.transDns2V6('apn_dns2');

+                target.transAuthV6('apn_authentication');

+                target.transUserNameV6('apn_user_name');

+                target.transPasswordV6('apn_password');

+            } else if (config.IPV4_AND_V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {

+                target.transApn('apn_ipv4_apn');

+                target.transDnsMode('apn_dns_mode_ipv4');

+                target.transDns1('apn_dns1_ipv4');

+                target.transDns2('apn_dns2_ipv4');

+                target.transAuth('apn_authentication_ipv4');

+                target.transUserName('apn_user_name_ipv4');

+                target.transPassword('apn_password_ipv4');

+

+                target.transApnV6('apn_ipv6_apn');

+                target.transDnsModeV6('apn_dns_mode_ipv6');

+                target.transDns1V6('apn_dns1_ipv6');

+                target.transDns2V6('apn_dns2_ipv6');

+                target.transAuthV6('apn_authentication_ipv6');

+                target.transUserNameV6('apn_user_name_ipv6');

+                target.transPasswordV6('apn_password_ipv6');

+            } else if (target.selectedPdpType() == "IP" || target.selectedPdpType() == "IPv4") {

+                target.transApn('apn');

+                target.transDnsMode('apn_dns_mode');

+                target.transDns1('apn_dns1');

+                target.transDns2('apn_dns2');

+                target.transAuth('apn_authentication');

+                target.transUserName('apn_user_name');

+                target.transPassword('apn_password');

+            } else { //config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6'

+                target.transApn('apn');

+                target.transDnsMode('apn_dns_mode');

+                target.transDns1('apn_dns1');

+                target.transDns2('apn_dns2');

+                target.transAuth('apn_authentication');

+                target.transUserName('apn_user_name');

+                target.transPassword('apn_password');

+            }

+            $("#apn_setting_form").translate();

+        });

+

+        target.autoApnChecked = ko.computed(function () {

+            return target.apnMode() == "auto";

+        });

+		

+        target.hasCapacity = ko.computed(function () {

+            if (target.profiles().length < config.maxApnNumber) {

+                return true;

+            } else {

+                return false;

+            }

+        });

+

+        target.showDnsV6 = ko.computed(function () {

+            return target.dnsModeV6() == "manual";

+        });

+		

+        target.showDns = ko.computed(function () {

+            return target.dnsMode() == "manual";

+        });

+

+

+        checkDefaultProfileStatus();

+        target.checkInputDisable = ko.computed(function () {

+            if (target.apnMode() != "auto"  && (target.predeterminedCfg() == false && target.defaultCfg() == true) && !isConnectedNetWork()) {

+                return false;

+            }

+            if (((target.apnMode() != "auto" && (target.predeterminedCfg() || target.defaultCfg()) && !target.disableProfile())) || target.apnMode() == "auto") {

+                return true;

+            }

+            if ((!target.disableProfile() || !(target.predeterminedCfg() || target.defaultCfg())) && target.apnMode() != "auto") {

+                return false;

+            }

+            return false;

+        });

+

+        var data = service.getDeviceInfo();

+        target.pdpTypeChangeAlert = pdpTypeChangeAlertFunc;

+		

+

+        target.showAutoApnDetail = ko.computed(function () {

+            if (target.apnMode() != "auto") {

+                return true;

+            } else {

+                return target.autoProfiles().length > 0;

+            }

+        });

+		//密码显示事件

+        target.showPasswordHandler = function () {

+            var checkbox = $("#showPassword:checked");

+            if (checkbox && checkbox.length == 0) {

+                target.showPassword(true);

+            } else {

+                target.showPassword(false);

+            }

+        };

+		//auto apn profile change 事件处理

+         

+        target.autoProfileChangeHandler = autoProfileChangeHandlerFunc;

+		

+		

+        //profile change 事件处理

+         

+        target.profileChangeHandler = profileChangeHandlerFunc;

+		

+        

+        //切换profile时重置下面的显示项

+        target.setUIData = setUIDataFunc;

+		

+

+        //设置默认apn状态

+         

+        function checkDefaultProfileStatus() {

+            var index = getApnIndex();

+            //默认apn不允许编辑

+            if (target.apnMode() != "auto") { //当前选中与实际不一致的话

+                if (target.selectedProfile() != target.defApn()) {

+                    target.defaultCfg(false);

+                } else {

+                    target.defaultCfg(true); //默认APN

+                }

+            } else {

+                if (target.selectedAutoProfile() != target.defApn()) {

+                    target.defaultCfg(false);

+                } else {

+                    target.defaultCfg(true); //默认APN

+                }

+            }

+

+            if (index >= config.defaultApnSize) {

+                target.predeterminedCfg(false);

+            } else {

+                target.predeterminedCfg(true); //预置APN

+            }

+        }

+

+

+        //设置为默认apn

+         

+        target.setDefaultAct = setDefaultActFunc;

+		

+

+		

+        //APN mode change 事件处理

+         

+        target.apnModeChangeHandler = apnModeChangeHandlerFunc;

+		

+		

+        function doSetDefaultAct() {

+            var index = 0;

+            if (target.apnMode() != 'auto') {

+                index = getApnIndex();

+                target.selectedProfile($("#profile").val());

+            } else {

+                index = getAutoApnIndex();

+                target.selectedAutoProfile($("#autoProfile").val());

+            }

+            var selectedProfileDetail = target.getSelectedManualProfile();

+            service.setDefaultApn({

+                index: index,

+                apnMode: target.apnMode(),

+                pdpType: selectedProfileDetail.pdpType,

+

+                profileName: selectedProfileDetail.profileName,

+                wanApn: selectedProfileDetail.wanApn,

+                authMode: selectedProfileDetail.authMode,

+                username: selectedProfileDetail.username,

+                password: selectedProfileDetail.password,

+                dnsMode: config.SHOW_APN_DNS ? selectedProfileDetail.dnsMode : 'auto',

+                dns1: config.SHOW_APN_DNS ? selectedProfileDetail.dns1 : '',

+                dns2: config.SHOW_APN_DNS ? selectedProfileDetail.dns2 : ''

+            }, function (data) {

+                if (data.result) {

+                    //showLoading("apn_alert_restart");

+                    //restartDevice(service);

+                    addTimeout(function () {

+                        initialize(true);

+                        target.apnModeChangeHandler();

+                        successOverlay();

+                    }, 500);

+                } else {

+                    errorOverlay();

+                }

+            }, function (data) {

+                errorOverlay();

+            });

+        }

+

+        target.getSelectedManualProfile = getSelectedManualProfileFunc;

+		

+

+        //获取自动apn索引

+         

+        function getAutoApnIndex() {

+            var configs = $("#autoProfile option");

+            for (var ki = 0; ki < configs.length; ki++) {

+                if (configs[ki].value == target.selectedAutoProfile()) {

+                    return ki;

+                }

+            }

+            return configs.length - 1;

+        }

+		

+		//获取apn索引

+         

+        function getApnIndex() {

+            var configs = $("#profile option");

+            if (configs.length == 0) {

+                configs = target.profiles();

+            }

+            var ki = 0;

+            for (; ki < configs.length; ki++) {

+                if (configs[ki].value == target.selectedProfile()) {

+                    break;

+                }

+            }

+            return ki;

+        }

+

+        //保存APN设置信息

+         

+        target.saveAct = saveActFunc;

+		

+		//编辑APN信息

+         

+        function editApnSetting(preAct) { //默认设置按钮触发为TRUE

+            showLoading();

+            var apnIndex = getApnIndex();

+            var sameInfo = false;

+            if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {

+                sameInfo = true;

+            }

+            var needDoDefault = false;

+            if (preAct || (target.predeterminedCfg() || target.defaultCfg())) {

+                needDoDefault = true;

+            }

+            service.addOrEditApn({

+                profileName: target.profileName(),

+                pdpType: target.selectedPdpType(),

+                index: apnIndex,

+

+                wanApn: target.apn(),

+                authMode: target.selectedAuthentication(),

+                username: target.username(),

+                password: target.password(),

+                dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',

+                dns1: config.SHOW_APN_DNS ? target.dns1() : '',

+                dns2: config.SHOW_APN_DNS ? target.dns2() : '',

+

+                wanApnV6: sameInfo ? target.apn() : target.apnV6(),

+                authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(),

+                usernameV6: sameInfo ? target.username() : target.usernameV6(),

+                passwordV6: sameInfo ? target.password() : target.passwordV6(),

+                dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto',

+                dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '',

+                dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : ''

+            }, function (data) {

+                if (data.result) {

+                    apnSettings = getApnSet();

+                    if (target.profileName() != target.selectedProfile()) {

+                        var newProfileName = target.profileName();

+                        target.profiles(getProfileOptions(apnSettings.apnConfigs));

+                        $('#profile').val(newProfileName).trigger('change');

+                    }

+                    if (needDoDefault == false) {

+                        successOverlay();

+                    } else {

+                        doSetDefaultAct();

+                    }

+                } else {

+                    errorOverlay();

+                }

+            }, function (data) {

+                errorOverlay();

+            });

+        }

+		

+        //新增APN信息

+         

+        function addNewApnSetting() {

+            showLoading("waiting");

+            var optionLen = $("option", "#profile").length;

+            if (optionLen < config.defaultApnSize) {

+                errorOverlay();

+                return;

+            }

+            // 支持IPv4v6,并且选择IPv4v6时,IPv4 与 IPv6下发相同的信息

+            // 支持IPv4 & v6,并且选择IPv4v6时,IPv4 与 IPv6下发各自的信息

+            var sameInfo = false;

+            if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {

+                sameInfo = true;

+            }

+

+            service.addOrEditApn({

+                profileName: target.profileName(),

+                pdpType: target.selectedPdpType(),

+                index: optionLen,

+

+                wanApn: target.apn(),

+                authMode: target.selectedAuthentication(),

+                username: target.username(),

+                password: target.password(),

+                dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',

+                dns1: config.SHOW_APN_DNS ? target.dns1() : '',

+                dns2: config.SHOW_APN_DNS ? target.dns2() : '',

+

+                wanApnV6: sameInfo ? target.apn() : target.apnV6(),

+                authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(),

+                usernameV6: sameInfo ? target.username() : target.usernameV6(),

+                passwordV6: sameInfo ? target.password() : target.passwordV6(),

+                dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto',

+                dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '',

+                dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : ''

+            }, function (data) {

+                if (data.result) {

+                    apnSettings = getApnSet();

+                    if (target.profileName() != target.selectedProfile()) {

+                        var newProfileName = target.profileName();

+                        target.profiles(getProfileOptions(apnSettings.apnConfigs));

+                        $('#profile').val(newProfileName).trigger('change');

+                    }

+                    doSetDefaultAct();

+                } else {

+                    errorOverlay();

+                }

+            }, function (data) {

+                errorOverlay();

+            });

+        }

+

+        

+

+        var tempApn = {};

+		//删除APN

+         

+        target.deleteAct = deleteActFunc;

+		

+		//取消新增APN

+         

+        target.cancelAddAct = cancelAddActFunc;

+		

+        //进入新增APN页面

+         

+        target.addAct = addActFunc;

+		//进入新增APN页面

+		function addActFunc() {

+            clearValidateMsg('#apn_setting_form');

+            target.pdpTypeNote(true);

+            target.disableProfile(true);

+            target.addApnHide(true);

+            tempApn = {

+                profileName: target.profileName(),

+                selectedPdpType: target.selectedPdpType(),

+

+                wanApnV6: target.apnV6(),

+                dnsModeV6: config.SHOW_APN_DNS ? target.dnsModeV6() : 'auto',

+                dns1V6: config.SHOW_APN_DNS ? target.dns1V6() : '',

+                dns2V6: config.SHOW_APN_DNS ? target.dns2V6() : '',

+                authModeV6: target.selectedAuthenticationV6(),

+                usernameV6: target.usernameV6(),

+                passwordV6: target.passwordV6(),

+				

+                wanApn: target.apn(),

+                dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',

+                dns1: config.SHOW_APN_DNS ? target.dns1() : '',

+                dns2: config.SHOW_APN_DNS ? target.dns2() : '',

+                authMode: target.selectedAuthentication(),

+                username: target.username(),

+                password: target.password(),

+

+            };

+            target.profileName("");

+            target.selectedPdpType("IP");

+            target.selectedPdpTypeTmp("IP");

+

+            target.apnV6("");

+            target.dnsModeV6("auto");

+            target.dns1V6("");

+            target.dns2V6("");

+            target.selectedAuthenticationV6("none");

+            target.usernameV6("");

+            target.passwordV6("");

+			

+            target.apn("");

+            target.dnsMode("auto");

+            target.dns1("");

+            target.dns2("");

+            target.selectedAuthentication("none");

+            target.username("");

+            target.password("");

+

+        }

+		

+		//取消新增APN

+		function cancelAddActFunc() {

+            clearValidateMsg('#apn_setting_form');

+            target.pdpTypeNote(false);

+            target.disableProfile(false);

+            target.addApnHide(false);

+            target.profileName(tempApn.profileName);

+            target.selectedPdpType(tempApn.selectedPdpType);

+            target.selectedPdpTypeTmp(tempApn.selectedPdpType);

+

+            target.apnV6(tempApn.wanApnV6);

+            target.dnsModeV6(tempApn.dnsModeV6);

+            target.dns1V6(tempApn.dns1V6);

+            target.dns2V6(tempApn.dns2V6);

+            target.selectedAuthenticationV6(tempApn.authModeV6);

+            target.usernameV6(tempApn.usernameV6);

+            target.passwordV6(tempApn.passwordV6);

+			

+            target.apn(tempApn.wanApn);

+            target.dnsMode(tempApn.dnsMode);

+            target.dns1(tempApn.dns1);

+            target.dns2(tempApn.dns2);

+            target.selectedAuthentication(tempApn.authMode);

+            target.username(tempApn.username);

+            target.password(tempApn.password);

+

+        }

+		

+		//删除APN

+		function deleteActFunc() {

+            if (!target.selectedProfile()) {

+                showAlert("apn_no_select_alert");

+                return false;

+            }

+            if (target.predeterminedCfg()) { //预置的apn不允许删除

+                errorOverlay("apn_delete_cant_delete_default");

+                return false;

+            }

+            if (getApnSet().profileName == target.profileName()) {

+                errorOverlay("apn_cant_delete_current");

+                return false;

+            }

+

+            showConfirm("apn_delete_confirm", function () {

+                showLoading('deleting');

+                service.deleteApn({

+                    index: getApnIndex()

+                }, function (data) {

+                    if (data.result) {

+                        target.profiles(getProfileOptions(getApnSet().apnConfigs));

+                        target.selectedProfile(target.defApn());

+                        target.profileChangeHandler();

+                        successOverlay();

+                    } else {

+                        errorOverlay();

+                    }

+                }, function (data) {

+                    errorOverlay();

+                });

+            });

+        }

+		

+		//保存APN设置信息

+		function saveActFunc() {

+            if (!$('#apn_setting_form').valid()) {

+                return false;

+            }

+            if (!target.selectedProfile() && !target.disableProfile()) { //不是增加时的设置需要判断是否选择了Profile

+                showAlert("apn_no_select_alert");

+                return false;

+            }

+            var exist = false;

+            $.each(target.profiles(), function (i, e) {

+                if (e.value == target.profileName()) {

+                    exist = true;

+                }

+            });

+

+            if (target.disableProfile() == false) {

+                if (exist && target.selectedProfile() != target.profileName()) {

+                    showInfo("apn_save_profile_exist");

+                    return false;

+                }

+                if (target.predeterminedCfg()) { //预置的APN不可以修改

+                    errorOverlay();

+                    return false;

+                }

+                if (target.predeterminedCfg() || target.defaultCfg()) {

+                    //showConfirm("apn_alert", function () {

+                    editApnSetting(false);

+                    //});

+                } else {

+                    editApnSetting(false);

+                }

+            } else {

+				

+                if ($("#profile option").length >= config.maxApnNumber) {

+                    showInfo({

+                        msg: "apn_profile_full",

+                        params: [config.maxApnNumber]

+                    });

+                    return false;

+                }

+                if (exist) {

+                    showInfo("apn_save_profile_exist");

+                    return false;

+                }

+                var info = service.getStatusInfo();

+                if (info.connectStatus != "ppp_connected") {

+                    //showConfirm("apn_alert", function () {

+                    addNewApnSetting();

+                    //});

+                    

+                } else {

+					showConfirm("apn_diconneted_network_confirm", function () {

+                        showLoading('disconnecting');

+                        service.disconnect({}, function (data) {

+                            if (data.result) {

+                                config.connect_flag = true;

+                                addNewApnSetting();

+                            } else {

+                                errorOverlay();

+                            }

+                        });

+                    });

+                }

+            }

+        }

+		

+		function getSelectedManualProfileFunc() {

+            var cfg = {};

+            var profileVal = $("#profile").val();

+            if (typeof target.selectedProfile() == 'undefined') {

+                target.selectedProfile(profileVal);

+            }

+            var cfgV4 = apnConfigs[profileVal];

+            var cfgV6 = ipv6ApnConfigs[profileVal];

+            if (cfgV4 && !cfgV6) {

+                $.extend(cfg, cfgV4);

+            } else if (cfgV4 && cfgV6) {

+                if (!!cfgV4.pdpType) {

+                    $.extend(cfg, cfgV6);

+                    $.extend(cfg, cfgV4);

+                } else {

+                    $.extend(cfg, cfgV4);

+                    $.extend(cfg, cfgV6);

+                }

+            }

+            return cfg;

+        }

+		

+		//APN mode change 事件处理

+		function apnModeChangeHandlerFunc(data, event) {

+            if (target.apnMode() != 'auto') {

+                target.profileChangeHandler();

+            } else {

+                if (target.showAutoApnDetail()) {

+                    target.autoProfileChangeHandler();

+                }

+            }

+            return true;

+        }

+		

+		//设置为默认apn

+		function setDefaultActFunc() {

+            if (!target.selectedProfile()) {

+                showAlert("apn_no_select_alert");

+                return false;

+            }

+            var connectStatus = service.getConnectionInfo().connectStatus;

+             if (connectStatus == "ppp_connecting") {

+                showAlert({

+                    msg: "apn_cant_modify_status",

+                    params: [$.i18n.prop("connecting").toLowerCase()]

+                });

+                return false;

+            } else if (connectStatus == "ppp_disconnecting") {

+                showAlert({

+                    msg: "apn_cant_modify_status",

+                    params: [$.i18n.prop("disconnecting").toLowerCase()]

+                });

+                return false;

+            } else if (connectStatus == "ppp_connected") {

+                showAlert({

+                    msg: "apn_cant_modify_status",

+                    params: [$.i18n.prop("connected").toLowerCase()]

+                });

+                return false;

+            }

+            if (target.apnMode() == 'auto' || target.predeterminedCfg()) {

+                //showConfirm("apn_alert", function () {

+                showLoading("waiting");

+                doSetDefaultAct();

+                //});

+            } else {

+                if ($('#apn_setting_form').valid() == false) {

+                    $(".error:first", "#apn_setting_form").focus();                    

+                } else {

+					var exist = false;

+                    $.each(target.profiles(), function (i, e) {

+                        if (e.value == target.profileName()) {

+                            exist = true;

+                        }

+                    });

+                    if (exist && target.selectedProfile() != target.profileName()) {

+                        showInfo("apn_save_profile_exist");

+                        return false;

+                    }

+                    //showLoading("waiting");

+                    //showConfirm("apn_alert", function () {

+                    editApnSetting(true);

+                    //});

+                }

+            }

+        }

+		

+		//切换profile时重置下面的显示项

+		function setUIDataFunc(data) {

+            clearValidateMsg('#apn_setting_form');

+            if (!data) {

+                return;

+            }

+            target.selectedPdpType(data.pdpType || 'IP');

+            target.selectedPdpTypeTmp(data.pdpType || 'IP');

+            target.profileName(data.profileName);

+

+            target.apn(data.wanApn);

+            target.dnsMode(data.dnsMode != 'manual' ? 'auto' : 'manual');

+            target.dns1(data.dns1);

+            target.dns2(data.dns2);

+            target.username(data.username);

+            target.password(data.password);

+            target.selectedAuthentication(data.authMode || 'none');

+

+            target.apnV6(data.wanApnV6);

+            target.dnsModeV6(data.dnsModeV6 != 'manual' ? 'auto' : 'manual');

+            target.dns1V6(data.dns1V6);

+            target.dns2V6(data.dns2V6);

+            target.usernameV6(data.usernameV6);

+            target.passwordV6(data.passwordV6);

+            target.selectedAuthenticationV6(data.authModeV6 || 'none');

+        }

+		

+		//profile change 事件处理

+		function profileChangeHandlerFunc(data, event) {

+            target.pdpTypeNote(true);

+            if (target.apnMode() != 'manual') {

+                return true;

+            }

+            var cfg = target.getSelectedManualProfile();

+            target.setUIData(cfg);

+            checkDefaultProfileStatus();

+            return true;

+        }

+		

+		//auto apn profile change 事件处理

+		function autoProfileChangeHandlerFunc(data, event) {

+            if (target.apnMode() != 'auto') {

+                return true;

+            }

+            var cfg = autoApnConfigs[target.selectedAutoProfile()];

+            target.setUIData(cfg);

+            checkDefaultProfileStatus();

+            return true;

+        }

+		

+		function pdpTypeChangeAlertFunc() {

+            if (target.pdpTypeNote()) {

+                showAlert({

+                    msg: "apn_pdptype_change_note",

+                    params: [data.lanDomain, data.ipAddress]

+                });

+            }

+            if (target.apnMode() != "auto" && !target.disableProfile()) { //如果是手动非ADD状态,切换PDP类型时,不改变界面显示的各项值

+                if ((config.IPV4_AND_V6_SUPPORT && target.selectedPdpTypeTmp() != 'IPv4v6' && target.selectedPdpType() != 'IPv4v6') || !config.IPV4_AND_V6_SUPPORT) { //

+                    if (target.selectedPdpTypeTmp() == 'IPv6') { //V6 -> V4 / V4V6

+                        target.apn(target.apnV6());

+                        target.dnsMode(target.dnsModeV6());

+                        target.dns1(target.dns1V6());

+                        target.dns2(target.dns2V6());

+                        target.username(target.usernameV6());

+                        target.password(target.passwordV6());

+                        target.selectedAuthentication(target.selectedAuthenticationV6());

+                    } else if (target.selectedPdpType() == 'IPv6') { //V4 / V4V6 -> V6

+                        target.apnV6(target.apn());

+                        target.dnsModeV6(target.dnsMode());

+                        target.dns1V6(target.dns1());

+                        target.dns2V6(target.dns2());

+                        target.usernameV6(target.username());

+                        target.passwordV6(target.password());

+                        target.selectedAuthenticationV6(target.selectedAuthentication());

+                    }

+                }

+            }

+            target.selectedPdpTypeTmp(target.selectedPdpType());

+        }

+       

+

+    }

+

+    //是否已联网

+     

+    function isConnectedNetWork() {

+        var info = service.getConnectionInfo();

+        return info.connectStatus == "ppp_connected";

+    }

+

+    function initVar() {

+        apnConfigs = {};

+        ipv6ApnConfigs = {};

+        autoApnConfigs = {};

+    }

+	function bindContainer(vm){

+		var container = $('#container');

+        ko.cleanNode(container[0]);

+        ko.applyBindings(vm, container[0]);

+	}

+    //初始化ViewModel

+     

+    function initialize(formInit) {

+        initVar();

+        

+        var vm = new APNViewModel();

+		bindContainer(vm);

+

+        if (!formInit) {

+            addInterval(function () {

+                vm.setDefaultVisible(!isConnectedNetWork());

+            }, 1000);

+        }

+        $('#apn_setting_form').validate({

+            submitHandler: function () {

+                vm.saveAct();

+            },

+            rules: {

+                profile_name: 'apn_profile_name_check',

+                apn_ipv4_apn: 'apn_check',

+                apn_dns1_ipv4: "ipv4",

+                apn_dns2_ipv4: "ipv4",

+                apn_ipv6_apn: 'apn_check',

+                apn_dns1_ipv6: "ipv6",

+                apn_dns2_ipv6: "ipv6",

+                apn_user_name_ipv4: 'ppp_username_check',

+                apn_secretcode_ipv4: 'ppp_secretcode_check',

+                apn_user_name_ipv6: 'ppp_username_check',

+                apn_secretcode_ipv6: 'ppp_secretcode_check'

+            }

+        });

+    }

+

+    return {

+        init: initialize

+    };

+});
\ No newline at end of file