Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js	(revision 9231)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.controller.js	(working copy)
@@ -6,338 +6,15 @@
         '$state',
         '$uibModal',
         'sysResourceService',
-        '$filter',
-        function($scope, $rootScope, $state, $uibModal, sysResourceService, $filter) {
+        function($scope, $rootScope, $state, $uibModal, sysResourceService) {
             var avxViewModel = this;
             $rootScope.title = "System Email Settings";
-            $scope.onLabel = $filter('T')('Enable');
-            $scope.offLabel = $filter('T')('Disable');
-
-            avxViewModel.email = {
-                from_string: ''
-            };
-            avxViewModel.emailPlaceholder = '';
-            avxViewModel.originalFromString = '';
-            avxViewModel.alert = {
-                hostname: '',
-                send_alert: false
-            };
-            avxViewModel.alertHostnamePlaceholder = '';
-            avxViewModel.externalServer = {
-                enable: false,
-                email_server: '',
-                server_port: 25,
-                use_ssl_tls: false
-            };
-            avxViewModel.externalSender = {
-                email: '',
-                password: ''
-            };
-            avxViewModel.showPassword = false;
-            avxViewModel.relay = {
-                enable: false
-            };
-            avxViewModel.relay_data = [];
-            
-            // Form validation function
-            avxViewModel.isFormInvalid = function(form, fromString) {
-                return form.$invalid || 
-                       form.from_string.$error.email || 
-                       form.from_string.$error.maxlength || 
-                       (fromString && fromString.length > 64);
-            };
-            
-            // External sender form validation function
-            avxViewModel.isExternalSenderFormInvalid = function(form, email) {
-                var password = avxViewModel.externalSender.password;
-                return form.$invalid || 
-                       form.external_sender_email.$error.email || 
-                       form.external_sender_email.$error.maxlength || 
-                       (email && email.length > 32) ||
-                       !password || // Password required
-                       password.length === 0 ||
-                       (password && password.length > 64); // Password length check
-            };
-            
-            // Hostname validation function
-            avxViewModel.isValidHostname = function(hostname) {
-                if (!hostname) return true; // Empty is valid
-                
-                // IP address regex (IPv4)
-                var ipRegex = /^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$/;
-                
-                // FQDN regex
-                var fqdnRegex = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?$/;
-                
-                return ipRegex.test(hostname) || fqdnRegex.test(hostname);
-            };
-            
-            // Alert form validation function
-            avxViewModel.isAlertFormInvalid = function(form, hostname) {
-                return (hostname && hostname.length > 128) || 
-                       (hostname && !avxViewModel.isValidHostname(hostname));
-            };
-            
-            // External server form validation function
-            avxViewModel.isExternalServerFormInvalid = function(form, emailServer) {
-                var port = avxViewModel.externalServer.server_port;
-                var isPortValid = (port === null || port === undefined || port === '' || (port >= 0 && port <= 65535));
-                
-                return !emailServer || // Required field check
-                       emailServer.length === 0 ||
-                       (emailServer && emailServer.length > 64) || 
-                       (emailServer && !avxViewModel.isValidHostname(emailServer)) ||
-                       !isPortValid; // Port validation - allow empty
-            };
-            
-            // Define showProgressBar function early so it can be used by all functions
-            var showProgressBar = function() {
-                var modalInstance = $uibModal.open({
-                    templateUrl: 'app/modules/common/templates/progress.html',
-                    controller: 'showProgressCtrl',
-                    controllerAs: 'progress',
-                    backdrop: false
-                });
-                return modalInstance;
-            };
-            
-            // Get relay status on initialization
-            sysResourceService
-                .get_relay_status()
-                .then(function(res) {
-                    if (res && res.status === 200 && res.data[0]) {
-                        avxViewModel.relay.enable = res.data[1].status || false;
-                    }
-                })
-                .catch(function() {
-                    avxViewModel.relay.enable = false;
-                });
-            
-            avxViewModel.refreshRelayList = function() {
-                showProgressBar();
-                sysResourceService
-                    .get_relay_server_list()
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res && res.status === 200) {
-                            avxViewModel.relay_data = res.data || [];
-                        }
-                    })
-                    .catch(function() {
-                        $rootScope.$broadcast('endLoading', true);
-                        alert("Failed to load relay server list.");
-                    });
-            };
-            
-            avxViewModel.showRelayAddModal = function() {
-                var modalInstance = $uibModal.open({
-                    templateUrl: 'app/modules/system/submenu/sys_mgmt/email/relay-add.html',
-                    controller: 'relayAddCtrl',
-                    controllerAs: 'relayAdd'
-                });
-                modalInstance.result.then(function(){
-                    avxViewModel.refreshRelayList();
-                });
-            };
-            
-            avxViewModel.deleteRelay = function(row) {
-                var reminder = $filter('T')('Are you sure you want to delete the relay server for hostname') + ' [' + row.host_name + ']?';
-                var action_reminder = confirm(reminder);
-                
-                if (!action_reminder) {
-                    return;
-                }
-                
-                showProgressBar();
-                sysResourceService
-                    .delete_relay_server(row.host_name)
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res && res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                            } else {
-                                avxViewModel.refreshRelayList();
-                            }
-                        } else {
-                            alert("Internal error.");
-                        }
-                    })
-                    .catch(function() {
-                        $rootScope.$broadcast('endLoading', true);
-                        alert("Failed to delete relay server.");
-                    });
-            };
-            
-            avxViewModel.clearAllRelayServers = function() {
-                var reminder = $filter('T')('Are you sure you want to clear the relay server configuration?');
-                var action_reminder = confirm(reminder);
-                
-                if (!action_reminder) {
-                    return;
-                }
-                
-                showProgressBar();
-                sysResourceService
-                    .clear_relay_server()
-                    .then(function(res) {
-                        if (res && res.status === 200) {
-                            if (!res.data[0]) {
-                                $rootScope.$broadcast('endLoading', true);
-                                alert(res.data[1]);
-                            } else {
-                                sysResourceService
-                                    .get_relay_server_list()
-                                    .then(function(listRes) {
-                                        if (listRes && listRes.status === 200) {
-                                            avxViewModel.relay_data = listRes.data || [];
-                                        }
-                                        return sysResourceService.get_relay_status();
-                                    })
-                                    .then(function(statusRes) {
-                                        $rootScope.$broadcast('endLoading', true);
-                                        if (statusRes && statusRes.status === 200 && statusRes.data[0]) {
-                                            avxViewModel.relay.enable = statusRes.data[1].status || false;
-                                        }
-                                    })
-                                    .catch(function() {
-                                        $rootScope.$broadcast('endLoading', true);
-                                        alert("Failed to refresh relay status.");
-                                    });
-                            }
-                        } else {
-                            $rootScope.$broadcast('endLoading', true);
-                            alert("Internal error.");
-                        }
-                    })
-                    .catch(function() {
-                        $rootScope.$broadcast('endLoading', true);
-                        alert("Failed to clear relay servers.");
-                    });
-            };
-            
-            avxViewModel.toggleRelayEnable = function() {
-                // Check if relay_data has items before enabling
-                if (avxViewModel.relay.enable && (!avxViewModel.relay_data || avxViewModel.relay_data.length === 0)) {
-                    avxViewModel.relay.enable = false;
-                    alert($filter('T')('Please complete all required relay server settings before enabling this configuration.'));
-                    return;
-                }
-                
-                showProgressBar();
-                sysResourceService
-                    .update_relay_status(avxViewModel.relay.enable)
-                    .then(function(res) {
-                        if (res && res.status === 200 && res.data[0]) {
-                            // Refresh status after successful update
-                            sysResourceService
-                                .get_relay_status()
-                                .then(function(statusRes) {
-                                    $rootScope.$broadcast('endLoading', true);
-                                    if (statusRes && statusRes.status === 200 && statusRes.data[0]) {
-                                        avxViewModel.relay.enable = statusRes.data[1].status || false;
-                                    }
-                                })
-                                .catch(function() {
-                                    $rootScope.$broadcast('endLoading', true);
-                                    alert("Error occurred while getting relay status.");
-                                });
-                        } else {
-                            $rootScope.$broadcast('endLoading', true);
-                            alert("Failed to update relay status: " + (res.data[1] || ""));
-                            // Revert the switch state on failure
-                            avxViewModel.relay.enable = !avxViewModel.relay.enable;
-                        }
-                    })
-                    .catch(function() {
-                        $rootScope.$broadcast('endLoading', true);
-                        alert("Error occurred while updating relay status.");
-                        // Revert the switch state on error
-                        avxViewModel.relay.enable = !avxViewModel.relay.enable;
-                    });
-            };
-            
-            avxViewModel.validateExternalServer = function() {
-                if (avxViewModel.externalServer.enable) {
-                    var emailServer = avxViewModel.externalServer.email_server;
-                    var serverPort = avxViewModel.externalServer.server_port;
-                    
-                    var isEmailServerEmpty = !emailServer || emailServer.trim() === '';
-                    var isServerPortEmpty = !serverPort || serverPort === '';
-                    
-                    if (isEmailServerEmpty || isServerPortEmpty) {
-                        alert($filter('T')('Please complete all required external Email server settings before enabling this configuration.'));
-                        avxViewModel.externalServer.enable = false;
-                        return false;
-                    }
-                    
-                    showProgressBar();
-                    sysResourceService
-                        .update_external_mail_server_status(true)
-                        .then(function(res) {
-                            $rootScope.$broadcast('endLoading', true);
-                            if (res && res.status === 200) {
-                                if (!res.data[0]) {
-                                    alert(res.data[1]);
-                                    avxViewModel.externalServer.enable = false;
-                                }
-                            } else {
-                                alert("Internal error.");
-                                avxViewModel.externalServer.enable = false;
-                            }
-                        });
-                } else {
-                    showProgressBar();
-                    sysResourceService
-                        .update_external_mail_server_status(false)
-                        .then(function(res) {
-                            $rootScope.$broadcast('endLoading', true);
-                            if (res && res.status === 200) {
-                                if (!res.data[0]) {
-                                    alert(res.data[1]);
-                                }
-                            } else {
-                                alert("Internal error.");
-                            }
-                        });
-                }
-            };
-            
             function get_info(cb) {
                 sysResourceService
                     .get_email()
                     .then(function(res) {
                         if (res && res.status === 200) {
-                            var fromString = res.data.from_string || '';
-                            if (fromString && fromString.match(/^%/)) {
-                                avxViewModel.emailPlaceholder = fromString;
-                                avxViewModel.email.from_string = '';
-                                avxViewModel.originalFromString = '';
-                            } else {
-                                avxViewModel.email.from_string = fromString;
-                                avxViewModel.emailPlaceholder = '';
-                                avxViewModel.originalFromString = fromString;
-                            }
-                        }
-                        if(cb) {
-                            cb();
-                        }
-                });
-            }
-            function get_alert_info(cb) {
-                sysResourceService
-                    .get_alert_mail()
-                    .then(function(res) {
-                        if (res && res.status === 200) {
-                            var hostString = res.data.host_string || '';
-                            if (hostString && hostString.match(/^%/)) {
-                                avxViewModel.alertHostnamePlaceholder = hostString;
-                                avxViewModel.alert.hostname = '';
-                            } else {
-                                avxViewModel.alert.hostname = hostString;
-                                avxViewModel.alertHostnamePlaceholder = '';
-                            }
-                            avxViewModel.alert.send_alert = res.data.is_send_alert_msg === true ? true : false;
+                            avxViewModel.email = res.data;
                         }
                         if(cb) {
                             cb();
@@ -345,233 +22,6 @@
                 });
             }
             get_info();
-            get_alert_info();
-            
-            function get_external_mail_info(cb) {
-                sysResourceService
-                    .get_external_mail_server()
-                    .then(function(res) {
-                        if (res && res.status === 200) {
-                            avxViewModel.externalServer.enable = res.data.status || false;
-                            avxViewModel.externalServer.email_server = res.data.server_address || '';
-                            avxViewModel.externalServer.server_port = res.data.server_port || 25;
-                            avxViewModel.externalServer.use_ssl_tls = res.data.is_ssl || false;
-                        }
-                        if(cb) {
-                            cb();
-                        }
-                });
-            }
-            get_external_mail_info();
-            
-            function get_external_sender_info(cb) {
-                sysResourceService
-                    .get_external_sender_mail()
-                    .then(function(res) {
-                        if (res && res.status === 200) {
-                            avxViewModel.externalSender.email = res.data.email || '';
-                            avxViewModel.externalSender.password = res.data.password || '';
-                        }
-                        if(cb) {
-                            cb();
-                        }
-                });
-            }
-            get_external_sender_info();
-            avxViewModel.refreshRelayList();
-            
-            avxViewModel.saveEmail = function(from) {
-                showProgressBar();
-                sysResourceService
-                    .update_email(avxViewModel.email.from_string || "")
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        
-                        if (res&&res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                                from.$dirty=true;
-                            } else {
-                                from.$dirty=false;
-                                avxViewModel.originalFromString = avxViewModel.email.from_string;
-                            }
-                        } else {
-                            alert("Internal error.");
-                            from.$dirty=true;
-                        }
-                    })
-                    .catch(function(error) {
-                        $rootScope.$broadcast('endLoading', true);
-                        alert("Internal error.");
-                        from.$dirty=true;
-                    });
-            };
-            avxViewModel.saveAlert = function(form) {
-                showProgressBar();
-                var post_data = {
-                    host_string: avxViewModel.alert.hostname || "",
-                    is_send_alert_msg: avxViewModel.alert.send_alert || false
-                };
-                sysResourceService
-                    .update_alert_mail(post_data)
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res&&res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                                form.$dirty=true;
-                            } else {
-                                form.$dirty=false;
-                            }
-                        } else {
-                            alert("Internal error.");
-                            form.$dirty=true;
-                        }
-                });
-            };
-            avxViewModel.saveExternalMailServer = function(form) {
-                showProgressBar();
-                var post_data = {
-                    status: avxViewModel.externalServer.enable || false,
-                    server_address: avxViewModel.externalServer.email_server || "",
-                    server_port: avxViewModel.externalServer.server_port || 25,
-                    is_ssl: avxViewModel.externalServer.use_ssl_tls || false
-                };
-                sysResourceService
-                    .update_external_mail_server(post_data)
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res&&res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                                form.$dirty=true;
-                            } else {
-                                form.$dirty=false;
-                                // Refresh external mail server data after successful save
-                                get_external_mail_info();
-                            }
-                        } else {
-                            alert("Internal error.");
-                            form.$dirty=true;
-                        }
-                });
-            };
-            avxViewModel.deleteExternalMailServer = function() {
-                var reminder = $filter('T')('Are you sure you want to delete the external email server?');
-                var action_reminder = confirm(reminder);
-                
-                if (!action_reminder) {
-                    return;
-                }
-                
-                showProgressBar();
-                sysResourceService
-                    .delete_external_mail_server()
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res && res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                            } else {
-                                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
-                            }
-                        } else {
-                            alert("Internal error.");
-                        }
-                });
-            };
-            avxViewModel.saveExternalSender = function(form) {
-                showProgressBar();
-                var post_data = {
-                    email: avxViewModel.externalSender.email || "",
-                    password: avxViewModel.externalSender.password || ""
-                };
-                sysResourceService
-                    .update_external_sender_mail(post_data)
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res&&res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                                form.$dirty=true;
-                            } else {
-                                form.$dirty=false;
-                            }
-                        } else {
-                            alert("Internal error.");
-                            form.$dirty=true;
-                        }
-                });
-            };
-            avxViewModel.deleteExternalSender = function() {
-                var reminder = $filter('T')('Are you sure you want to delete the Email?');
-                var action_reminder = confirm(reminder);
-                
-                if (!action_reminder) {
-                    return;
-                }
-                
-                showProgressBar();
-                sysResourceService
-                    .delete_external_sender_mail()
-                    .then(function(res) {
-                        $rootScope.$broadcast('endLoading', true);
-                        if (res && res.status === 200) {
-                            if (!res.data[0]) {
-                                alert(res.data[1]);
-                            } else {
-                                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
-                            }
-                        } else {
-                            alert("Internal error.");
-                        }
-                });
-            };
-            avxViewModel.cancel = function() {
-                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
-            };
-        }
-    ])
-    .controller('relayAddCtrl', [
-        '$scope',
-        '$rootScope',
-        '$state',
-        '$uibModalInstance',
-        '$uibModal',
-        'sysResourceService',
-        function($scope, $rootScope, $state, $uibModalInstance, $uibModal, sysResourceService) {
-            var avxViewModel = this;
-            avxViewModel.data = {
-                host_name: '',
-                relay_server: ''
-            };
-            avxViewModel.loading = false;
-            
-            // Hostname validation function (same as main email controller)
-            avxViewModel.isValidHostname = function(hostname) {
-                if (!hostname) return true; // Empty is valid
-                
-                // IP address regex (IPv4)
-                var ipRegex = /^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$/;
-                
-                // FQDN regex
-                var fqdnRegex = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?$/;
-                
-                return ipRegex.test(hostname) || fqdnRegex.test(hostname);
-            };
-            
-            // Form validation function
-            avxViewModel.isFormInvalid = function(form, hostname, relayServer) {
-                return !hostname || // Required field check
-                       !relayServer || // Required field check
-                       hostname.length === 0 ||
-                       relayServer.length === 0 ||
-                       (hostname && hostname.length > 50) || 
-                       (relayServer && relayServer.length > 30) ||
-                       (hostname && !avxViewModel.isValidHostname(hostname)) ||
-                       (relayServer && !avxViewModel.isValidHostname(relayServer));
-            };
-            
             var showProgressBar = function() {
                 var modalInstance = $uibModal.open({
                     templateUrl: 'app/modules/common/templates/progress.html',
@@ -579,50 +29,34 @@
                     controllerAs: 'progress',
                     backdrop: false
                 });
-                return modalInstance;
             };
-            
-            avxViewModel.modalClose = function() {
-                $uibModalInstance.dismiss();
-            };
-            
-            avxViewModel.add = function(data) {
+            avxViewModel.saveEmail = function(email, from) {
                 showProgressBar();
-                avxViewModel.loading = true;
-                var post_data = {
-                    host_name: data.host_name || "",
-                    relay_server: data.relay_server || ""
-                };
+                var post_data=email;
+                if (email === undefined) {
+                    post_data="";
+                }
                 sysResourceService
-                    .add_relay_server(post_data)
+                    .update_email(post_data)
                     .then(function(res) {
                         $rootScope.$broadcast('endLoading', true);
-                        avxViewModel.loading = false;
-                        if (res && res.status === 200) {
+                        if (res&&res.status === 200) {
                             if (!res.data[0]) {
                                 alert(res.data[1]);
+                                from.$dirty=true;
                             } else {
-                                // Check for warnings even when API call succeeds
-                                if (res.data[2] && Array.isArray(res.data[2])) {
-                                    var warnings = res.data[2];
-                                    for (var i = 0; i < warnings.length; i++) {
-                                        if (warnings[i][0] === "warning") {
-                                            alert(warnings[i][1]);
-                                            return; // Don't close modal if there's a warning
-                                        }
-                                    }
+                                if (email === undefined) {
+                                    from.$dirty=false;
                                 }
-                                $uibModalInstance.close();
                             }
                         } else {
                             alert("Internal error.");
+                            from.$dirty=true;
                         }
-                    })
-                    .catch(function() {
-                        $rootScope.$broadcast('endLoading', true);
-                        avxViewModel.loading = false;
-                        alert("Failed to add relay server.");
-                    });
+                });
+            };
+            avxViewModel.cancel = function() {
+                $state.go('index.system.sys_mgmt.email', {}, {reload: true});
             };
         }
     ]);
\ No newline at end of file
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html	(revision 9231)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/submenu/sys_mgmt/email/email.html	(working copy)
@@ -1,211 +1,16 @@
 <div class="row">
-    <div class="col-md-12">
-        <rd-widget>
-            <rd-widget-header icon="fa fa-envelope" title="{{'System Email Sender Configuration'|T}}">
-            </rd-widget-header>
-            <rd-widget-body class="no-padding">
-                <form class="form-horizontal" name="sender" verify-scope="tipStyle: 1" unsaved-warning-form>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'From'|T}}</label>
-                        <div class="col-md-6">
-                            <input ng-verify="required:false, maxlength:64" type="email" name="from_string" class="form-control" placeholder="{{sys_email.emailPlaceholder}}" ng-model="sys_email.email.from_string" resettable>
-                            <p class="help-block" ng-show="sender.from_string.$error.email && (sender.from_string.$dirty || sender.$submitted)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please enter a valid email address'|T}}</p>
-                            <p class="help-block" ng-show="sys_email.email.from_string && sys_email.email.from_string.length > 64" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please do not exceed 64 characters'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group" ng-show="sys_email.email.from_string !== sys_email.originalFromString">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="submit" class="btn btn-primary" ng-click="sys_email.saveEmail(sys_email.email.from_string, sender)" ng-disabled="sys_email.isFormInvalid(sender, sys_email.email.from_string)">{{'Apply Changes'|T}}</button>
-                            <button type="reset" class="btn btn-default btn-cancel" ng-click="sys_email.email.from_string=sys_email.originalFromString">{{'Cancel'|T}}</button>
-                        </div>
-                    </div>
-                </form>
-            </rd-widget-body>
-        </rd-widget>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-md-12">
-        <rd-widget>
-            <rd-widget-header icon="fa fa-bell" title="{{'System Alert Mail Configuration'|T}}">
-            </rd-widget-header>
-            <rd-widget-body class="no-padding">
-                <form class="form-horizontal" name="alert" verify-scope="tipStyle: 1" unsaved-warning-form>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Hostname'|T}}</label>
-                        <div class="col-md-6">
-                            <input ng-verify="required:false, maxlength:128" type="text" name="hostname" class="form-control" placeholder="{{sys_email.alertHostnamePlaceholder}}" ng-model="sys_email.alert.hostname" resettable>
-                            <p class="help-block" ng-show="sys_email.alert.hostname && sys_email.alert.hostname.length > 128" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please do not exceed 128 characters'|T}}</p>
-                            <p class="help-block" ng-show="sys_email.alert.hostname && !sys_email.isValidHostname(sys_email.alert.hostname)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please enter a valid IP address or FQDN'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Send Alert Message'|T}}</label>
-                        <div class="col-md-6">
-                            <input bs-switch type="checkbox" name="send_alert" ng-model="sys_email.alert.send_alert" resettable switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
-                        </div>
-                    </div>
-                    <div class="form-group" ng-show="alert.$dirty">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="submit" class="btn btn-primary" ng-click="sys_email.saveAlert(alert)" ng-disabled="sys_email.isAlertFormInvalid(alert, sys_email.alert.hostname)">{{'Apply Changes'|T}}</button>
-                            <button type="reset" class="btn btn-default btn-cancel" ng-click="alert.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
-                        </div>
-                    </div>
-                </form>
-            </rd-widget-body>
-        </rd-widget>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-md-12">
-        <rd-widget>
-            <rd-widget-header icon="fa fa-envelope" title="{{'External SNMP Mail Server Configuration'|T}}">
-            </rd-widget-header>
-            <rd-widget-body class="no-padding">
-                <div class="form-horizontal">
-                    <div class="form-group">
-                        <div class="col-md-12 text-center">
-                            <input bs-switch type="checkbox" name="external_server_enable" ng-model="sys_email.externalServer.enable" ng-change="sys_email.validateExternalServer()" switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
-                        </div>
-                    </div>
-                </div>
-                <form class="form-horizontal" name="externalServer" verify-scope="tipStyle: 1" unsaved-warning-form>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'External Email Server'|T}}</label>
-                        <div class="col-md-6">
-                            <input type="text" name="email_server" class="form-control" placeholder="" ng-model="sys_email.externalServer.email_server" ng-verify="required:true, minlength:1, maxlength:64, pattern:'^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)*[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)$'" resettable>
-                            <p class="help-block" ng-show="sys_email.externalServer.email_server && sys_email.externalServer.email_server.length > 64" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please do not exceed 64 characters'|T}}</p>
-                            <p class="help-block" ng-show="sys_email.externalServer.email_server && !sys_email.isValidHostname(sys_email.externalServer.email_server)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please enter a valid IP address or hostname'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Server Port'|T}}</label>
-                        <div class="col-md-6">
-                            <input type="number" name="server_port" class="form-control" placeholder="25" ng-model="sys_email.externalServer.server_port" resettable>
-                            <p class="help-block" ng-show="sys_email.externalServer.server_port !== null && sys_email.externalServer.server_port !== undefined && sys_email.externalServer.server_port !== '' && (sys_email.externalServer.server_port > 65535 || sys_email.externalServer.server_port < 0)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please enter a valid port number (0-65535)'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Use SSL/TLS'|T}}</label>
-                        <div class="col-md-6">
-                            <input bs-switch type="checkbox" name="use_ssl_tls" ng-model="sys_email.externalServer.use_ssl_tls" resettable switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="button" class="btn btn-danger" ng-click="sys_email.deleteExternalMailServer()">{{'Delete'|T}}</button>
-                        </div>
-                    </div>
-                    <div class="form-group" ng-show="externalServer.$dirty">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="submit" class="btn btn-primary" ng-click="sys_email.saveExternalMailServer(externalServer)" ng-disabled="sys_email.isExternalServerFormInvalid(externalServer, sys_email.externalServer.email_server)">{{'Apply Changes'|T}}</button>
-                            <button type="reset" class="btn btn-default btn-cancel" ng-click="externalServer.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
-                        </div>
-                    </div>
-                </form>
-            </rd-widget-body>
-        </rd-widget>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-md-12">
-        <rd-widget>
-            <rd-widget-header icon="fa fa-user" title="{{'External SNMP Sender Mail Configuration'|T}}">
-            </rd-widget-header>
-            <rd-widget-body class="no-padding">
-                <form class="form-horizontal" name="externalSender" verify-scope="tipStyle: 1" unsaved-warning-form>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Email'|T}}</label>
-                        <div class="col-md-6">
-                            <input type="email" name="external_sender_email" class="form-control" placeholder="" ng-model="sys_email.externalSender.email" ng-verify="required:true, minlength:1, maxlength:32" resettable>
-                            <p class="help-block" ng-show="externalSender.external_sender_email.$error.email && (externalSender.external_sender_email.$dirty || externalSender.$submitted)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please enter a valid email address'|T}}</p>
-                            <p class="help-block" ng-show="sys_email.externalSender.email && sys_email.externalSender.email.length > 32" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please do not exceed 32 characters'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label class="col-md-3 control-label">{{'Password'|T}}</label>
-                        <div class="col-md-6">
-                            <div class="input-group">
-                                <input type="{{sys_email.showPassword ? 'text' : 'password'}}" name="external_sender_password" class="form-control" placeholder="" ng-model="sys_email.externalSender.password" ng-verify="required:true, minlength:1, maxlength:64" resettable>
-                                <span class="input-group-btn" ng-show="!sys_email.externalSender.password || !sys_email.externalSender.password.match(/^\*+$/)">
-                                    <button class="btn btn-default" type="button" ng-click="sys_email.showPassword = !sys_email.showPassword" title="{{sys_email.showPassword ? 'Hide Password' : 'Show Password'}}">
-                                        <i class="fa" ng-class="sys_email.showPassword ? 'fa-eye-slash' : 'fa-eye'"></i>
-                                    </button>
-                                </span>
-                            </div>
-                            <p class="help-block" ng-show="!sys_email.externalSender.password && (externalSender.external_sender_password.$dirty || externalSender.external_sender_password.$touched || externalSender.$submitted)" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Password is required'|T}}</p>
-                            <p class="help-block" ng-show="sys_email.externalSender.password && sys_email.externalSender.password.length > 64" style="font-size:12px; margin-top:5px; color:#d9534f;">{{'Please do not exceed 64 characters'|T}}</p>
-                        </div>
-                    </div>
-                    <div class="form-group" ng-show="externalSender.$dirty">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="submit" class="btn btn-primary" ng-click="sys_email.saveExternalSender(externalSender)" ng-disabled="sys_email.isExternalSenderFormInvalid(externalSender, sys_email.externalSender.email)">{{'Apply Changes'|T}}</button>
-                            <button type="reset" class="btn btn-default btn-cancel" ng-click="externalSender.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <div class="col-md-offset-3 col-md-9">
-                            <button type="button" class="btn btn-danger" ng-click="sys_email.deleteExternalSender()">{{'Delete'|T}}</button>
-                        </div>
-                    </div>
-                </form>
-            </rd-widget-body>
-        </rd-widget>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-md-12">
-        <rd-widget>
-            <rd-widget-header icon="fa fa-server" title="{{'Relay Server Configuration'|T}}">
-            </rd-widget-header>
-            <rd-widget-body class="no-padding">
-                <div class="form-horizontal">
-                    <div class="form-group">
-                        <div class="col-md-12 text-center">
-                            <input bs-switch type="checkbox" name="relay_enable" ng-model="sys_email.relay.enable" ng-change="sys_email.toggleRelayEnable()" switch-on-text="{{onLabel}}" switch-off-text="{{offLabel}}"/>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-toolbar">
-                    <div class="">
-                        <div class="btn-group">
-                            <button class="btn btn-link" title="{{'Add'|T}}" ng-click="sys_email.showRelayAddModal()"><i class="fa fa-plus-circle"></i></button>
-                            <button class="btn btn-link" title="{{'Clear All'|T}}" ng-click="sys_email.clearAllRelayServers()"><i class="fa fa-times-circle"></i></button>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-container" st-table="displayedRelayCollection" st-safe-src="sys_email.relay_data">
-                    <div class="table-responsive table-content">
-                        <table class="table table-striped table-hover">
-                            <thead>
-                                <tr>
-                                    <th st-sort="host_name">{{'Hostname'|T}}</th>
-                                    <th st-sort="relay_server">{{'Relay Server'|T}}</th>
-                                    <th>{{'Action'|T}}</th>
-                                </tr>
-                            </thead>
-                            <tbody ng-show="sys_email.relay_data.length">
-                                <tr ng-repeat="row in displayedRelayCollection">
-                                    <td>{{row.host_name}}</td>
-                                    <td>{{row.relay_server}}</td>
-                                    <td>
-                                        <a title="{{'Delete'|T}}" class="fa fa-times-circle" href="" ng-click="sys_email.deleteRelay(row)"><span style="margin-left: 8px; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;"></span></a>
-                                    </td>
-                                </tr>
-                            </tbody>
-                        </table>
-                    </div>
-                    <div style="margin-bottom: 15px;text-align: center" ng-hide="sys_email.relay_data"><img src="app/images/loading.gif"></div>
-                    <div class="table-pagination">
-                        <div class="pagination-detail"></div>
-                        <div class="pagination" st-pagination="" st-items-by-page="10"></div>
-                    </div>
-                </div>
-            </rd-widget-body>
-        </rd-widget>
-    </div>
+    <form class="form-horizontal" name="general" verify-scope="tipStyle: 1" unsaved-warning-form>
+        <div class="form-group">
+            <label class="col-md-3 control-label">{{'Email'|T}}</label>
+            <div class="col-md-6">
+                <input ng-verify="required:false" type="email" name="from_string" class="form-control" placeholder="" required ng-model="sys_email.email.from_string" resettable>
+            </div>
+        </div>
+        <div class="form-group" ng-show="general.$dirty">
+            <div class="col-md-offset-3 col-md-9">
+                <button type="submit" ng-verify="control:'general'" class="btn btn-primary" ng-click="sys_email.saveEmail(sys_email.email.from_string, general)">{{'Apply Changes'|T}}</button>
+                <button type="reset" class="btn btn-default btn-cancel" ng-click="general.$dirty=false;sys_email.cancel()">{{'Cancel'|T}}</button>
+            </div>
+        </div>
+    </form>
 </div>
