You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by se...@apache.org on 2013/07/18 18:35:00 UTC

[25/39] Format JS

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/ad69bc8d/ui/scripts/network.js
----------------------------------------------------------------------
diff --git a/ui/scripts/network.js b/ui/scripts/network.js
index 95a93bc..15d4b7f 100755
--- a/ui/scripts/network.js
+++ b/ui/scripts/network.js
@@ -16,2782 +16,3010 @@
 // under the License.
 
 (function(cloudStack, $) {
-  var ingressEgressDataMap = function(elem) {
-    var elemData = {
-      id: elem.ruleid,
-      protocol: elem.protocol,
-      startport: elem.startport,
-      endport: elem.endport,
-      cidr: elem.cidr ? elem.cidr : ''.concat(elem.account, ' - ', elem.securitygroupname)
+    var ingressEgressDataMap = function(elem) {
+        var elemData = {
+            id: elem.ruleid,
+            protocol: elem.protocol,
+            startport: elem.startport,
+            endport: elem.endport,
+            cidr: elem.cidr ? elem.cidr : ''.concat(elem.account, ' - ', elem.securitygroupname)
+        };
+
+        if (elemData.startport == 0 && elemData.endport) {
+            elemData.startport = '0';
+        } else if (elem.icmptype && elem.icmpcode) {
+            elemData.startport = elem.icmptype;
+            elemData.endport = elem.icmpcode;
+        }
+
+        return elemData;
     };
 
-    if (elemData.startport == 0 && elemData.endport) {
-      elemData.startport = '0';
-    } else if (elem.icmptype && elem.icmpcode) {
-      elemData.startport = elem.icmptype;
-      elemData.endport = elem.icmpcode;
-    }
+    var instanceSecondaryIPSubselect = function(args) {
+        var instance = args.context.instances[0];
+        var network = args.context.networks[0];
+        var nic = $.grep(instance.nic, function(nic) {
+            return nic.networkid == network.id;
+        })[0];
 
-    return elemData;
-  };
-
-  var instanceSecondaryIPSubselect = function(args) {
-    var instance = args.context.instances[0];
-    var network = args.context.networks[0];
-    var nic = $.grep(instance.nic, function(nic) {
-      return nic.networkid == network.id;
-    })[0];
-
-    // Get NIC IPs
-    $.ajax({
-      url: createURL('listNics'),
-      data: {
-        virtualmachineid: instance.id,
-        nicId: nic.id
-      },
-      success: function(json) {
-        var nic = json.listnicsresponse.nic[0];
-        var ips = nic.secondaryip ? nic.secondaryip : [];
-        var ipSelection = [];
-
-        // Add primary IP as default
-        ipSelection.push({ id: -1, description: nic.ipaddress + ' (Primary)' });
-
-        // Add secondary IPs
-        $(ips).map(function(index, ip) {
-          ipSelection.push({
-            id: ip.ipaddress,
-            description: ip.ipaddress
-          });
-        }); 
-
-
-        args.response.success({
-          data: ipSelection
-        });
-      }
-    })
-  };
-  
-  var ipChangeNotice = function() {
-    cloudStack.dialog.confirm({
-      message: 'message.ip.address.changed',
-      action: function() {
-        $('#browser .container').cloudBrowser('selectPanel', {
-          panel: $('#browser .panel:last').prev(),
-          complete: function() {
-            $(window).trigger('cloudStack.fullRefresh');
-          }
+        // Get NIC IPs
+        $.ajax({
+            url: createURL('listNics'),
+            data: {
+                virtualmachineid: instance.id,
+                nicId: nic.id
+            },
+            success: function(json) {
+                var nic = json.listnicsresponse.nic[0];
+                var ips = nic.secondaryip ? nic.secondaryip : [];
+                var ipSelection = [];
+
+                // Add primary IP as default
+                ipSelection.push({
+                    id: -1,
+                    description: nic.ipaddress + ' (Primary)'
+                });
+
+                // Add secondary IPs
+                $(ips).map(function(index, ip) {
+                    ipSelection.push({
+                        id: ip.ipaddress,
+                        description: ip.ipaddress
+                    });
+                });
+
+
+                args.response.success({
+                    data: ipSelection
+                });
+            }
+        })
+    };
+
+    var ipChangeNotice = function() {
+        cloudStack.dialog.confirm({
+            message: 'message.ip.address.changed',
+            action: function() {
+                $('#browser .container').cloudBrowser('selectPanel', {
+                    panel: $('#browser .panel:last').prev(),
+                    complete: function() {
+                        $(window).trigger('cloudStack.fullRefresh');
+                    }
+                });
+            }
         });
-      }
-    });
-  };
-
-  var zoneObjs = [];
-
-  var actionFilters = {
-    ipAddress: function(args) {
-      var allowedActions = args.context.actions;
-      var disallowedActions = [];
-      var item = args.context.item;
-      var status = item.state;
-
-      if (status == 'Destroyed' ||
-          status == 'Releasing' ||
-          status == 'Released' ||
-          status == 'Creating' ||
-          status == 'Allocating' ||
-          item.account == 'system' ||
-          item.issystem == true ) {
-            return [];
-          }
-
-      if(item.networkOfferingConserveMode == false) {
-        /*
+    };
+
+    var zoneObjs = [];
+
+    var actionFilters = {
+        ipAddress: function(args) {
+            var allowedActions = args.context.actions;
+            var disallowedActions = [];
+            var item = args.context.item;
+            var status = item.state;
+
+            if (status == 'Destroyed' ||
+                status == 'Releasing' ||
+                status == 'Released' ||
+                status == 'Creating' ||
+                status == 'Allocating' ||
+                item.account == 'system' ||
+                item.issystem == true) {
+                return [];
+            }
+
+            if (item.networkOfferingConserveMode == false) {
+                /*
          (1) If IP is SourceNat, no StaticNat/VPN/PortForwarding/LoadBalancer can be enabled/added.
          */
-        if (item.issourcenat == true){
-          disallowedActions.push('enableStaticNAT');
-          disallowedActions.push('enableVPN');
-        }
+                if (item.issourcenat == true) {
+                    disallowedActions.push('enableStaticNAT');
+                    disallowedActions.push('enableVPN');
+                }
 
-        /*
+                /*
          (2) If IP is non-SourceNat, show StaticNat/VPN/PortForwarding/LoadBalancer at first.
          1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
          2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
          3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
          4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
          */
-        else { //item.issourcenat == false
-          if (item.isstaticnat) { //1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
-            disallowedActions.push('enableVPN');
-          }
-          if (item.vpnenabled) { //2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
-            disallowedActions.push('enableStaticNAT');
-          }
-
-          //3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
-          $.ajax({
-            url: createURL('listPortForwardingRules'),
-            data: {
-              ipaddressid: item.id,
-              listAll: true
-            },
-            dataType: 'json',
-            async: false,
-            success: function(json) {
-              var rules = json.listportforwardingrulesresponse.portforwardingrule;
-              if(rules != null && rules.length > 0) {
-                disallowedActions.push('enableVPN');
-                disallowedActions.push('enableStaticNAT');
-              }
-            }
-          });
+                else { //item.issourcenat == false
+                    if (item.isstaticnat) { //1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
+                        disallowedActions.push('enableVPN');
+                    }
+                    if (item.vpnenabled) { //2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
+                        disallowedActions.push('enableStaticNAT');
+                    }
 
-          //4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
-          $.ajax({
-            url: createURL('listLoadBalancerRules'),
-            data: {
-              publicipid: item.id,
-              listAll: true
-            },
-            dataType: 'json',
-            async: false,
-            success: function(json) {
-              var rules = json.listloadbalancerrulesresponse.loadbalancerrule;
-              if(rules != null && rules.length > 0) {
-                disallowedActions.push('enableVPN');
-                disallowedActions.push('enableStaticNAT');
-              }
+                    //3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
+                    $.ajax({
+                        url: createURL('listPortForwardingRules'),
+                        data: {
+                            ipaddressid: item.id,
+                            listAll: true
+                        },
+                        dataType: 'json',
+                        async: false,
+                        success: function(json) {
+                            var rules = json.listportforwardingrulesresponse.portforwardingrule;
+                            if (rules != null && rules.length > 0) {
+                                disallowedActions.push('enableVPN');
+                                disallowedActions.push('enableStaticNAT');
+                            }
+                        }
+                    });
+
+                    //4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
+                    $.ajax({
+                        url: createURL('listLoadBalancerRules'),
+                        data: {
+                            publicipid: item.id,
+                            listAll: true
+                        },
+                        dataType: 'json',
+                        async: false,
+                        success: function(json) {
+                            var rules = json.listloadbalancerrulesresponse.loadbalancerrule;
+                            if (rules != null && rules.length > 0) {
+                                disallowedActions.push('enableVPN');
+                                disallowedActions.push('enableStaticNAT');
+                            }
+                        }
+                    });
+                }
             }
-          });
-        }
-      }
-			if(item.networkOfferingConserveMode == false) {			 
-				/*
-				(1) If IP is SourceNat, no StaticNat/VPN/PortForwarding/LoadBalancer can be enabled/added. 
+            if (item.networkOfferingConserveMode == false) {
+                /*
+				(1) If IP is SourceNat, no StaticNat/VPN/PortForwarding/LoadBalancer can be enabled/added.
 				*/
-	      if (item.issourcenat == true){
-					disallowedActions.push('enableStaticNAT');
-					disallowedActions.push('enableVPN');
-				}			
-				
-				/*
+                if (item.issourcenat == true) {
+                    disallowedActions.push('enableStaticNAT');
+                    disallowedActions.push('enableVPN');
+                }
+
+                /*
 				(2) If IP is non-SourceNat, show StaticNat/VPN/PortForwarding/LoadBalancer at first.
 				1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
 				2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
 				3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
 				4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
 				*/
-				else { //item.issourcenat == false				   
-					if (item.isstaticnat) { //1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
-					  disallowedActions.push('enableVPN');
-					}
-					if (item.vpnenabled) { //2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
-					  disallowedActions.push('enableStaticNAT');
-					}
-								 
-					//3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
-					$.ajax({
-						url: createURL('listPortForwardingRules'),
-						data: {
-							ipaddressid: item.id,
-							listAll: true
-						},
-						dataType: 'json',
-						async: false,
-						success: function(json) {							
-							var rules = json.listportforwardingrulesresponse.portforwardingrule;
-							if(rules != null && rules.length > 0) {
-							  disallowedActions.push('enableVPN');
-								disallowedActions.push('enableStaticNAT'); 
-							}
-						}
-					});	
-										
-					//4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
-					$.ajax({
-						url: createURL('listLoadBalancerRules'),
-						data: {
-							publicipid: item.id,
-							listAll: true
-						},
-						dataType: 'json',
-						async: false,
-						success: function(json) {
-							var rules = json.listloadbalancerrulesresponse.loadbalancerrule;
-							if(rules != null && rules.length > 0) {
-							  disallowedActions.push('enableVPN');
-								disallowedActions.push('enableStaticNAT'); 
-							}
-						}
-					});		
-				}			  				
-			}			
-			
-      if (item.isstaticnat) {
-        disallowedActions.push('enableStaticNAT');
-      } else {
-        disallowedActions.push('disableStaticNAT');
-      }
-
-			if(item.networkOfferingHavingVpnService == true) {      
-        if (item.vpnenabled) {
-          disallowedActions.push('enableVPN');
-        } else {
-          disallowedActions.push('disableVPN');
-        }
-      } else { //item.networkOfferingHavingVpnService == false
-        disallowedActions.push('disableVPN');
-        disallowedActions.push('enableVPN');
-      }
-
-      if (item.issourcenat){
-        disallowedActions.push('enableStaticNAT');
-        disallowedActions.push('disableStaticNAT');
-        disallowedActions.push('remove');
-      }
-
-      allowedActions = $.grep(allowedActions, function(item) {
-        return $.inArray(item, disallowedActions) == -1;
-      });
-
-      return allowedActions;
-    },
-
-    securityGroups: function(args) {
-      var allowedActions = [];
-      var isSecurityGroupOwner = isAdmin() || isDomainAdmin() ||
-            args.context.item.account == args.context.users[0].account;
-
-      if (isSecurityGroupOwner &&
-          args.context.item.state != 'Destroyed' &&
-          args.context.item.name != 'default') {
-        allowedActions.push('remove');
-      }
-
-      return allowedActions;
-    }
-  };
-
-	var networkOfferingObjs = [];  	        
-  var advZoneObjs;
-  
-  cloudStack.sections.network = {
-    title: 'label.network',
-    id: 'network',
-    sectionSelect: {
-      preFilter: function(args) {
-        var sectionsToShow = ['networks'];
-
-        $.ajax({
-          url: createURL('listZones'),
-          data: {
-            networktype: 'Advanced'
-          },
-          async: false,
-          success: function(json) {            
-            advZoneObjs = json.listzonesresponse.zone;
-            if(advZoneObjs != null && advZoneObjs.length > 0) {
-              sectionsToShow.push('vpc');
-              sectionsToShow.push('vpnCustomerGateway');
-            }
-          }
-        });
-                           
-        $.ajax({
-          url: createURL('listNetworks', { ignoreProject: true }),
-          data: {
-            supportedServices: 'SecurityGroup',
-            listAll: true,
-            details: 'min'
-          },
-          async: false,
-          success: function(json) {
-            if(json.listnetworksresponse.network != null && json.listnetworksresponse.network.length > 0) {
-              sectionsToShow.push('securityGroups');
-            }
-          }
-        });
-       
-        return sectionsToShow;
-      },
-
-      label: 'label.select-view'
-    },
-    sections: {
-      networks: {
-        id: 'networks',
-        type: 'select',
-        title: 'label.guest.networks',
-        listView: {
-          actions: {
-            add: { 
-              label: 'Add Isolated Network',
-
-              preFilter: function(args) { 
-                if(advZoneObjs != null && advZoneObjs.length > 0) {
-                  for(var i = 0; i < advZoneObjs.length; i++) {
-                    if(advZoneObjs[i].securitygroupsenabled != true) { //'Add Isolated Guest Network with SourceNat' is only supported in Advanced SG-disabled zone 
-                      return true;
+                else { //item.issourcenat == false
+                    if (item.isstaticnat) { //1. Once StaticNat is enabled, hide VPN/PortForwarding/LoadBalancer.
+                        disallowedActions.push('enableVPN');
                     }
-                  }   
-                  return false;
-                }
-                else{
-                  return false;     
-                }  			
-              },
-
-              createForm: {
-                title: 'Add Isolated Guest Network with SourceNat',               
-                fields: {
-                  name: { label: 'label.name', validation: { required: true }, docID: 'helpGuestNetworkName' },
-                  displayText: { label: 'label.display.text', validation: { required: true }, docID: 'helpGuestNetworkDisplayText'},
-                  zoneId: {
-                    label: 'label.zone',
-                    validation: { required: true },
-                    docID: 'helpGuestNetworkZone',
-
-                    select: function(args) {
-                      $.ajax({
-                        url: createURL('listZones'),
-                        success: function(json) {
-                          var zones = $.grep(json.listzonesresponse.zone, function(zone) {
-                            return (zone.networktype == 'Advanced' && zone.securitygroupsenabled	!= true); //Isolated networks can only be created in Advanced SG-disabled zone (but not in Basic zone nor Advanced SG-enabled zone)
-                          });
-
-                          args.response.success({
-                            data: $.map(zones, function(zone) {
-                              return {
-                                id: zone.id,
-                                description: zone.name
-                              };
-                            })
-                          });
-                        }
-                      });
+                    if (item.vpnenabled) { //2. Once VPN is enabled, hide StaticNat/PortForwarding/LoadBalancer.
+                        disallowedActions.push('enableStaticNAT');
                     }
-                  },
-                  networkOfferingId: {
-                    label: 'label.network.offering',
-                    validation: { required: true },
-                    dependsOn: 'zoneId',
-                    docID: 'helpGuestNetworkNetworkOffering',
-                    select: function(args) {
-                      $.ajax({
-                        url: createURL('listVPCs'),
+
+                    //3. Once a PortForwarding rule is added, hide StaticNat/VPN/LoadBalancer.
+                    $.ajax({
+                        url: createURL('listPortForwardingRules'),
                         data: {
-                          listAll: true
+                            ipaddressid: item.id,
+                            listAll: true
                         },
+                        dataType: 'json',
+                        async: false,
                         success: function(json) {
-                          var items = json.listvpcsresponse.vpc;
-                          var baseUrl = 'listNetworkOfferings&zoneid=' + args.zoneId;
-                          var listUrl;
-                          var data = {
-                            guestiptype: 'Isolated',
-                            supportedServices: 'SourceNat',
-                            state: 'Enabled',
-                          };
-                          
-                          if(items != null && items.length > 0) 
-                            listUrl = baseUrl;
-                          else
-                            listUrl = baseUrl + '&forVpc=false';
-
-                          if (args.context.vpc) {
-                            data.forVpc = true;
-                          }
-                          
-                          $.ajax({
-                            url: createURL(listUrl),
-                            data: data,
-                            success: function(json) {
-                              networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
-                              args.$select.change(function() {
-                                var $vlan = args.$select.closest('form').find('[rel=vlan]');
-                                var networkOffering = $.grep(
-                                  networkOfferingObjs, function(netoffer) {
-                                    return netoffer.id == args.$select.val();
-                                  }
-                                )[0];
-
-                                if (networkOffering.specifyvlan) {
-                                  $vlan.css('display', 'inline-block');
-                                } else {
-                                  $vlan.hide();
-                                }
-                              });
-                              
-                              args.response.success({
-                                data: $.map(networkOfferingObjs, function(zone) {
-                                  return {
-                                    id: zone.id,
-                                    description: zone.name
-                                  };
-                                })
-                              });
+                            var rules = json.listportforwardingrulesresponse.portforwardingrule;
+                            if (rules != null && rules.length > 0) {
+                                disallowedActions.push('enableVPN');
+                                disallowedActions.push('enableStaticNAT');
                             }
-                          });                            
-                        }
-                      });
-                    }
-                  },
-
-                  vlan: {
-                    label: 'VLAN',
-                    validation: { required: true },
-                    isHidden: true
-                  },
-
-                  vpcid: {
-                    label: 'label.vpc',
-                    dependsOn: 'networkOfferingId',
-                    select: function(args) {
-                      var networkOfferingObj;
-                      var $form = args.$select.closest('form');
-                      var data = {
-                        listAll: true,
-												details: 'min'
-                      };
-
-                      if (args.context.vpc) {
-                        data.id = args.context.vpc[0].id;
-                      }
-                      
-                      $(networkOfferingObjs).each(function(key, value) {
-                        if(value.id == args.networkOfferingId) {
-                          networkOfferingObj = value;
-                          return false; //break each loop
                         }
-                      });
-                      
-                      if(networkOfferingObj.forvpc == true) {
-                        args.$select.closest('.form-item').css('display', 'inline-block');
-                        $.ajax({
-                          url: createURL('listVPCs'),
-                          data: data,
-                          success: function(json) {
-                            var items = json.listvpcsresponse.vpc;
-                            var data;
-                            if(items != null && items.length > 0) {
-                              data = $.map(items, function(item) {
-                                return {
-                                  id: item.id,
-                                  description: item.name
-                                }
-                              });
-                            }
-                            args.response.success({ data: data });
-                          }
-                        });
-                        $form.find('.form-item[rel=networkDomain]').hide();
-                      }
-                      else {
-                        args.$select.closest('.form-item').hide();
-                        $form.find('.form-item[rel=networkDomain]').show();
-                        args.response.success({ data: null });
-                      }
-                    }
-                  },
-
-                  guestGateway: { label: 'label.guest.gateway', docID: 'helpGuestNetworkGateway' },
-                  guestNetmask: { label: 'label.guest.netmask', docID: 'helpGuestNetworkNetmask' },
-                  networkDomain: { label: 'label.network.domain' }
-                }
-              },
-              action: function(args) {
-                var dataObj = {
-                  zoneId: args.data.zoneId,
-                  name: args.data.name,
-                  displayText: args.data.displayText,
-                  networkOfferingId: args.data.networkOfferingId
-                };		
-		
-                if(args.data.guestGateway != null && args.data.guestGateway.length > 0) {                  
-                  $.extend(dataObj, {
-                    gateway: args.data.guestGateway
-                  });
-                }								
-                if(args.data.guestNetmask != null && args.data.guestNetmask.length > 0) {                  
-                  $.extend(dataObj, {
-                    netmask: args.data.guestNetmask
-                  });									
-                }								
-                if(args.$form.find('.form-item[rel=vpcid]').css("display") != "none") {                 
-                  $.extend(dataObj, {
-                    vpcid: args.data.vpcid
-                  });
-                }
-
-                if (args.$form.find('.form-item[rel=vlan]').css('display') != 'none') {
-                  $.extend(dataObj, { vlan: args.data.vlan });
-                }
-
-                if(args.data.networkDomain != null && args.data.networkDomain.length > 0 && args.$form.find('.form-item[rel=vpcid]').css("display") == "none") {
-                  $.extend(dataObj, {
-                    networkDomain: args.data.networkDomain
-                  });                
-                }
-
-                $.ajax({
-                  url: createURL('createNetwork'),
-									data: dataObj,
-                  success: function(json) {
-                    args.response.success({
-                      data: json.createnetworkresponse.network
                     });
-                  },
-                  error: function(json) {
-                    args.response.error(parseXMLHttpResponse(json));
-                  }
-                });
-              },
-              messages: {
-                notification: function() { return 'Add Isolated Guest Network'; }
-              }
-            },
-            
-            rootAdminAddGuestNetwork: $.extend( {}, addGuestNetworkDialog.def, {isHeader: true} )
-            
-          },
-          id: 'networks',
-          fields: {
-            name: { label: 'label.name' },
-            account: { label: 'label.account' },            
-            type: { label: 'label.type' },            
-            cidr: { label: 'label.cidr' },
-            ip6cidr: { label: 'IPv6 CIDR' }
-          },
-          
-					advSearchFields: {					 
-						zoneid: { 
-						  label: 'Zone',							
-              select: function(args) {							  					
-								$.ajax({
-									url: createURL('listZones'),
-									data: {
-									  listAll: true
-									},
-									success: function(json) {									  
-										var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
-
-										args.response.success({
-											data: $.map(zones, function(zone) {
-												return {
-													id: zone.id,
-													description: zone.name
-												};
-											})
-										});
-									}
-								});
-							}						
-						},	
-            						
-						domainid: {					
-							label: 'Domain',					
-							select: function(args) {
-								if(isAdmin() || isDomainAdmin()) {
-									$.ajax({
-										url: createURL('listDomains'),
-										data: { 
-											listAll: true,
-											details: 'min'
-										},
-										success: function(json) {
-											var array1 = [{id: '', description: ''}];
-											var domains = json.listdomainsresponse.domain;
-											if(domains != null && domains.length > 0) {
-												for(var i = 0; i < domains.length; i++) {
-													array1.push({id: domains[i].id, description: domains[i].path});
-												}
-											}
-											args.response.success({
-												data: array1
-											});
-										}
-									});
-								}
-								else {
-									args.response.success({
-										data: null
-									});
-								}
-							},
-							isHidden: function(args) {
-								if(isAdmin() || isDomainAdmin())
-									return false;
-								else
-									return true;
-							}
-						},		
-						
-						account: { 
-							label: 'Account',
-							isHidden: function(args) {
-								if(isAdmin() || isDomainAdmin())
-									return false;
-								else
-									return true;
-							}			
-						},						
-						tagKey: { label: 'Tag Key' },
-						tagValue: { label: 'Tag Value' }						
-					},
-					
-					dataProvider: function(args) {
-            var data = {};
-						listViewDataProvider(args, data);		
-						
-            $.ajax({
-              url: createURL('listNetworks'),
-              data: data,			
-              async: false,
-              success: function(data) {
-                args.response.success({
-                  data: data.listnetworksresponse.network
-                });
-              },
-              error: function(data) {
-                args.response.error(parseXMLHttpResponse(data));
-              }
-            });
-          },
-
-          detailView: {
-            name: 'Guest network details',
-            viewAll: {
-              path: 'network.ipAddresses',
-              label: 'label.menu.ipaddresses',
-              preFilter: function(args) {
-                if (args.context.networks[0].state == 'Destroyed')
-                  return false;
-
-                return true;
-              }
-            },
-            actions: {
-              edit: {
-                label: 'label.edit',
-                messages: {
-                  notification: function(args) {
-                    return 'label.edit.network.details';
-                  }
-                },
-                action: function(args) {
-								  var data = {
-									  id: args.context.networks[0].id,		
-									  name: args.data.name,
-										displaytext: args.data.displaytext
-									};
-								  
-                  //args.data.networkdomain is null when networkdomain field is hidden
-                  if(args.data.networkdomain != null && args.data.networkdomain != args.context.networks[0].networkdomain) {
-									  $.extend(data, {
-										  networkdomain: args.data.networkdomain
-										});
-									} 
-                  
-                  var oldcidr;
-                  $.ajax({
-                    url: createURL("listNetworks&id=" + args.context.networks[0].id ),
-                    dataType: "json",
-                    async: false,
-                    success: function(json) {
-                      oldcidr = json.listnetworksresponse.network[0].cidr;
-                      
-                    }
-                  });
-
 
-                  if(args.data.cidr !="" && args.data.cidr != oldcidr ){
-                    $.extend(data, {
-                      guestvmcidr: args.data.cidr
-                    });
-                  }
-
-                  //args.data.networkofferingid is null when networkofferingid field is hidden
-                  if(args.data.networkofferingid != null && args.data.networkofferingid != args.context.networks[0].networkofferingid) {
-									  $.extend(data, {
-										  networkofferingid: args.data.networkofferingid
-										});
-
-                    if(args.context.networks[0].type == "Isolated") { //Isolated network
-                      cloudStack.dialog.confirm({
-                        message: 'Do you want to keep the current guest network CIDR unchanged?',
-                        action: function() { //"Yes"	button is clicked                          
-													$.extend(data, {
-													  changecidr: false
-													});
-													
-                          $.ajax({
-                            url: createURL('updateNetwork'),
-                            data: data,
-                            success: function(json) {
-                              var jid = json.updatenetworkresponse.jobid;
-                              args.response.success(
-                                {_custom:
-                                 {jobId: jid,
-                                  getUpdatedItem: function(json) {
-                                    var item = json.queryasyncjobresultresponse.jobresult.network;
-                                    return {data: item};
-                                  }
-                                 }
-                                }
-                              );
-                            }
-                          });
+                    //4. Once a LoadBalancer rule is added, hide StaticNat/VPN/PortForwarding.
+                    $.ajax({
+                        url: createURL('listLoadBalancerRules'),
+                        data: {
+                            publicipid: item.id,
+                            listAll: true
                         },
-                        cancelAction: function() { //"Cancel" button is clicked                         
-													$.extend(data, {
-													  changecidr: true
-													});
-													
-                          $.ajax({
-                            url: createURL('updateNetwork'),
-                            data: data,
-                            success: function(json) {
-                              var jid = json.updatenetworkresponse.jobid;
-                              args.response.success(
-                                {_custom:
-                                 {jobId: jid,
-                                  getUpdatedItem: function(json) {
-                                    var item = json.queryasyncjobresultresponse.jobresult.network;
-                                    return {data: item};
-                                  }
-                                 }
-                                }
-                              );
+                        dataType: 'json',
+                        async: false,
+                        success: function(json) {
+                            var rules = json.listloadbalancerrulesresponse.loadbalancerrule;
+                            if (rules != null && rules.length > 0) {
+                                disallowedActions.push('enableVPN');
+                                disallowedActions.push('enableStaticNAT');
                             }
-                          });
-                        }
-                      });
-                      return;
-                    }
-                  }
-
-                  $.ajax({
-                    url: createURL('updateNetwork'),
-                    data: data,
-                    success: function(json) {
-                      var jid = json.updatenetworkresponse.jobid;
-                      args.response.success(
-                        {_custom:
-                         {jobId: jid,
-                          getUpdatedItem: function(json) {
-                            var item = json.queryasyncjobresultresponse.jobresult.network;
-                            return {data: item};
-                          }
-                         }
-                        }
-                      );
-                    }
-                  });
-                },
-                notification: {
-                  poll: pollAsyncJobResult
-                }
-              },
-
-              'restart': {
-                label: 'label.restart.network',
-                createForm: {
-                  title: 'label.restart.network',
-                  desc: 'message.restart.network',
-                  preFilter: function(args) {									  
-										var zoneObj;
-										$.ajax({
-										  url: createURL("listZones&id=" + args.context.networks[0].zoneid),
-											dataType: "json",
-											async: false,
-											success: function(json){											  
-											  zoneObj = json.listzonesresponse.zone[0];												
-											}
-										});
-                                        args.$form.find('.form-item[rel=cleanup]').find('input').attr('checked', 'checked'); //checked
-                                        args.$form.find('.form-item[rel=cleanup]').css('display', 'inline-block'); //shown
-									},
-									fields: {
-                    cleanup: {
-                      label: 'label.clean.up',
-                      isBoolean: true
-                    }
-                  }
-                },
-                messages: {
-                  notification: function(args) {
-                    return 'label.restart.network';
-                  }
-                },
-                action: function(args) {
-                  var array1 = [];
-                  array1.push("&cleanup=" + (args.data.cleanup == "on"));
-                  $.ajax({
-                    url: createURL("restartNetwork&id=" + args.context.networks[0].id + array1.join("")),
-                    dataType: "json",
-                    async: true,
-                    success: function(json) {
-                      var jid = json.restartnetworkresponse.jobid;
-                      args.response.success(
-                        {_custom:
-                         {jobId: jid,
-                          getUpdatedItem: function(json) {
-                            return json.queryasyncjobresultresponse.jobresult.network;
-                          }
-                         }
                         }
-                      );
-                    }
-                  });
-                },
-                notification: {
-                  poll: pollAsyncJobResult
-                }
-              },
-
-              remove: {
-                label: 'label.action.delete.network',
-                messages: {
-                  confirm: function(args) {
-                    return 'message.action.delete.network';
-                  },
-                  notification: function(args) {
-                    return 'label.action.delete.network';
-                  }
-                },
-                action: function(args) {
-                  $.ajax({
-                    url: createURL("deleteNetwork&id=" + args.context.networks[0].id),
-                    dataType: "json",
-                    async: true,
-                    success: function(json) {
-                      var jid = json.deletenetworkresponse.jobid;
-                      args.response.success(
-                        {_custom:
-                         {jobId: jid
-                         }
-                        }
-                      );
-                    }
-                  });
-                },
-                notification: {
-                  poll: pollAsyncJobResult
+                    });
                 }
-              }
-            },
-
-            tabFilter: function(args) {
-              var networkOfferingHavingELB = false;
-              var hasNetworkACL = false;
-              var hasSRXFirewall = false;
-              var isVPC = false;
-              var isAdvancedSGZone = false;
-              var hiddenTabs = [];
-              var isSharedNetwork;
-
-              // Get network offering data
-              $.ajax({
-                url: createURL("listNetworkOfferings&id=" + args.context.networks[0].networkofferingid),
-                dataType: "json",
-                async: false,
-                success: function(json) {
-                  var networkoffering = json.listnetworkofferingsresponse.networkoffering[0];
-
-                  if (networkoffering.forvpc) {
-                    isVPC = true;
-                  }
-
-                  if (networkoffering.guestiptype == 'Shared') {
-                    isSharedNetwork = true;
-                  }
+            }
 
-                  $(networkoffering.service).each(function(){
-                    var thisService = this;
+            if (item.isstaticnat) {
+                disallowedActions.push('enableStaticNAT');
+            } else {
+                disallowedActions.push('disableStaticNAT');
+            }
 
-                    if (thisService.name == 'NetworkACL') {
-                      hasNetworkACL = true;
-                    } else if (thisService.name == "Lb") {
-                      $(thisService.capability).each(function(){
-                        if (this.name == "ElasticLb" && this.value == "true") {
-                          networkOfferingHavingELB = true;
-                        }
-                      });
-                    }
+            if (item.networkOfferingHavingVpnService == true) {
+                if (item.vpnenabled) {
+                    disallowedActions.push('enableVPN');
+                } else {
+                    disallowedActions.push('disableVPN');
+                }
+            } else { //item.networkOfferingHavingVpnService == false
+                disallowedActions.push('disableVPN');
+                disallowedActions.push('enableVPN');
+            }
 
-                    if (thisService.name == 'Firewall') {
-                      $(thisService.provider).each(function() {
-                        if (this.name == 'JuniperSRX') {
-                          hasSRXFirewall = true;
+            if (item.issourcenat) {
+                disallowedActions.push('enableStaticNAT');
+                disallowedActions.push('disableStaticNAT');
+                disallowedActions.push('remove');
+            }
 
-                          return false;
-                        }
+            allowedActions = $.grep(allowedActions, function(item) {
+                return $.inArray(item, disallowedActions) == -1;
+            });
 
-                        return true;
-                      });
-                    }
-                  });
-                }
-              });
+            return allowedActions;
+        },
 
-              // Get zone data
-              $.ajax({
-                url: createURL('listZones'),
-                data: {
-                  id: args.context.networks[0].zoneid
-                },
-                async: false,
-                success: function(json) {
-                  var zone = json.listzonesresponse.zone[0];
+        securityGroups: function(args) {
+            var allowedActions = [];
+            var isSecurityGroupOwner = isAdmin() || isDomainAdmin() ||
+                args.context.item.account == args.context.users[0].account;
 
-                  isAdvancedSGZone = zone.securitygroupsenabled;
-                }
-              });
+            if (isSecurityGroupOwner &&
+                args.context.item.state != 'Destroyed' &&
+                args.context.item.name != 'default') {
+                allowedActions.push('remove');
+            }
 
-              if (!networkOfferingHavingELB) {
-                hiddenTabs.push("addloadBalancer");
-              }
+            return allowedActions;
+        }
+    };
 
-              if (isVPC || isAdvancedSGZone || isSharedNetwork) {
-                 hiddenTabs.push('egressRules');
-               }
-              
-              return hiddenTabs;
-            },
+    var networkOfferingObjs = [];
+    var advZoneObjs;
 
-            isMaximized: true,
-            tabs: {
-              details: {
-                title: 'label.details',
-                preFilter: function(args) {
-                  var hiddenFields = [];
-                  var zone;
+    cloudStack.sections.network = {
+        title: 'label.network',
+        id: 'network',
+        sectionSelect: {
+            preFilter: function(args) {
+                var sectionsToShow = ['networks'];
 
-                  $.ajax({
+                $.ajax({
                     url: createURL('listZones'),
                     data: {
-                      id: args.context.networks[0].zoneid
+                        networktype: 'Advanced'
                     },
                     async: false,
                     success: function(json) {
-                      zone = json.listzonesresponse.zone[0];
-                    }
-                  });
-
-                  if(zone.networktype == "Basic") {
-                    hiddenFields.push("account");
-                    hiddenFields.push("gateway");
-                    hiddenFields.push("vlan");
-                    hiddenFields.push("cidr");
-                    //hiddenFields.push("netmask");
-                  }
-
-                  if(args.context.networks[0].type == "Isolated") {
-                    hiddenFields.push("networkofferingdisplaytext");
-                    hiddenFields.push("networkdomaintext");
-                    hiddenFields.push("gateway");
-                    hiddenFields.push("networkofferingname");
-                    //hiddenFields.push("netmask");
-                  }
-                  else { //selectedGuestNetworkObj.type == "Shared"
-                    hiddenFields.push("networkofferingid");
-                    hiddenFields.push("networkdomain");
-                  }
-									
-									if(!isAdmin()) {
-									  hiddenFields.push("vlan");
-									}
-									
-                  return hiddenFields;
-                },						
-																
-                fields: [
-                  {
-                    name: {
-                      label: 'label.name',
-                      isEditable: true
+                        advZoneObjs = json.listzonesresponse.zone;
+                        if (advZoneObjs != null && advZoneObjs.length > 0) {
+                            sectionsToShow.push('vpc');
+                            sectionsToShow.push('vpnCustomerGateway');
+                        }
                     }
-                  },
-                  {
-                    id: { label: 'label.id' },
-                    zonename: { label: 'label.zone' },
-                    displaytext: {
-                      label: 'label.description',
-                      isEditable: true
-                    },
-                    type: {
-                      label: 'label.type'
-                    },
-                    state: {
-                      label: 'label.state'
-                    },
+                });
 
-                    ispersistent:{
-                      label:'Persistent ',
-                      converter:cloudStack.converters.toBooleanText
-
-                     },
-                    restartrequired: {
-                      label: 'label.restart.required',
-                      converter: function(booleanValue) {
-                        if(booleanValue == true)
-                          return "<font color='red'>Yes</font>";
-                        else if(booleanValue == false)
-                          return "No";
-                      }
+                $.ajax({
+                    url: createURL('listNetworks', {
+                        ignoreProject: true
+                    }),
+                    data: {
+                        supportedServices: 'SecurityGroup',
+                        listAll: true,
+                        details: 'min'
                     },
-                    vlan: { label: 'label.vlan.id' },               
-
-                    networkofferingid: {
-                      label: 'label.network.offering',
-                      isEditable: true,
-                      select: function(args){
-											  if (args.context.networks[0].type == 'Shared') { //Shared network is not allowed to upgrade to a different network offering
-												  args.response.success({ data: [] });
-                          return;
-												}
-											
-                        if (args.context.networks[0].state == 'Destroyed') {
-                          args.response.success({ data: [] });
-                          return;
+                    async: false,
+                    success: function(json) {
+                        if (json.listnetworksresponse.network != null && json.listnetworksresponse.network.length > 0) {
+                            sectionsToShow.push('securityGroups');
                         }
+                    }
+                });
 
-                        var items = [];
-                        $.ajax({
-                          url: createURL("listNetworkOfferings&networkid=" + args.context.networks[0].id),
-                          dataType: "json",
-                          async: false,
-                          success: function(json) {
-                            var networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
-                            $(networkOfferingObjs).each(function() {
-                              items.push({id: this.id, description: this.displaytext});
-                            });
-                          }
-                        });
-                        $.ajax({
-                          url: createURL("listNetworkOfferings&id=" + args.context.networks[0].networkofferingid),  //include currently selected network offeirng to dropdown
-                          dataType: "json",
-                          async: false,
-                          success: function(json) {
-                            var networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
-                            $(networkOfferingObjs).each(function() {
-                              items.push({id: this.id, description: this.displaytext});
-                            });
-                          }
-                        });
-                        args.response.success({data: items});
-                      }
-                    },
+                return sectionsToShow;
+            },
 
-                    gateway: { label: 'label.gateway' },
+            label: 'label.select-view'
+        },
+        sections: {
+            networks: {
+                id: 'networks',
+                type: 'select',
+                title: 'label.guest.networks',
+                listView: {
+                    actions: {
+                        add: {
+                            label: 'Add Isolated Network',
+
+                            preFilter: function(args) {
+                                if (advZoneObjs != null && advZoneObjs.length > 0) {
+                                    for (var i = 0; i < advZoneObjs.length; i++) {
+                                        if (advZoneObjs[i].securitygroupsenabled != true) { //'Add Isolated Guest Network with SourceNat' is only supported in Advanced SG-disabled zone
+                                            return true;
+                                        }
+                                    }
+                                    return false;
+                                } else {
+                                    return false;
+                                }
+                            },
 
-                    //netmask: { label: 'label.netmask' },
-                    cidr: { label: 'label.cidr', isEditable:true },
+                            createForm: {
+                                title: 'Add Isolated Guest Network with SourceNat',
+                                fields: {
+                                    name: {
+                                        label: 'label.name',
+                                        validation: {
+                                            required: true
+                                        },
+                                        docID: 'helpGuestNetworkName'
+                                    },
+                                    displayText: {
+                                        label: 'label.display.text',
+                                        validation: {
+                                            required: true
+                                        },
+                                        docID: 'helpGuestNetworkDisplayText'
+                                    },
+                                    zoneId: {
+                                        label: 'label.zone',
+                                        validation: {
+                                            required: true
+                                        },
+                                        docID: 'helpGuestNetworkZone',
+
+                                        select: function(args) {
+                                            $.ajax({
+                                                url: createURL('listZones'),
+                                                success: function(json) {
+                                                    var zones = $.grep(json.listzonesresponse.zone, function(zone) {
+                                                        return (zone.networktype == 'Advanced' && zone.securitygroupsenabled != true); //Isolated networks can only be created in Advanced SG-disabled zone (but not in Basic zone nor Advanced SG-enabled zone)
+                                                    });
+
+                                                    args.response.success({
+                                                        data: $.map(zones, function(zone) {
+                                                            return {
+                                                                id: zone.id,
+                                                                description: zone.name
+                                                            };
+                                                        })
+                                                    });
+                                                }
+                                            });
+                                        }
+                                    },
+                                    networkOfferingId: {
+                                        label: 'label.network.offering',
+                                        validation: {
+                                            required: true
+                                        },
+                                        dependsOn: 'zoneId',
+                                        docID: 'helpGuestNetworkNetworkOffering',
+                                        select: function(args) {
+                                            $.ajax({
+                                                url: createURL('listVPCs'),
+                                                data: {
+                                                    listAll: true
+                                                },
+                                                success: function(json) {
+                                                    var items = json.listvpcsresponse.vpc;
+                                                    var baseUrl = 'listNetworkOfferings&zoneid=' + args.zoneId;
+                                                    var listUrl;
+                                                    var data = {
+                                                        guestiptype: 'Isolated',
+                                                        supportedServices: 'SourceNat',
+                                                        state: 'Enabled',
+                                                    };
+
+                                                    if (items != null && items.length > 0)
+                                                        listUrl = baseUrl;
+                                                    else
+                                                        listUrl = baseUrl + '&forVpc=false';
+
+                                                    if (args.context.vpc) {
+                                                        data.forVpc = true;
+                                                    }
+
+                                                    $.ajax({
+                                                        url: createURL(listUrl),
+                                                        data: data,
+                                                        success: function(json) {
+                                                            networkOfferingObjs = json.listnetworkofferingsresponse.networkoffering;
+                                                            args.$select.change(function() {
+                                                                var $vlan = args.$select.closest('form').find('[rel=vlan]');
+                                                                var networkOffering = $.grep(
+                                                                    networkOfferingObjs, function(netoffer) {
+                                                                        return netoffer.id == args.$select.val();
+                                                                    }
+                                                                )[0];
+
+                                                                if (networkOffering.specifyvlan) {
+                                                                    $vlan.css('display', 'inline-block');
+                                                                } else {
+                                                                    $vlan.hide();
+                                                                }
+                                                            });
+
+                                                            args.response.success({
+                                                                data: $.map(networkOfferingObjs, function(zone) {
+                                                                    return {
+                                                                        id: zone.id,
+                                                                        description: zone.name
+                                                                    };
+                                                                })
+                                                            });
+                                                        }
+                                                    });
+                                                }
+                                            });
+                                        }
+                                    },
 
-                    networkcidr:{label:'Network CIDR'},
+                                    vlan: {
+                                        label: 'VLAN',
+                                        validation: {
+                                            required: true
+                                        },
+                                        isHidden: true
+                                    },
 
-                    ip6gateway: { label: 'IPv6 Gateway' }, 
+                                    vpcid: {
+                                        label: 'label.vpc',
+                                        dependsOn: 'networkOfferingId',
+                                        select: function(args) {
+                                            var networkOfferingObj;
+                                            var $form = args.$select.closest('form');
+                                            var data = {
+                                                listAll: true,
+                                                details: 'min'
+                                            };
+
+                                            if (args.context.vpc) {
+                                                data.id = args.context.vpc[0].id;
+                                            }
 
-                    ip6cidr: { label: 'IPv6 CIDR' }, 
+                                            $(networkOfferingObjs).each(function(key, value) {
+                                                if (value.id == args.networkOfferingId) {
+                                                    networkOfferingObj = value;
+                                                    return false; //break each loop
+                                                }
+                                            });
 
+                                            if (networkOfferingObj.forvpc == true) {
+                                                args.$select.closest('.form-item').css('display', 'inline-block');
+                                                $.ajax({
+                                                    url: createURL('listVPCs'),
+                                                    data: data,
+                                                    success: function(json) {
+                                                        var items = json.listvpcsresponse.vpc;
+                                                        var data;
+                                                        if (items != null && items.length > 0) {
+                                                            data = $.map(items, function(item) {
+                                                                return {
+                                                                    id: item.id,
+                                                                    description: item.name
+                                                                }
+                                                            });
+                                                        }
+                                                        args.response.success({
+                                                            data: data
+                                                        });
+                                                    }
+                                                });
+                                                $form.find('.form-item[rel=networkDomain]').hide();
+                                            } else {
+                                                args.$select.closest('.form-item').hide();
+                                                $form.find('.form-item[rel=networkDomain]').show();
+                                                args.response.success({
+                                                    data: null
+                                                });
+                                            }
+                                        }
+                                    },
 
-                    reservediprange:{label:'Reserved IP Range'},
+                                    guestGateway: {
+                                        label: 'label.guest.gateway',
+                                        docID: 'helpGuestNetworkGateway'
+                                    },
+                                    guestNetmask: {
+                                        label: 'label.guest.netmask',
+                                        docID: 'helpGuestNetworkNetmask'
+                                    },
+                                    networkDomain: {
+                                        label: 'label.network.domain'
+                                    }
+                                }
+                            },
+                            action: function(args) {
+                                var dataObj = {
+                                    zoneId: args.data.zoneId,
+                                    name: args.data.name,
+                                    displayText: args.data.displayText,
+                                    networkOfferingId: args.data.networkOfferingId
+                                };
+
+                                if (args.data.guestGateway != null && args.data.guestGateway.length > 0) {
+                                    $.extend(dataObj, {
+                                        gateway: args.data.guestGateway
+                                    });
+                                }
+                                if (args.data.guestNetmask != null && args.data.guestNetmask.length > 0) {
+                                    $.extend(dataObj, {
+                                        netmask: args.data.guestNetmask
+                                    });
+                                }
+                                if (args.$form.find('.form-item[rel=vpcid]').css("display") != "none") {
+                                    $.extend(dataObj, {
+                                        vpcid: args.data.vpcid
+                                    });
+                                }
 
+                                if (args.$form.find('.form-item[rel=vlan]').css('display') != 'none') {
+                                    $.extend(dataObj, {
+                                        vlan: args.data.vlan
+                                    });
+                                }
 
-                    networkdomaintext: {
-                      label: 'label.network.domain.text'
-                    },
-                    networkdomain: {
-                      label: 'label.network.domain',
-                      isEditable: true
-                    },
-
-                    domain: { label: 'label.domain' },
-                    account: { label: 'label.account' },
-
-                    vpcid: {
-                      label: 'label.vpc.id',
-                      converter: function(args) {
-                        if(args != null)
-												  return args;
-												else
-												  return 'N/A';
-                      }											
-										}
-                  }
-                ],
-
-                tags: cloudStack.api.tags({ resourceType: 'Network', contextId: 'networks' }),
-
-
-                dataProvider: function(args) {
-                  $.ajax({
-                    url: createURL("listNetworks&id=" + args.context.networks[0].id + "&listAll=true"), //pass "&listAll=true" to "listNetworks&id=xxxxxxxx" for now before API gets fixed.
-                    data: { listAll: true },
-										dataType: "json",
-										async: true,
-										success: function(json) {								  
-											var jsonObj = json.listnetworksresponse.network[0];  
-                      addExtraPropertiesToGuestNetworkObject(jsonObj);												
-											args.response.success(
-												{
-													actionFilter: cloudStack.actionFilter.guestNetwork,
-													data: jsonObj
-												}
-											);		
-										}
-									});			
-                }
-              },
-                 
-              egressRules: {
-                title: 'label.egress.rules',
-                custom: function(args) {
-                  var context = args.context;
-
-                  return $('<div>').multiEdit({
-                    context: context,
-                    noSelect: true,
-                    noHeaderActionsColumn: true,
-                    fields: {
-                      'cidrlist': { edit: true, label: 'label.cidr.list', isOptional: true },
-                      'protocol': {
-                        label: 'label.protocol',
-                        select: function(args) {
-                          args.$select.change(function() {
-                            var $inputs = args.$form.find('th, td');
-                            var $icmpFields = $inputs.filter(function() {
-                              var name = $(this).attr('rel');
-
-                              return $.inArray(name, [
-                                'icmptype',
-                                'icmpcode'
-                              ]) > -1;
-                            });
-                            var $otherFields = $inputs.filter(function() {
-                              var name = $(this).attr('rel');
-
-                              return name != 'cidrlist' &&
-                                name != 'icmptype' &&
-                                name != 'icmpcode' &&
-                                name != 'protocol' &&
-                                name != 'add-rule';
-                            });
-
-                            if ($(this).val() == 'icmp') {
-                              $icmpFields.show();
-                              $otherFields.hide();
-                            } else if ($(this).val() == 'all') {
-                              $icmpFields.hide();
-                              $otherFields.hide();
-                            } else {
-                              $icmpFields.hide();
-                              $otherFields.show();
-                            }
-                          });
-                       
-                            args.response.success({
-                            data: [
-                              { name: 'tcp', description: 'TCP' },
-                              { name: 'udp', description: 'UDP' },
-                              { name: 'icmp', description: 'ICMP' },
-                              { name: 'all', description: 'All' }
-                            ]
-                          });
-                        }
-                      },
-                      'startport': { edit: true, label: 'label.start.port', isOptional: true },
-                      'endport': { edit: true, label: 'label.end.port', isOptional: true },
-                      'icmptype': { edit: true, label: 'ICMP.type', isHidden: true, isOptional: true },
-                      'icmpcode': { edit: true, label: 'ICMP.code', isHidden: true, isOptional: true },
-                      'add-rule': {
-                        label: 'label.add',
-                        addButton: true
-                      }
-                    },
-                    add: {
-                      label: 'label.add',
-                      action: function(args) {
-                        var data = {
-                          protocol: args.data.protocol,
-                          cidrlist: args.data.cidrlist,
-                          networkid: args.context.networks[0].id
-                        };
-
-                        if (args.data.icmptype && args.data.icmpcode) { // ICMP
-                          $.extend(data, {
-                            icmptype: args.data.icmptype,
-                            icmpcode: args.data.icmpcode
-                          });
-                        } else { // TCP/UDP
-                          $.extend(data, {
-                            startport: args.data.startport,
-                            endport: args.data.endport
-                          });
-                        }
+                                if (args.data.networkDomain != null && args.data.networkDomain.length > 0 && args.$form.find('.form-item[rel=vpcid]').css("display") == "none") {
+                                    $.extend(dataObj, {
+                                        networkDomain: args.data.networkDomain
+                                    });
+                                }
 
-                        $.ajax({
-                          url: createURL('createEgressFirewallRule'),
-                          data: data,
-                          dataType: 'json',
-                          async: true,
-                          success: function(json) {
-                            var jobId = json.createegressfirewallruleresponse.jobid;
-
-                            args.response.success({
-                              _custom: {
-                                jobId: jobId
-                              },
-                              notification: {
-                                label: 'label.add.egress.rule',
-                                poll: pollAsyncJobResult
-                              }
-                            });
-                          },
-                          error: function(json) {
-                            args.response.error(parseXMLHttpResponse(json));
-                          }
-                        });
-                      }
-                    },
-                    actions: {
-                      destroy: {
-                        label: 'label.remove.rule',
-                        action: function(args) {
-                          $.ajax({
-                            url: createURL('deleteEgressFirewallRule'),
-                            data: {
-                              id: args.context.multiRule[0].id
+                                $.ajax({
+                                    url: createURL('createNetwork'),
+                                    data: dataObj,
+                                    success: function(json) {
+                                        args.response.success({
+                                            data: json.createnetworkresponse.network
+                                        });
+                                    },
+                                    error: function(json) {
+                                        args.response.error(parseXMLHttpResponse(json));
+                                    }
+                                });
                             },
-                            dataType: 'json',
-                            async: true,
-                            success: function(data) {
-                              var jobID = data.deleteegressfirewallruleresponse.jobid;
-
-                              args.response.success({
-                                _custom: {
-                                  jobId: jobID
-                                },
-                                notification: {
-                                  label: 'label.remove.egress.rule',
-                                  poll: pollAsyncJobResult
+                            messages: {
+                                notification: function() {
+                                    return 'Add Isolated Guest Network';
                                 }
-                              });
-                            },
-                            error: function(json) {
-                              args.response.error(parseXMLHttpResponse(json));
                             }
-                          });
-                        }
-                      }
-                    },
-                    ignoreEmptyFields: true,
-                    dataProvider: function(args) {
-                      $.ajax({
-                        url: createURL('listEgressFirewallRules'),
-                        data: {
-                          listAll: true,
-                          networkid: args.context.networks[0].id
                         },
-                        dataType: 'json',
-                        async: true,
-                        success: function(json) {
-                          var response = json.listegressfirewallrulesresponse.firewallrule ?
-                                json.listegressfirewallrulesresponse.firewallrule : [];
-
-                          args.response.success({
-                            data: $.map(response, function(rule) {
-                              if (rule.protocol == 'all') {
-                                $.extend(rule, {
-                                  startport: 'All',
-                                  endport: 'All'
-                                });
-                              } else if (rule.protocol == 'tcp' || rule.protocol == 'udp') {
-                                if (!rule.startport) {
-                                  rule.startport = ' ';
-                                }
 
-                                if (!rule.endport) {
-                                  rule.endport = ' ';
-                                }
-                              }
+                        rootAdminAddGuestNetwork: $.extend({}, addGuestNetworkDialog.def, {
+                            isHeader: true
+                        })
 
-                              return rule;
-                            })
-                          });
+                    },
+                    id: 'networks',
+                    fields: {
+                        name: {
+                            label: 'label.name'
+                        },
+                        account: {
+                            label: 'label.account'
+                        },
+                        type: {
+                            label: 'label.type'
+                        },
+                        cidr: {
+                            label: 'label.cidr'
+                        },
+                        ip6cidr: {
+                            label: 'IPv6 CIDR'
                         }
-                       });
-                    }
-                  });
-                }
-              },
-
-               addloadBalancer: { // EIP/ELB Basic zone: Add Load Balancer tab in network detailView
-                title: 'label.add.load.balancer',
-                custom: function(args) {
-                  var context = args.context;
-
-                  return $('<div>').addClass('loadBalancer').multiEdit(
-                    {
-                      context: context,
-                      listView: $.extend(true, {}, cloudStack.sections.instances, {
-                        listView: {
-                          filters: false,
-
-                          dataProvider: function(args) {
-                            var data = {
-                              page: args.page,
-                              pageSize: pageSize,
-                                                                                                                        domainid: g_domainid,
-                              account: g_account,
-                              networkid: args.context.networks[0].id,
-                              listAll: true
-                            };
+                    },
 
-                            $.ajax({
-                              url: createURL('listVirtualMachines'),
-                              data: data,
-                              dataType: 'json',
-                              async: true,
-                              success: function(data) {
-                                args.response.success({
-                                  data: $.grep(
-                                    data.listvirtualmachinesresponse.virtualmachine ?
-                                      data.listvirtualmachinesresponse.virtualmachine : [],
-                                    function(instance) {
-                                          var nonAutoScale=0;
-                                          if(instance.displayname == null)
-                                              nonAutoScale = 1;
-                                            else{
-                                          if( instance.displayname.match(/AutoScale-LB-/)==null)
-                                             nonAutoScale =1;
-                                          else {
-                                             if(instance.displayname.match(/AutoScale-LB-/).length)
-                                               nonAutoScale =0;
-                                             }
-                                          }
-                                      var isActiveState= $.inArray(instance.state, ['Destroyed','Expunging']) == -1;
-                                      return nonAutoScale && isActiveState;
+                    advSearchFields: {
+                        zoneid: {
+                            label: 'Zone',
+                            select: function(args) {
+                                $.ajax({
+                                    url: createURL('listZones'),
+                                    data: {
+                                        listAll: true
+                                    },
+                                    success: function(json) {
+                                        var zones = json.listzonesresponse.zone ? json.listzonesresponse.zone : [];
+
+                                        args.response.success({
+                                            data: $.map(zones, function(zone) {
+                                                return {
+                                                    id: zone.id,
+                                                    description: zone.name
+                                                };
+                                            })
+                                        });
                                     }
-                                  )
                                 });
-                               },
-                              error: function(data) {
-                                args.response.error(parseXMLHttpResponse(data));
-                              }
-                            });
-                          }
-                        }
-                      }),
-                      multipleAdd: true,
-                      fields: {
-                        'name': { edit: true, label: 'label.name' },
-                        'publicport': { edit: true, label: 'label.public.port' },
-                        'privateport': { edit: true, label: 'label.private.port' },
-                        'algorithm': {
-                          label: 'label.algorithm',
-                          select: function(args) {
-                            args.response.success({
-                              data: [
-                                { name: 'roundrobin', description: _l('label.round.robin') },
-                                { name: 'leastconn', description: _l('label.least.connections') },
-                                { name: 'source', description: _l('label.source') }
-                              ]
-                            });
-                          }
+                            }
+                        },
+
+                        domainid: {
+                            label: 'Domain',
+                            select: function(args) {
+                                if (isAdmin() || isDomainAdmin()) {
+                                    $.ajax({
+                                        url: createURL('listDomains'),
+                                        data: {
+                                            listAll: true,
+                                            details: 'min'
+                                        },
+                                        success: function(json) {
+                                            var array1 = [{
+                                                id: '',
+                                                description: ''
+                                            }];
+                                            var domains = json.listdomainsresponse.domain;
+                                            if (domains != null && domains.length > 0) {
+                                                for (var i = 0; i < domains.length; i++) {
+                                                    array1.push({
+                                                        id: domains[i].id,
+                                                        description: domains[i].path
+                                                    });
+                                                }
+                                            }
+                                            args.response.success({
+                                                data: array1
+                                            });
+                                        }
+                                    });
+                                } else {
+                                    args.response.success({
+                                        data: null
+                                    });
+                                }
+                            },
+                            isHidden: function(args) {
+                                if (isAdmin() || isDomainAdmin())
+                                    return false;
+                                else
+                                    return true;
+                            }
                         },
-                        'sticky': {
-                          label: 'label.stickiness',
-                          custom: {
-                            buttonLabel: 'label.configure',
-                            action: cloudStack.lbStickyPolicy.dialog()
-                          }
+
+                        account: {
+                            label: 'Account',
+                            isHidden: function(args) {
+                                if (isAdmin() || isDomainAdmin())
+                                    return false;
+                                else
+                                    return true;
+                            }
                         },
-                        'autoScale': {
-                          label: 'AutoScale',
-                          custom: {
-                            requireValidation: true,
-                            buttonLabel: 'label.configure',
-                            action: cloudStack.uiCustom.autoscaler(cloudStack.autoscaler)
-                          }
+                        tagKey: {
+                            label: 'Tag Key'
                         },
-                        'add-vm': {
-                          label: 'label.add.vms',
-                          addButton: true
+                        tagValue: {
+                            label: 'Tag Value'
                         }
-                      },
-
-                      add: {  //basic zone - elastic IP - Add Load Balancer tab - Add VMs button
-                        label: 'label.add.vms',
-                        action: function(args) {
-                            var data = {
-                            algorithm: args.data.algorithm,
-                            name: args.data.name,
-                            privateport: args.data.privateport,
-                            publicport: args.data.publicport,
-                                                                                                                openfirewall: false,
-                                                                                                                domainid: g_domainid,
-                                                                                                                account: g_account
-                          };
-
-                                                                                                        if('vpc' in args.context) { //from VPC section
-                                                                                                                if(args.data.tier == null) {                                                         
-                                                                                                                        args.response.error('Tier is required');
-                                                                                                                        return;
-                                                                                                                }
-                                                                                                                $.extend(data, {
-                                                                                                                        networkid: args.data.tier
-                                                         

<TRUNCATED>