\ No newline at end of file
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(revision 9231)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/app/modules/system/system.service.js	(working copy)
@@ -28,21 +28,6 @@
                 system_reboot: system_reboot,
                 get_email: get_email,
                 update_email: update_email,
-                get_alert_mail: get_alert_mail,
-                update_alert_mail: update_alert_mail,
-                get_external_mail_server: get_external_mail_server,
-                update_external_mail_server: update_external_mail_server,
-                update_external_mail_server_status: update_external_mail_server_status,
-                delete_external_mail_server: delete_external_mail_server,
-                get_external_sender_mail: get_external_sender_mail,
-                update_external_sender_mail: update_external_sender_mail,
-                delete_external_sender_mail: delete_external_sender_mail,
-                get_relay_server_list: get_relay_server_list,
-                add_relay_server: add_relay_server,
-                delete_relay_server: delete_relay_server,
-                clear_relay_server: clear_relay_server,
-                get_relay_status: get_relay_status,
-                update_relay_status: update_relay_status,
                 get_config_running: get_config_running,
                 get_config_startup: get_config_startup,
                 get_config_tech: get_config_tech,
@@ -181,7 +166,7 @@
                 return apiService.post(url, post_data);
             }
             function get_user() {
-                return apiService.get('/api/avx/system/user_mgmt/Administrator/_get_list_data?key=' + JSON.stringify(['username', 'level', 'passwords']) + '&no_rest=' + JSON.stringify(true));
+                return apiService.get('/api/avx/system/user_mgmt/Administrator/_get_list_data');
             }
             function add_user(data) {
                 var url = '/api/avx/system/user_mgmt/Administrator/_add';
@@ -245,78 +230,6 @@
                 var post_data = {"post_data": JSON.stringify({"from_string":email})};
                 return apiService.post(url, post_data);
             }
-            function get_alert_mail() {
-                return apiService.get('/api/avx/system/system_mgmt/AlertMail/_fields');
-            }
-            function update_alert_mail(data) {
-                var url = '/api/avx/system/system_mgmt/AlertMail/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function get_external_mail_server() {
-                return apiService.get('/api/avx/system/system_mgmt/ExternalMailServer/_fields');
-            }
-            function update_external_mail_server(data) {
-                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function update_external_mail_server_status(value) {
-                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_perform?action=UpdateStatus';
-                var post_data = {
-                    "action": "UpdateStatus",
-                    "options": JSON.stringify({"__pk_list":[], "value": value})
-                };
-                return apiService.post(url, post_data);
-            }
-            function delete_external_mail_server() {
-                var url = '/api/avx/system/system_mgmt/ExternalMailServer/_perform?action=DeleteServer&options=%7B%22__pk_list%22%3A%5B%5D%7D';
-                return apiService.post(url, {});
-            }
-            function get_external_sender_mail() {
-                return apiService.get('/api/avx/system/system_mgmt/ExternalSenderMail/_fields');
-            }
-            function update_external_sender_mail(data) {
-                var url = '/api/avx/system/system_mgmt/ExternalSenderMail/_update';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function delete_external_sender_mail() {
-                var url = '/api/avx/system/system_mgmt/ExternalSenderMail/_perform?action=DeleteEmail&options=%7B%22__pk_list%22%3A%5B%5D%7D';
-                return apiService.post(url, {});
-            }
-            function get_relay_server_list() {
-                return apiService.get('/api/avx/system/system_mgmt/RelayServer/_get_list_data');
-            }
-            function add_relay_server(data) {
-                var url = '/api/avx/system/system_mgmt/RelayServer/_add';
-                var post_data = {"post_data": JSON.stringify(data)};
-                return apiService.post(url, post_data);
-            }
-            function delete_relay_server(hostname) {
-                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=DeleteHost';
-                var post_data = {
-                    "action": "DeleteHost",
-                    "options": JSON.stringify({"__pk_list":[], "hostname": hostname})
-                };
-                return apiService.post(url, post_data);
-            }
-            function clear_relay_server() {
-                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=ClearServer&options=%7B%22__pk_list%22%3A%5B%5D%7D';
-                return apiService.post(url, {});
-            }
-            function get_relay_status() {
-                var url = '/api/avx/system/system_mgmt/RelayServer/_perform?action=GetStatus&options=%7B%22__pk_list%22%3A%5B%5D%7D';
-                return apiService.post(url, {});
-            }
-            function update_relay_status(value) {
-                var url = '/api/avx/system/system_mgmt/RelayServer/_perform';
-                var post_data = {
-                    "action": "UpdateStatus",
-                    "options": JSON.stringify({"__pk_list":[], "value": value})
-                };
-                return apiService.post(url, post_data);
-            }
             function get_config_running() {
                 return apiService.get('/api/avx/system/config_mgmt/ViewConfig/_fields?fields=[%22running_config%22]');
             }
Index: /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/index.html
===================================================================
--- /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/index.html	(revision 9231)
+++ /branches/rel_avx_2_7_5/src/webui/webui/htdocs/new/src/client/index.html	(working copy)
@@ -16,6 +16,6 @@
     </head>
     <body ng-controller="avxCtrl">
         <div ui-view></div>
-        <script src="app/scripts/avx.built.fcd117a5.js"></script>
+        <script src="app/scripts/avx.built.64ac8d7c.js"></script>
     </body>
 </html>
