mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1760 lines
		
	
	
		
			86 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1760 lines
		
	
	
		
			86 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  /**
 | |
|  *  Copyright (C) 2010 Cloud.com, Inc.  All rights reserved.
 | |
|  * 
 | |
|  * This software is licensed under the GNU General Public License v3 or later.
 | |
|  * 
 | |
|  * It is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or any later version.
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  * 
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  * 
 | |
|  */
 | |
| 
 | |
| // Version: @VERSION@
 | |
| 
 | |
| function showNetworkingTab(p_domainId, p_account) {  
 | |
|     //*** Network (begin) ****************************************************************************
 | |
|     activateDialog($("#dialog_acquire_public_ip").dialog({ 
 | |
| 		width: 325,
 | |
| 		autoOpen: false,
 | |
| 		modal: true,
 | |
| 		zIndex: 2000
 | |
| 	}));
 | |
| 	
 | |
| 	//*** Acquire New IP (begin) ***
 | |
| 	$.ajax({
 | |
| 	       data: createURL("command=listZones&available=true&response=json"+maxPageSize),
 | |
| 		dataType: "json",
 | |
| 		success: function(json) {
 | |
| 			var zones = json.listzonesresponse.zone;				
 | |
| 			var zoneSelect = $("#dialog_acquire_public_ip #acquire_zone").empty();	
 | |
| 			if (zones != null && zones.length > 0) {	
 | |
| 			    for (var i = 0; i < zones.length; i++) {
 | |
| 				    zoneSelect.append("<option value='" + zones[i].id + "'>" + sanitizeXSS(zones[i].name) + "</option>"); 
 | |
| 			    }
 | |
| 		    }
 | |
| 		}
 | |
| 	});
 | |
| 		
 | |
| 	$(".add_publicipbutton").bind("click", function(event) {			
 | |
| 		var submenuContent = $("#submenu_content_network");
 | |
| 		$("#dialog_acquire_public_ip").dialog('option', 'buttons', {				
 | |
| 			"Acquire": function() { 
 | |
| 			    $("#submenu_content_network #overlay_white").show();
 | |
| 			    $("#submenu_content_network #loading_gridtable").find("#message").text("Acquiring New IP....");					    
 | |
| 			    $("#submenu_content_network #loading_gridtable").show();				    
 | |
| 			    
 | |
| 				var thisDialog = $(this);			
 | |
| 				var zoneid = thisDialog.find("#acquire_zone").val();
 | |
| 				thisDialog.dialog("close");
 | |
| 				
 | |
| 				$.ajax({
 | |
| 				       data: createURL("command=associateIpAddress&zoneid="+zoneid+"&response=json"),
 | |
| 					dataType: "json",
 | |
| 					success: function(json) {						   
 | |
| 					    var items = json.associateipaddressresponse.publicipaddress;	
 | |
| 					    $("#dialog_info").html("<p>The IP address <b>"+items[0].ipaddress+"</b> has been assigned to your account</p>").dialog("open");			   
 | |
| 						
 | |
| 						$("#submenu_content_network #overlay_white").hide();
 | |
| 			            $("#submenu_content_network #loading_gridtable").hide();	
 | |
| 			            
 | |
| 			            if(isAdmin() || isDomainAdmin()) {
 | |
| 			                ipListContainer.empty(); //clear search result if there is.               
 | |
| 			                var template = ipTemplate.clone();
 | |
| 							ipJsonToPanel(items[0], template);
 | |
| 							ipListContainer.append(template.show());								
 | |
| 							showPfLbArea(items[0].ipaddress, items[0].domainid, items[0].account);				                
 | |
| 			            } else {
 | |
| 			                RefreshIpDropDown(items[0].ipaddress);		
 | |
| 			            }		            				
 | |
| 					},
 | |
| 					error: function(XMLHttpResponse) {
 | |
| 					    handleError(XMLHttpResponse);
 | |
| 					    $("#submenu_content_network #overlay_white").hide();
 | |
| 			            $("#submenu_content_network #loading_gridtable").hide();	
 | |
| 					}						
 | |
| 				});
 | |
| 			},
 | |
| 			"Cancel": function() { 
 | |
| 				$(this).dialog("close"); 
 | |
| 			}
 | |
| 		});
 | |
| 		$("#dialog_acquire_public_ip").dialog("open");			
 | |
| 		return false;
 | |
| 	});
 | |
|     
 | |
|     var ipListContainer = $("#submenu_content_network #ip_list_container");
 | |
| 	var ipTemplate = $("#ip_template");
 | |
| 	
 | |
|     function refreshIpListContainer(strCmd) {
 | |
| 		$("#pf_lb_area").hide();
 | |
| 		$("#pf_lb_area_blank").hide();
 | |
| 		$("#show_last_search").hide();
 | |
|         ipListContainer.empty();      				
 | |
| 	    $.ajax({
 | |
| 	      data: createURL(strCmd),
 | |
| 		    dataType: "json",
 | |
| 		    success: function(json) {					   			    
 | |
| 			    var items = json.listpublicipaddressesresponse.publicipaddress;						
 | |
| 			    if(items != null && items.length > 0) {
 | |
| 					if (items.length > 1) {
 | |
| 						for(var i=0; i < items.length; i++) {
 | |
| 							var template = ipTemplate.clone();
 | |
| 							ipJsonToPanel(items[i], template);
 | |
| 							ipListContainer.append(template.show());
 | |
| 						}	
 | |
| 					} else {
 | |
| 						var template = ipTemplate.clone();
 | |
| 						ipJsonToPanel(items[0], template);
 | |
| 						ipListContainer.append(template.show());
 | |
| 						template.find("#ip_manage").hide();
 | |
| 						
 | |
| 						if(isIpManageable(items[0].domainid, items[0].account) == true) { 
 | |
| 							showPfLbArea(items[0].ipaddress, items[0].domainid, items[0].account);				
 | |
| 							listLoadBalancerRules();
 | |
| 							refreshCreateLoadBalancerRow();    					    
 | |
| 							listPortForwardingRules();
 | |
| 							refreshCreatePortForwardingRow();
 | |
| 							$("#create_port_forwarding_row #add_link").data("ip", items[0].ipaddress);
 | |
| 							$("#create_load_balancer_row #add_link").data("ip", items[0].ipaddress);
 | |
| 						} else {
 | |
| 							$("#pf_lb_area_blank p").text("This IP address is managed by the CloudStack for use with System VMs.");
 | |
| 							$("#pf_lb_area_blank").show();
 | |
| 						}
 | |
| 					}
 | |
| 			    } else {
 | |
| 					$("#pf_lb_area_blank p").text("Unable to find any IP Addresses.  Please try again.");
 | |
| 					$("#pf_lb_area_blank").show();
 | |
| 				}
 | |
| 		    },
 | |
| 			error : function(XMLHttpResponse) {
 | |
| 				$("#pf_lb_area_blank p").text("Unable to find any IP Addresses.  Please try again.");
 | |
| 				$("#pf_lb_area_blank").show();
 | |
| 	        }
 | |
| 	    });					    
 | |
|     }
 | |
|     
 | |
|     function refreshIpListContainerByInputBox() {	  
 | |
|         var ip = $("#submenu_content_network #admin_ip_search").val();	     
 | |
| 		$("#submenu_content_network #admin_ip_search").autocomplete("close");		
 | |
|         if(ip != null && ip.length >0) {    
 | |
|             refreshIpListContainer("command=listPublicIpAddresses&response=json&forvirtualnetwork=true&ipaddress=" + ip);	   
 | |
| 		}    
 | |
|     }
 | |
|     
 | |
| 	$("#submenu_content_network #admin_ip_search").autocomplete({
 | |
| 		source: function(request, response) {
 | |
| 			$.ajax({
 | |
| 			  data: createURL("command=listPublicIpAddresses&response=json&forvirtualnetwork=true&ipaddress=" + request.term),				
 | |
| 				dataType: "json",
 | |
| 				success: function(json) {		
 | |
| 					var items = json.listpublicipaddressesresponse.publicipaddress;		
 | |
| 					var ipArray = [];				
 | |
| 					if(items != null && items.length > 0) {									
 | |
| 						for(var i=0; i < items.length; i++) 					        
 | |
| 							ipArray.push(items[i].ipaddress);		   					   			    
 | |
| 					}
 | |
| 					response(ipArray);
 | |
| 				}
 | |
| 			});		
 | |
| 		},
 | |
| 		minLength: 2
 | |
| 
 | |
| 	});
 | |
| 	
 | |
| 	$("#submenu_content_network #admin_ip_search").bind("keypress", function(event) {
 | |
| 		if(event.keyCode == keycode_Enter) {   	
 | |
| 			$("#submenu_content_network #ip_searchbutton1").click();
 | |
| 			return false;
 | |
| 		}
 | |
| 	});
 | |
|     
 | |
|     $("#submenu_content_network #search_by_account").bind("keypress", function(event) {
 | |
| 		if(event.keyCode == keycode_Enter) {   	
 | |
| 			$("#submenu_content_network #ip_searchbutton2").click();
 | |
| 			return false;
 | |
| 		}
 | |
| 	});
 | |
|     
 | |
|     //watermark (begin)
 | |
| 	$("#submenu_content_network #admin_ip_search").bind('focus', function(event){
 | |
| 	    if($(this).val() == "By Public IP Address") {
 | |
| 	        $(this).val("");
 | |
| 	        $(this).removeClass("ipwatermark_text");
 | |
| 	    }
 | |
| 	});		
 | |
|     $("#submenu_content_network #admin_ip_search").bind('blur', function(event){
 | |
|         if($(this).val() == "") {
 | |
|             $(this).val("By Public IP Address");
 | |
|             $(this).addClass("ipwatermark_text");
 | |
|         }                
 | |
|     });	
 | |
|     
 | |
|     $("#submenu_content_network #search_by_account").bind('focus', function(event){
 | |
| 	    if($(this).val() == "By Account") {
 | |
| 	        $(this).val("");
 | |
| 	        $(this).removeClass("ipwatermark_text");
 | |
| 	    }
 | |
| 	});		
 | |
|     $("#submenu_content_network #search_by_account").bind('blur', function(event){
 | |
|         if($(this).val() == "") {
 | |
|             $(this).val("By Account");
 | |
|             $(this).addClass("ipwatermark_text");
 | |
|         }                
 | |
|     });		 	
 | |
|     //watermark (end)	
 | |
|     
 | |
|     $("#submenu_content_network #ip_searchbutton1").bind("click", refreshIpListContainerByInputBox);
 | |
|     		  
 | |
|     function populateDomainDropdown() {
 | |
|         var domainSelect = $("#submenu_content_network #search_by_domain").empty();			
 | |
| 	    $.ajax({
 | |
| 		   data: createURL("command=listDomains&available=true&response=json"+maxPageSize),
 | |
| 		    dataType: "json",
 | |
| 		    success: function(json) {			        
 | |
| 			    var domains = json.listdomainsresponse.domain;			 
 | |
| 			    if (domains != null && domains.length > 0) {
 | |
| 			        for (var i = 0; i < domains.length; i++) {
 | |
| 				        domainSelect.append("<option value='" + domains[i].id + "'>" + sanitizeXSS(domains[i].name) + "</option>"); 
 | |
| 			        }
 | |
| 			    }
 | |
| 		    }
 | |
| 	    });		    
 | |
|     }		  
 | |
|     
 | |
|     $("#submenu_content_network #ip_searchbutton2").bind("click", function(event){
 | |
|         var array1 = [];
 | |
|         var account = $("#submenu_content_network #search_by_account").val();
 | |
|         if(account != null && account.length > 0)
 | |
|             array1.push("&account=" + account);
 | |
|         var domainId = $("#submenu_content_network #search_by_domain").val();
 | |
|         array1.push("&domainid=" + domainId);	        
 | |
|         refreshIpListContainer("command=listPublicIpAddresses&response=json&forvirtualnetwork=true" + array1.join(""));	 	        
 | |
|         return false;
 | |
|     });
 | |
|     		  
 | |
| 	function RefreshIpDropDown(ipAddress) {			
 | |
| 	    var array1 = [];	
 | |
|         // "p_domainId!=null" and "p_account!=null" means redirected from "IPs" link in Accounts tab to here(new Network tab)  
 | |
|         if (p_domainId!=null && p_domainId.length > 0) 
 | |
| 		    array1.push("&domainid="+p_domainId);		
 | |
|         if (p_account!=null && p_account.length > 0) 
 | |
| 		    array1.push("&account="+p_account);	        
 | |
| 	    
 | |
| 	    $.ajax({
 | |
| 		   data: createURL("command=listPublicIpAddresses&response=json&forvirtualnetwork=true" + array1.join("")),				
 | |
| 			dataType: "json",
 | |
| 			success: function(json) {					   			    
 | |
| 				var items = json.listpublicipaddressesresponse.publicipaddress;						
 | |
| 				if(items != null && items.length > 0) {						    			    			    
 | |
| 				    var ipSelect = $("#submenu_content_network #ip_select").empty();
 | |
| 				    for(var i=0; i < items.length; i++) {
 | |
| 				        ipSelect.append("<option value='" + items[i].ipaddress + "'>" + items[i].ipaddress + "</option>");					        
 | |
| 				    }							  
 | |
| 				    if(ipAddress != null)
 | |
| 				       ipSelect.val(ipAddress);						    		    
 | |
| 				    ipSelect.change();						   		    
 | |
| 				}
 | |
| 			}
 | |
| 		});		    
 | |
| 	}	
 | |
| 		
 | |
| 	function ipJsonToPanel(json, panel) {
 | |
| 		panel.find("#ip_release").show();
 | |
| 		panel.attr("id", "ip"+json.ipaddress).data("ip", json.ipaddress).data("domainid", json.domainid).data("account", json.account);
 | |
| 		panel.find("#ip_manage").data("ip", json.ipaddress).data("domainid", json.domainid).data("account", json.account);
 | |
| 	    panel.data("ip_domainid", json.domainid).data("ip_account", json.account);
 | |
| 		panel.find("#ipaddress").text(json.ipaddress);
 | |
| 	    panel.find("#zonename").text(json.zonename);
 | |
| 		panel.find("#allocated").text(json.allocated);
 | |
| 		panel.find("#vlanname").text(json.vlanname);
 | |
| 		panel.find("#source_nat").text((json.issourcenat=="true")?"Yes":"No");	
 | |
| 		panel.find("#network_type").text((json.forvirtualnetwork=="true")? "Public":"Direct");
 | |
| 		panel.find("#domain").text(json.domain);
 | |
| 		panel.find("#account").text(json.account);					
 | |
| 		
 | |
| 		var ipAddress = json.ipaddress;				
 | |
| 		if (json.issourcenat != "true" && json.forvirtualnetwork =="true") {
 | |
| 			panel.find("#ip_release").data("ip", json.ipaddress).show();
 | |
| 		} else {
 | |
| 		    panel.find("#ip_release").hide();
 | |
| 		}
 | |
| 		
 | |
| 		if(isIpManageable(json.domainid, json.account) == true && !isUser()) 
 | |
| 		    panel.find("#ip_manage").show();				    
 | |
| 	}	
 | |
| 	
 | |
| 	var ipPanel = $("#submenu_content_network #network_container"); 				
 | |
| 	$("#submenu_content_network #ip_select").bind("change", function(event) {		    
 | |
| 	    var ipAddress = $(this).val();		
 | |
| 	    if(ipAddress != null && ipAddress.length > 0) {	            
 | |
| 	        $.ajax({
 | |
| 		       data: createURL("command=listPublicIpAddresses&ipaddress="+ipAddress+"&response=json"),				
 | |
| 			    dataType: "json",
 | |
| 			    success: function(json) {				        				   			    
 | |
| 				    var items = json.listpublicipaddressesresponse.publicipaddress;		
 | |
| 				    if(items != null && items.length > 0) {						        
 | |
| 				        var item =	items[0];		    
 | |
| 				        ipJsonToPanel(item, ipPanel);						    
 | |
| 				        showPfLbArea(ipAddress, item.domainid, item.account);	        
 | |
| 		            }			    			    
 | |
| 			    }
 | |
| 		    });		
 | |
| 		}		    		    
 | |
| 	    return false;
 | |
|     });	
 | |
|     
 | |
|     function isIpManageable(domainid, account) {             
 | |
|         if((g_domainid == domainid && g_account == account) || (isAdmin() && account!="system")) 
 | |
|             return true;
 | |
|         else
 | |
|             return false;
 | |
|     }
 | |
|     
 | |
|     function showPfLbArea(ipAddress, domainid, account) {
 | |
|         //show portForwarding/loadBalancer if Ip is manageable
 | |
|         if(isIpManageable(domainid, account) == true) {	  
 | |
| 			ipPanel.data("ip_domainid", domainid).data("ip_account", account).data("ip_address", ipAddress);
 | |
|             listLoadBalancerRules();
 | |
|             refreshCreateLoadBalancerRow();    					    
 | |
|             listPortForwardingRules();
 | |
|             refreshCreatePortForwardingRow();	
 | |
| 			$("#create_port_forwarding_row #add_link").data("ip", ipAddress);
 | |
| 			$("#create_load_balancer_row #add_link").data("ip", ipAddress);
 | |
|             $("#pf_lb_area").show();	
 | |
|             $("#pf_lb_area_blank").hide();
 | |
|         } 
 | |
|         //hide portForwarding/loadBalancer if IP is not manageable          
 | |
|         else {
 | |
|             $("#pf_lb_area").hide();
 | |
|             $("#pf_lb_area_blank p").text("This IP address is managed by the CloudStack for use with System VMs.");
 | |
| 			$("#pf_lb_area_blank").show();
 | |
|         }	         
 | |
|     }
 | |
|     
 | |
|     function hidePfLbArea() {
 | |
|         $("#pf_lb_area").hide();
 | |
|         $("#pf_lb_area_blank").hide();
 | |
|     }
 | |
|     
 | |
|     //*** Acquire New IP (end) ***
 | |
|     
 | |
|     //*** Port Forwarding (begin) ***    
 | |
|     var createPortForwardingRow = $("#submenu_content_network #port_forwarding_panel #create_port_forwarding_row");
 | |
|     var portForwardingGrid = $("#submenu_content_network #port_forwarding_panel #grid_content");        
 | |
|            
 | |
| 	function listPortForwardingRules() {		    
 | |
| 	    var ipSelected = $("#submenu_content_network #ip_select").val();
 | |
| 		if (!isUser()) {
 | |
| 			ipSelected = ipPanel.data("ip_address");
 | |
| 		}
 | |
|         if(ipSelected == null || ipSelected.length == 0)
 | |
|             return;    		
 | |
|         $.ajax({
 | |
| 	   data: createURL("command=listPortForwardingRules&ipaddress=" + ipSelected + "&response=json"),
 | |
|             dataType: "json",
 | |
|             success: function(json) {	                                    
 | |
|                 var items = json.listportforwardingrulesresponse.portforwardingrule;      
 | |
|                 portForwardingGrid.empty();                       		    		      	    		
 | |
|                 if (items != null && items.length > 0) {				        			        
 | |
| 	                for (var i = 0; i < items.length; i++) {
 | |
| 		                var template = $("#port_forwarding_template").clone(true);
 | |
| 		                portForwardingJsonToTemplate(items[i], template); 
 | |
| 		                portForwardingGrid.append(template.show());						   
 | |
| 	                }			    
 | |
|                 } 	        	      		    						
 | |
|             }
 | |
|         });
 | |
|     }        
 | |
| 		
 | |
| 	function refreshCreatePortForwardingRow() {            
 | |
| 	    createPortForwardingRow.find("#public_port").val("");
 | |
| 	    createPortForwardingRow.find("#private_port").val("");
 | |
| 	    createPortForwardingRow.find("#protocol").val("TCP");  		    
 | |
| 
 | |
| 	    $.ajax({
 | |
| 		   data: createURL("command=listVirtualMachines&response=json&domainid="+ipPanel.data("ip_domainid")+"&account="+ipPanel.data("ip_account")+maxPageSize),
 | |
| 		    dataType: "json",
 | |
| 		    success: function(json) {			    
 | |
| 			    var instances = json.listvirtualmachinesresponse.virtualmachine;
 | |
| 			    var vmSelect = createPortForwardingRow.find("#vm").empty();							
 | |
| 			    if (instances != null && instances.length > 0) {
 | |
| 				    for (var i = 0; i < instances.length; i++) {								
 | |
| 				        var html = $("<option value='" + instances[i].id + "'>" +  getVmName(instances[i].name, instances[i].displayname) + "</option>");							        
 | |
| 			            vmSelect.append(html); 								
 | |
| 				    }
 | |
| 			    } 
 | |
| 		    }
 | |
| 	    });		    
 | |
|     }	
 | |
| 		
 | |
| 	var portForwardingIndex = 0;	
 | |
| 	function portForwardingJsonToTemplate(json, template) {				        
 | |
| 	    (portForwardingIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd");		
 | |
| 	    
 | |
| 	    template.attr("id", "portForwarding_" + json.id).data("portForwardingId", json.id);	
 | |
| 	    		     
 | |
| 	    template.find("#row_container #public_port").text(json.publicport);
 | |
| 	    template.find("#row_container_edit #public_port").text(json.publicport);
 | |
| 	    
 | |
| 	    template.find("#row_container #private_port").text(json.privateport);
 | |
| 	    template.find("#row_container_edit #private_port").val(json.privateport);
 | |
| 	    
 | |
| 	    template.find("#row_container #protocol").text(json.protocol);
 | |
| 	    template.find("#row_container_edit #protocol").text(json.protocol);
 | |
| 	    
 | |
| 	    template.find("#row_container #vm_name").text(json.vmname);		    
 | |
| 	    var virtualMachineId = json.virtualmachineid;
 | |
| 	    		    
 | |
| 	    $.ajax({
 | |
| 		   data: createURL("command=listVirtualMachines&response=json&domainid="+ipPanel.data("ip_domainid")+"&account="+ipPanel.data("ip_account")+maxPageSize),
 | |
| 		    dataType: "json",
 | |
| 		    success: function(json) {			    
 | |
| 			    var instances = json.listvirtualmachinesresponse.virtualmachine;
 | |
| 			    var vmSelect = template.find("#row_container_edit #vm").empty();							
 | |
| 			    if (instances != null && instances.length > 0) {
 | |
| 				    for (var i = 0; i < instances.length; i++) {								
 | |
| 				        var html = $("<option value='" + instances[i].id + "'>" +  getVmName(instances[i].name, instances[i].displayname) + "</option>");							        
 | |
| 			            vmSelect.append(html); 								
 | |
| 				    }
 | |
| 				    vmSelect.val(virtualMachineId);
 | |
| 			    } 
 | |
| 		    }
 | |
| 	    });		    
 | |
| 	   		        	
 | |
| 	    var loadingImg = template.find(".adding_loading");		
 | |
|         var rowContainer = template.find("#row_container");      
 | |
|         var rowContainerEdit = template.find("#row_container_edit");    
 | |
|         		    
 | |
| 	    template.find("#delete_link").unbind("click").bind("click", function(event){   		                    
 | |
|             loadingImg.find(".adding_text").text("Deleting....");	
 | |
|             loadingImg.show();  
 | |
|             rowContainer.hide();                
 | |
| 	              
 | |
| 	        $.ajax({						
 | |
| 		       data: createURL("command=deletePortForwardingRule&response=json&id="+json.id),
 | |
| 	            dataType: "json",
 | |
| 	            success: function(json) {             
 | |
| 	                template.slideUp("slow", function(){		                    
 | |
| 	                    $(this).remove();
 | |
| 	                });	   						
 | |
| 	            },
 | |
| 	            error: function(XMLHttpResponse) {
 | |
| 	                handleError(XMLHttpResponse);
 | |
| 	                loadingImg.hide(); 	   
 | |
| 	                rowContainer.show();	
 | |
| 	            }
 | |
|             });	     
 | |
| 	        return false;
 | |
| 	    });
 | |
| 	    
 | |
| 	    template.find("#edit_link").unbind("click").bind("click", function(event){   		    
 | |
| 	        rowContainer.hide();
 | |
| 	        rowContainerEdit.show();
 | |
| 	    });
 | |
| 	    
 | |
| 	    template.find("#cancel_link").unbind("click").bind("click", function(event){   		    
 | |
| 	        rowContainer.show();
 | |
| 	        rowContainerEdit.hide();
 | |
| 	    });
 | |
| 	    
 | |
| 	    template.find("#save_link").unbind("click").bind("click", function(event){          		       
 | |
| 	        // validate values		    
 | |
| 		    var isValid = true;					    
 | |
| 		    isValid &= validateNumber("Private Port", rowContainerEdit.find("#private_port"), rowContainerEdit.find("#private_port_errormsg"), 1, 65535);				
 | |
| 		    if (!isValid) return;		    		        
 | |
| 		    
 | |
| 	        var loadingImg = template.find(".adding_loading");	                        
 | |
|             loadingImg.find(".adding_text").text("Saving....");	
 | |
|             loadingImg.show();  
 | |
|             rowContainerEdit.hide();      
 | |
| 		    
 | |
| 	        var ipAddress = $("#submenu_content_network #ip_select").val();
 | |
| 			if (!isUser()) {
 | |
| 				ipAddress = ipPanel.data("ip_address");
 | |
| 			}
 | |
| 	        var publicPort = rowContainerEdit.find("#public_port").text();
 | |
| 	        var privatePort = rowContainerEdit.find("#private_port").val();
 | |
| 	        var protocol = rowContainerEdit.find("#protocol").text();
 | |
| 	        var virtualMachineId = rowContainerEdit.find("#vm").val();		   
 | |
| 		    		    
 | |
| 	        var array1 = [];
 | |
|             array1.push("&publicip="+ipAddress);    
 | |
|             array1.push("&privateport="+privatePort);
 | |
|             array1.push("&publicport="+publicPort);
 | |
|             array1.push("&protocol="+protocol);
 | |
|             array1.push("&virtualmachineid=" + virtualMachineId);
 | |
|                           
 | |
|             $.ajax({
 | |
| 	       data: createURL("command=updatePortForwardingRule&response=json"+array1.join("")),
 | |
| 				 dataType: "json",
 | |
| 				 success: function(json) {					    									 
 | |
| 					var jobId = json.updateportforwardingruleresponse.jobid;					        
 | |
| 			        var timerKey = "updateportforwardingruleJob"+jobId;
 | |
| 			        
 | |
|                     $("body").everyTime(2000, timerKey, function() {
 | |
| 					    $.ajax({
 | |
| 						   data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
 | |
| 						    dataType: "json",
 | |
| 						    success: function(json) {										       						   
 | |
| 							    var result = json.queryasyncjobresultresponse;									    
 | |
| 							    if (result.jobstatus == 0) {
 | |
| 								    return; //Job has not completed
 | |
| 							    } else {											    
 | |
| 								    $("body").stopTime(timerKey);
 | |
| 								    if (result.jobstatus == 1) { // Succeeded										        								    
 | |
| 									    var items = result.portforwardingrule;	            	
 | |
|                                         portForwardingJsonToTemplate(items[0],template);
 | |
|                                         loadingImg.hide(); 	   
 | |
|                                         rowContainer.show();						                                                               
 | |
| 								    } else if (result.jobstatus == 2) { //Fail
 | |
| 								        loadingImg.hide(); 		
 | |
| 							            rowContainer.show(); 
 | |
| 									    $("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");											    					    
 | |
| 								    }
 | |
| 							    }
 | |
| 						    },
 | |
| 						    error: function(XMLHttpResponse) {	
 | |
| 						        handleError(XMLHttpResponse);								        
 | |
| 							    $("body").stopTime(timerKey);
 | |
| 							    loadingImg.hide(); 		
 | |
| 							    rowContainer.show(); 									    								    
 | |
| 						    }
 | |
| 					    });
 | |
| 				    }, 0);							 
 | |
| 				 },
 | |
| 				 error: function(XMLHttpResponse) {
 | |
| 				     handleError(XMLHttpResponse);		
 | |
| 				     loadingImg.hide(); 		
 | |
| 					 rowContainer.show(); 							 
 | |
| 				 }
 | |
| 			 });                   
 | |
| 	    });
 | |
| 	}	
 | |
| 			
 | |
| 	createPortForwardingRow.find("#add_link").bind("click", function(event){		    
 | |
| 	    // validate values		    
 | |
| 		var isValid = true;				
 | |
| 		isValid &= validateNumber("Public Port", createPortForwardingRow.find("#public_port"), createPortForwardingRow.find("#public_port_errormsg"), 1, 65535);
 | |
| 		isValid &= validateNumber("Private Port", createPortForwardingRow.find("#private_port"), createPortForwardingRow.find("#private_port_errormsg"), 1, 65535);				
 | |
| 		if (!isValid) return;			
 | |
| 	    
 | |
| 	    var template = $("#port_forwarding_template").clone();
 | |
| 	    portForwardingGrid.append(template.show());		
 | |
| 	    
 | |
| 	    var loadingImg = template.find(".adding_loading");		
 | |
|         var rowContainer = template.find("#row_container");                  
 | |
|         loadingImg.find(".adding_text").text("Adding....");	
 | |
|         loadingImg.show();  
 | |
|         rowContainer.hide();      
 | |
| 	    
 | |
| 		var ipAddress = $(this).data("ip");
 | |
| 	    var publicPort = createPortForwardingRow.find("#public_port").val();
 | |
| 	    var privatePort = createPortForwardingRow.find("#private_port").val();
 | |
| 	    var protocol = createPortForwardingRow.find("#protocol").val();
 | |
| 	    var virtualMachineId = createPortForwardingRow.find("#vm").val();		   
 | |
| 	    		    
 | |
| 	    var array1 = [];
 | |
|         array1.push("&ipaddress="+ipAddress);    
 | |
|         array1.push("&privateport="+privatePort);
 | |
|         array1.push("&publicport="+publicPort);
 | |
|         array1.push("&protocol="+protocol);
 | |
|         array1.push("&virtualmachineid=" + virtualMachineId);
 | |
|         $.ajax({						
 | |
| 	   data: createURL("command=createPortForwardingRule&response=json"+array1.join("")),
 | |
| 	        dataType: "json",
 | |
| 	        success: function(json) {			            
 | |
| 	            var items = json.createportforwardingruleresponse.portforwardingrule;	            	
 | |
| 	            portForwardingJsonToTemplate(items[0],template);
 | |
| 	            loadingImg.hide(); 	   
 | |
| 	            rowContainer.show();	
 | |
| 	            refreshCreatePortForwardingRow();			   						
 | |
| 	        },
 | |
| 		    error: function(XMLHttpResponse) {				    
 | |
| 			    handleError(XMLHttpResponse);
 | |
| 			    template.slideUp("slow", function() {
 | |
| 					$(this).remove();
 | |
| 				});
 | |
| 		    }	
 | |
|         });	    
 | |
| 	    
 | |
| 	    return false;
 | |
| 	});
 | |
| 	//*** Port Forwarding (end) *** 
 | |
|             
 | |
|     //*** Load Balancer (begin) ***            
 | |
|     var createLoadBalancerRow = $("#submenu_content_network #load_balancer_panel #create_load_balancer_row");
 | |
|     var loadBalancerGrid = $("#submenu_content_network #load_balancer_panel #grid_content");        
 | |
|     
 | |
|     function listLoadBalancerRules() {            
 | |
|         var ipSelected = $("#submenu_content_network #ip_select").val();
 | |
| 		if (!isUser()) {
 | |
| 			ipSelected = ipPanel.data("ip_address");
 | |
| 		}
 | |
|         if(ipSelected == null || ipSelected.length == 0) 
 | |
|             return;              
 | |
|         $.ajax({
 | |
| 	   data: createURL("command=listLoadBalancerRules&publicip=" + ipSelected + "&response=json"),
 | |
|             dataType: "json",
 | |
|             success: function(json) {		                    
 | |
|                 var items = json.listloadbalancerrulesresponse.loadbalancerrule;    
 | |
|                 loadBalancerGrid.empty();                         		    		      	    		
 | |
|                 if (items != null && items.length > 0) {				        			        
 | |
| 	                for (var i = 0; i < items.length; i++) {
 | |
| 		                var template = $("#load_balancer_template").clone(true);
 | |
| 		                loadBalancerJsonToTemplate(items[i], template); 
 | |
| 		                loadBalancerGrid.append(template.show());						   
 | |
| 	                }			    
 | |
|                 } 	        	      		    						
 | |
|             }
 | |
|         });
 | |
|     }        
 | |
|     
 | |
|     function refreshCreateLoadBalancerRow() {
 | |
|         createLoadBalancerRow.find("#name").val("");  
 | |
| 	    createLoadBalancerRow.find("#public_port").val("");
 | |
| 	    createLoadBalancerRow.find("#private_port").val("");
 | |
| 	    createLoadBalancerRow.find("#algorithm_select").val("roundrobin");  
 | |
|     }
 | |
|     
 | |
|     var loadBalancerIndex = 0;
 | |
| 	function loadBalancerJsonToTemplate(json, template) {	
 | |
| 	    (loadBalancerIndex++ % 2 == 0)? template.find("#row_container").addClass("smallrow_even"): template.find("#row_container").addClass("smallrow_odd");		
 | |
| 
 | |
| 	    var loadBalancerId = json.id;	    
 | |
| 	    template.attr("id", "loadBalancer_" + loadBalancerId).data("loadBalancerId", loadBalancerId);		    
 | |
| 	    
 | |
| 	    template.find("#row_container #name").text(json.name);
 | |
| 	    template.find("#row_container_edit #name").val(json.name);
 | |
| 	    
 | |
| 	    template.find("#row_container #public_port").text(json.publicport);
 | |
| 	    template.find("#row_container_edit #public_port").text(json.publicport);
 | |
| 	    
 | |
| 	    template.find("#row_container #private_port").text(json.privateport);
 | |
| 	    template.find("#row_container_edit #private_port").val(json.privateport);
 | |
| 	    
 | |
| 	    template.find("#row_container #algorithm").text(json.algorithm);	
 | |
| 	    template.find("#row_container_edit #algorithm").val(json.algorithm);			    	    
 | |
| 	    
 | |
| 	    template.find("#manage_link").unbind("click").bind("click", function(event){		        
 | |
| 	        var vmSubgrid = template.find("#vm_subgrid");
 | |
| 	        if(vmSubgrid.css("display") == "none") {
 | |
| 	            vmSubgrid.empty();         
 | |
| 	            $.ajax({
 | |
| 				    cache: false,
 | |
| 			       data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId+"&response=json"),
 | |
| 				    dataType: "json",
 | |
| 				    success: function(json) {					        
 | |
| 					    var instances = json.listloadbalancerruleinstancesresponse.loadbalancerruleinstance;						
 | |
| 					    if (instances != null && instances.length > 0) {							
 | |
| 						    for (var i = 0; i < instances.length; i++) {                                  
 | |
|                                 var lbVmTemplate = $("#load_balancer_vm_template").clone();	                                    									    											    											    
 | |
| 							    var obj = {"loadBalancerId": loadBalancerId, "vmId": instances[i].id, "vmName": getVmName(instances[i].name, instances[i].displayname), "vmPrivateIp": instances[i].privateip};	
 | |
| 							    lbVmObjToTemplate(obj, lbVmTemplate);		
 | |
| 							    template.find("#vm_subgrid").append(lbVmTemplate.show());	                                   
 | |
| 						    }
 | |
| 					    } 
 | |
| 				    }
 | |
| 			    });        
 | |
| 	            vmSubgrid.show();		           
 | |
| 	        }
 | |
| 	        else {
 | |
| 	            vmSubgrid.hide();
 | |
| 	        }	
 | |
| 	            
 | |
| 	        var addVmToLbRow = template.find("#add_vm_to_lb_row");
 | |
| 	        (addVmToLbRow.css("display") == "none")?addVmToLbRow.show():addVmToLbRow.hide();	
 | |
| 	            	        
 | |
| 	        return false;
 | |
| 	    });
 | |
| 	    
 | |
| 	    var loadingContainer = template.find("#loading_container");		
 | |
|         var rowContainer = template.find("#row_container");      
 | |
|         var rowContainerEdit = template.find("#row_container_edit");  
 | |
| 	    		    
 | |
| 	    template.find("#delete_link").unbind("click").bind("click", function(event){                            
 | |
|             loadingContainer.find(".adding_text").text("Deleting....");	
 | |
|             loadingContainer.show();  
 | |
|             rowContainer.hide();                    
 | |
| 			$.ajax({
 | |
| 			       data: createURL("command=deleteLoadBalancerRule&id="+loadBalancerId+"&response=json"),
 | |
| 				dataType: "json",
 | |
| 				success: function(json) {
 | |
| 					var lbJSON = json.deleteloadbalancerruleresponse;
 | |
| 					var timerKey = "deleteLoadBalancerRuleJob_"+lbJSON.jobid;
 | |
| 					$("body").everyTime(
 | |
| 						5000,
 | |
| 						timerKey,
 | |
| 						function() {
 | |
| 							$.ajax({
 | |
| 							       data: createURL("command=queryAsyncJobResult&jobId="+lbJSON.jobid+"&response=json"),
 | |
| 								dataType: "json",
 | |
| 								success: function(json) {
 | |
| 									var result = json.queryasyncjobresultresponse;
 | |
| 									if (result.jobstatus == 0) {
 | |
| 										return; //Job has not completed
 | |
| 									} else {
 | |
| 										$("body").stopTime(timerKey);
 | |
| 										if (result.jobstatus == 1) { // Succeeded												
 | |
| 											template.slideUp("slow", function() {
 | |
| 												$(this).remove();													
 | |
| 											});
 | |
| 										} else if (result.jobstatus == 2) { // Failed
 | |
| 											loadingContainer.hide(); 	   
 | |
| 	                                        rowContainer.show();	
 | |
| 										}
 | |
| 									}
 | |
| 								},
 | |
| 								error: function(XMLHttpResponse) {										
 | |
| 									handleError(XMLHttpResponse);
 | |
| 									$("body").stopTime(timerKey);
 | |
| 									loadingContainer.hide(); 	   
 | |
| 	                                rowContainer.show();	
 | |
| 								}
 | |
| 							});
 | |
| 						},
 | |
| 						0
 | |
| 					);
 | |
| 				}
 | |
| 			});	     
 | |
| 	        return false;
 | |
| 	    });		
 | |
| 	    		    
 | |
|         template.find("#edit_link").unbind("click").bind("click", function(event){   		    
 | |
| 	        rowContainer.hide();
 | |
| 	        rowContainerEdit.show();
 | |
| 	    });
 | |
| 	    
 | |
| 	    template.find("#cancel_link").unbind("click").bind("click", function(event){   		    
 | |
| 	        rowContainer.show();
 | |
| 	        rowContainerEdit.hide();
 | |
| 	    });
 | |
| 	    
 | |
| 	    template.find("#save_link").unbind("click").bind("click", function(event){          		       
 | |
| 	        // validate values			       
 | |
| 		    var isValid = true;		
 | |
| 		    isValid &= validateString("Name", rowContainerEdit.find("#name"), rowContainerEdit.find("#name_errormsg"));					    
 | |
| 		    isValid &= validateNumber("Private Port", rowContainerEdit.find("#private_port"), rowContainerEdit.find("#private_port_errormsg"), 1, 65535);				
 | |
| 		    if (!isValid) return;		    		        
 | |
| 		    
 | |
| 	        var loadingContainer = template.find(".adding_loading");	                        
 | |
|             loadingContainer.find(".adding_text").text("Saving....");	
 | |
|             loadingContainer.show();  
 | |
|             rowContainerEdit.hide();      
 | |
| 		        		    	       
 | |
| 	        var name = rowContainerEdit.find("#name").val();  		        
 | |
| 	        var privatePort = rowContainerEdit.find("#private_port").val();
 | |
| 	        var algorithm = rowContainerEdit.find("#algorithm_select").val();  
 | |
| 		    		    
 | |
| 	        var array1 = [];
 | |
| 	        array1.push("&id=" + loadBalancerId);                
 | |
|             array1.push("&name=" + name);                  
 | |
|             array1.push("&privateport=" + privatePort);
 | |
|             array1.push("&algorithm=" + algorithm);
 | |
|                                                           
 | |
|             $.ajax({
 | |
| 	       data: createURL("command=updateLoadBalancerRule&response=json"+array1.join("")),
 | |
| 				dataType: "json",
 | |
| 				success: function(json) {					    		   	    									 
 | |
| 					var jobId = json.updateloadbalancerruleresponse.jobid;					        
 | |
| 			        var timerKey = "updateloadbalancerruleJob"+jobId;
 | |
| 			        
 | |
|                     $("body").everyTime(2000, timerKey, function() {
 | |
| 					    $.ajax({
 | |
| 						   data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
 | |
| 						    dataType: "json",
 | |
| 						    success: function(json) {										       						   
 | |
| 							    var result = json.queryasyncjobresultresponse;									    
 | |
| 							    if (result.jobstatus == 0) {
 | |
| 								    return; //Job has not completed
 | |
| 							    } else {											    
 | |
| 								    $("body").stopTime(timerKey);
 | |
| 								    if (result.jobstatus == 1) { // Succeeded										        								        						        								    
 | |
| 									    var items = result.loadbalancer;											         	
 | |
|                                         loadBalancerJsonToTemplate(items[0],template);
 | |
|                                         loadingContainer.hide(); 	   
 | |
|                                         rowContainer.show();						                                                               
 | |
| 								    } else if (result.jobstatus == 2) { //Fail
 | |
| 								        loadingContainer.hide(); 		
 | |
| 							            rowContainer.show(); 
 | |
| 									    $("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");											    					    
 | |
| 								    }
 | |
| 							    }
 | |
| 						    },
 | |
| 						    error: function(XMLHttpResponse) {	
 | |
| 						        handleError(XMLHttpResponse);								        
 | |
| 							    $("body").stopTime(timerKey);
 | |
| 							    loadingContainer.hide(); 		
 | |
| 							    rowContainer.show(); 									    								    
 | |
| 						    }
 | |
| 					    });
 | |
| 				    }, 0);							 
 | |
| 				 },
 | |
| 				 error: function(XMLHttpResponse) {
 | |
| 				     handleError(XMLHttpResponse);		
 | |
| 				     loadingContainer.hide(); 		
 | |
| 					 rowContainer.show(); 							 
 | |
| 				 }
 | |
| 			 });                   
 | |
| 	    });	  		    
 | |
| 	    
 | |
| 	    refreshLbVmSelect(template, json.id);     
 | |
| 	    		   
 | |
| 	    template.find("#add_vm_to_lb_row #add_link").unbind("click").bind("click", function(event){		        
 | |
| 	        var vmOption =  template.find("#add_vm_to_lb_row #vm_select option:selected");
 | |
| 	        var vmId = vmOption.val();  		        
 | |
| 	        var vmName = vmOption.data("vmName");
 | |
| 	        var vmPrivateIp = vmOption.data("vmPrivateIp"); 
 | |
| 			if(vmId	== null || vmId.length == 0)
 | |
| 			    return;						    				
 | |
| 			var loading = template.find("#adding_loading").show();  
 | |
| 			var rowContainer =  template.find("#adding_row_container").hide();
 | |
| 			    	
 | |
| 			$.ajax({
 | |
| 			       data: createURL("command=assignToLoadBalancerRule&id="+loadBalancerId+"&virtualmachineid="+vmId+"&response=json"),
 | |
| 				dataType: "json",
 | |
| 				success: function(json) {
 | |
| 					var lbInstanceJSON = json.assigntoloadbalancerruleresponse;
 | |
| 					var timerKey = "lbInstanceNew"+lbInstanceJSON.jobid;						
 | |
| 					$("body").everyTime(
 | |
| 						5000,
 | |
| 						timerKey,
 | |
| 						function() {
 | |
| 							$.ajax({
 | |
| 							       data: createURL("command=queryAsyncJobResult&jobId="+lbInstanceJSON.jobid+"&response=json"),
 | |
| 								dataType: "json",
 | |
| 								success: function(json) {
 | |
| 									var result = json.queryasyncjobresultresponse;
 | |
| 									if (result.jobstatus == 0) {
 | |
| 										return; //Job has not completed
 | |
| 									} else {
 | |
| 										$("body").stopTime(timerKey);
 | |
| 										if (result.jobstatus == 1) { // Succeeded											    
 | |
| 										    var lbVmTemplate = $("#load_balancer_vm_template").clone();											    											    											    
 | |
| 										    var obj = {"loadBalancerId": loadBalancerId, "vmId": vmId, "vmName": vmName, "vmPrivateIp": vmPrivateIp};	
 | |
| 										    lbVmObjToTemplate(obj, lbVmTemplate);		
 | |
| 										    template.find("#vm_subgrid").append(lbVmTemplate.show());	
 | |
| 										    refreshLbVmSelect(template, loadBalancerId);											    
 | |
| 			                                loading.hide();  
 | |
| 			                                rowContainer.show(); 
 | |
| 										} else if (result.jobstatus == 2) { // Failed
 | |
| 											$("#dialog_error").html("<p style='color:red'><b>Operation error:</b></p><br/><p style='color:red'>"+ sanitizeXSS(result.jobresult)+"</p>").dialog("open");
 | |
| 											loading.hide();  
 | |
| 											rowContainer.show();  
 | |
| 										}
 | |
| 									}
 | |
| 								},
 | |
| 								error: function(XMLHttpResponse) {										
 | |
| 									handleError(XMLHttpResponse);
 | |
| 									$("body").stopTime(timerKey);
 | |
| 									loading.hide();   
 | |
| 									rowContainer.show(); 
 | |
| 								}
 | |
| 							});
 | |
| 						},
 | |
| 						0
 | |
| 					);
 | |
| 				},
 | |
| 				error: function(XMLHttpResponse) {
 | |
| 			        handleError(XMLHttpResponse);
 | |
| 			        loading.hide();  
 | |
| 			        rowContainer.show();  
 | |
| 				}
 | |
| 			});	        
 | |
| 	        return false;
 | |
| 	    });  
 | |
| 	}	
 | |
| 			
 | |
| 	function lbVmObjToTemplate(obj, template) {
 | |
| 	    template.find("#vm_name").text(obj.vmName);
 | |
| 		template.find("#vm_private_ip").text(obj.vmPrivateIp);			
 | |
| 		template.find("#delete_link").bind("click", function(event){				   
 | |
| 		    var loading = template.find("#deleting_loading").show();
 | |
| 		    var rowContainer = template.find("#deleting_row_container").hide();
 | |
| 		    						    		
 | |
| 	        $.ajax({
 | |
| 		       data: createURL("command=removeFromLoadBalancerRule&id="+obj.loadBalancerId+"&virtualmachineid="+obj.vmId+"&response=json"),
 | |
| 				dataType: "json",
 | |
| 				success: function(json) {
 | |
| 					var lbJSON = json.removefromloadbalancerruleresponse;
 | |
| 					var timerKey = "removeVmFromLb"+obj.vmId;
 | |
| 					$("body").everyTime(
 | |
| 						5000,
 | |
| 						timerKey,
 | |
| 						function() {
 | |
| 							$.ajax({
 | |
| 							       data: createURL("command=queryAsyncJobResult&jobId="+lbJSON.jobid+"&response=json"),
 | |
| 								dataType: "json",
 | |
| 								success: function(json) {
 | |
| 									var result = json.queryasyncjobresultresponse;
 | |
| 									if (result.jobstatus == 0) {
 | |
| 										return; //Job has not completed
 | |
| 									} else {
 | |
| 										$("body").stopTime(timerKey);
 | |
| 										if (result.jobstatus == 1) { // Succeeded											    
 | |
| 										    refreshLbVmSelect($("#loadBalancer_" + obj.loadBalancerId), obj.loadBalancerId);
 | |
| 											template.fadeOut("slow", function(event) {
 | |
| 												$(this).remove();
 | |
| 											});
 | |
| 										} else if (result.jobstatus == 2) { // Failed													
 | |
| 											$("#dialog_error").html("<p style='color:red'>We were unable to remove the Virtual Instance: "+vmName + " from your load balancer policy.  Please try again.").dialog("open");
 | |
| 											loading.hide();
 | |
| 											rowContainer.show();
 | |
| 										}
 | |
| 									}
 | |
| 								},
 | |
| 								error: function(XMLHttpResponse) {
 | |
| 									$("body").stopTime(timerKey);
 | |
| 									handleError(XMLHttpResponse);
 | |
| 									loading.hide();
 | |
| 									rowContainer.show();
 | |
| 								}
 | |
| 							});
 | |
| 						},
 | |
| 						0
 | |
| 					);
 | |
| 				},
 | |
| 				error: function(XMLHttpResponse) {
 | |
| 				    handleError(XMLHttpResponse);
 | |
| 				    loading.hide();
 | |
| 				    rowContainer.show();
 | |
| 				}
 | |
| 			});		
 | |
| 		    return false;
 | |
| 		});						
 | |
|     }		
 | |
| 	
 | |
| 	function refreshLbVmSelect(template, loadBalancerId) {		
 | |
| 	    var vmSelect = template.find("#add_vm_to_lb_row #vm_select");		    	    
 | |
|         // Load the select box with the VMs that haven't been applied a LB rule to.	        
 | |
| 	    $.ajax({
 | |
| 		    cache: false,
 | |
| 		       data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId+"&applied=false&response=json"),
 | |
| 		    dataType: "json",
 | |
| 		    success: function(json) {				        			        
 | |
| 			    var instances = json.listloadbalancerruleinstancesresponse.loadbalancerruleinstance;
 | |
| 			    vmSelect.empty();
 | |
| 			    if (instances != null && instances.length > 0) {
 | |
| 				    for (var i = 0; i < instances.length; i++) {
 | |
| 				        var vmName = getVmName(instances[i].name, instances[i].displayname);
 | |
| 					    html = $("<option value='" + instances[i].id + "'>" + vmName + "</option>")
 | |
| 					    html.data("vmPrivateIp", instances[i].privateip).data("vmName", vmName);
 | |
| 					    vmSelect.append(html); 
 | |
| 				    }
 | |
| 			    } else {
 | |
| 				    vmSelect.append("<option value=''>None Available</option>");
 | |
| 			    }
 | |
| 		    }
 | |
| 	    });			
 | |
| 	}
 | |
| 			
 | |
| 	createLoadBalancerRow.find("#add_link").bind("click", function(event){			    
 | |
| 	    // validate values		    
 | |
| 		var isValid = true;					
 | |
| 		isValid &= validateString("Name", createLoadBalancerRow.find("#name"), createLoadBalancerRow.find("#name_errormsg"));
 | |
| 		isValid &= validateNumber("Public Port", createLoadBalancerRow.find("#public_port"), createLoadBalancerRow.find("#public_port_errormsg"), 1, 65535);
 | |
| 		isValid &= validateNumber("Private Port", createLoadBalancerRow.find("#private_port"), createLoadBalancerRow.find("#private_port_errormsg"), 1, 65535);				
 | |
| 		if (!isValid) return;
 | |
| 		 
 | |
| 		var template = $("#load_balancer_template").clone();	
 | |
| 		loadBalancerGrid.append(template.show());		
 | |
| 		
 | |
| 		var loadingImg = template.find(".adding_loading");		
 | |
|         var rowContainer = template.find("#row_container");                  
 | |
|         loadingImg.find(".adding_text").text("Adding....");	
 | |
|         loadingImg.show();  
 | |
|         rowContainer.hide();            			 
 | |
| 		 
 | |
| 	    var ipAddress = $(this).data("ip");	    
 | |
| 	    var name = createLoadBalancerRow.find("#name").val();  
 | |
| 	    var publicPort = createLoadBalancerRow.find("#public_port").val();
 | |
| 	    var privatePort = createLoadBalancerRow.find("#private_port").val();
 | |
| 	    var algorithm = createLoadBalancerRow.find("#algorithm_select").val();  
 | |
| 	    		   
 | |
| 	    var array1 = [];
 | |
|         array1.push("&publicip="+ipAddress);    
 | |
|         array1.push("&name="+name);              
 | |
|         array1.push("&publicport="+publicPort);
 | |
|         array1.push("&privateport="+privatePort);
 | |
|         array1.push("&algorithm="+algorithm);
 | |
|        
 | |
|         $.ajax({
 | |
| 	   data: createURL("command=createLoadBalancerRule&response=json"+array1.join("")),
 | |
| 			dataType: "json",
 | |
| 			success: function(json) {					    	    
 | |
| 				var items = json.createloadbalancerruleresponse.loadbalancerrule;						
 | |
| 	            loadBalancerJsonToTemplate(items[0],template);
 | |
| 	            loadingImg.hide(); 	   
 | |
| 	            rowContainer.show();	
 | |
| 	            refreshCreateLoadBalancerRow();	            	
 | |
| 			},
 | |
| 		    error: function(XMLHttpResponse) {				    
 | |
| 			    handleError(XMLHttpResponse);
 | |
| 			    template.slideUp("slow", function() {
 | |
| 					$(this).remove();
 | |
| 				});
 | |
| 		    }			
 | |
| 		});  
 | |
| 	    
 | |
| 	    return false;
 | |
| 	});
 | |
| 	//*** Load Balancer (begin) ***
 | |
|         
 | |
|    
 | |
|     $("#submenu_network").bind("click", function(event) {		        
 | |
|         currentSubMenu.removeClass().addClass("submenu_links_off");   
 | |
| 		currentSubMenu = $(this);
 | |
| 		currentSubMenu.removeClass().addClass("submenu_links_on");
 | |
| 		
 | |
| 		var submenuContent = $("#submenu_content_network").show();
 | |
| 		$("#submenu_content_network_groups").hide();			
 | |
| 	    
 | |
| 	    if(isAdmin() || isDomainAdmin()) {
 | |
| 	        submenuContent.find(".select_directipbg_admin").show();
 | |
| 	        submenuContent.find(".select_directipbg_user").hide();	
 | |
| 	        populateDomainDropdown();	    
 | |
| 	    } else {	        
 | |
| 	        submenuContent.find(".select_directipbg_admin").hide();
 | |
| 	        submenuContent.find(".select_directipbg_user").show();
 | |
| 	        RefreshIpDropDown();
 | |
| 	    }
 | |
| 	    		    
 | |
| 		return false;
 | |
| 	});
 | |
| 
 | |
| 	var ipMid = $("#submenu_content_network #ip_descriptionbox_mid");
 | |
| 	
 | |
| 	$("#submenu_content_network #show_last_search").bind("click", function(event){
 | |
|         $("#submenu_content_network").find("#show_last_search").hide();	
 | |
|         hidePfLbArea(); 							
 | |
| 		var ips = ipListContainer.children();			
 | |
| 		for (var i = 0; i < ips.length; i++) {
 | |
| 			var ip = $(ips[i]);
 | |
| 			ip.show();
 | |
| 							
 | |
| 			if(isIpManageable(ip.data("domainid"), ip.data("account")) == true) 
 | |
| 			    ip.find("#ip_manage").show();	
 | |
| 		}        
 | |
|         return false;
 | |
|     });
 | |
| 	
 | |
| 	ipListContainer.bind("click", function(event) {
 | |
| 		var target = $(event.target);
 | |
| 		var id = target.attr("id");
 | |
| 		var targetIp = target.data("ip");
 | |
| 		var domainid = target.data("domainid");
 | |
| 		var account = target.data("account");	
 | |
| 		
 | |
| 		switch (id) {
 | |
| 			case "ip_manage" :
 | |
| 				var ips = ipListContainer.children();
 | |
| 				var ipSelected = null;
 | |
| 				var first = false;
 | |
| 				ipMid.css("height", ipMid.height());
 | |
| 				for (var i = 0; i < ips.length; i++) {
 | |
| 					var ip = $(ips[i]);
 | |
| 					if (ip.data("ip") != targetIp) {
 | |
| 						ip.fadeOut("fast");
 | |
| 					} else {
 | |
| 						if (i == 0) first = true;
 | |
| 						var ipPosition = ip.position();
 | |
| 						ipSelected = ip.css("position", "absolute").css("top", ipPosition.top);
 | |
| 					}
 | |
| 				}
 | |
| 				var animationSpeed = 2000;
 | |
| 				if (first) {
 | |
| 					animationSpeed = 500;
 | |
| 				}
 | |
| 				ipSelected.animate({top: '24px'}, animationSpeed, function() {
 | |
| 					$(this).css("position", "static").css("float", "left");
 | |
| 					ipMid.css("height", "auto");
 | |
| 					target.hide();
 | |
| 					$("#submenu_content_network").find("#show_last_search").show();
 | |
| 					showPfLbArea(targetIp, domainid, account);
 | |
| 				});
 | |
| 				break;
 | |
| 			case "ip_release" :
 | |
| 				$("#dialog_confirmation")
 | |
| 					.html("<p>Please confirm you want to release the IP address: <b>"+targetIp+"</b> from your account.</p>")
 | |
| 					.dialog('option', 'buttons', { 						
 | |
| 						"Confirm": function() { 
 | |
| 							$(this).dialog("close"); 
 | |
| 							
 | |
| 							$("#submenu_content_network #overlay_white").show();
 | |
| 			                $("#submenu_content_network #loading_gridtable").find("#message").text("Releasing IP....");					    
 | |
| 			                $("#submenu_content_network #loading_gridtable").show();	
 | |
| 			                								
 | |
| 							$.ajax({
 | |
| 							  data: createURL("command=disassociateIpAddress&ipAddress="+targetIp+"&response=json"),
 | |
| 								dataType: "json",
 | |
| 								success: function(json) {				    		
 | |
| 									$("#dialog_info").html("<p>Your IP address <b>" + targetIp + "</b> has been released</p>").dialog("open");
 | |
| 									$("#submenu_content_network #overlay_white").hide();
 | |
| 			                        $("#submenu_content_network #loading_gridtable").hide();
 | |
| 									if (isUser()) {
 | |
| 										RefreshIpDropDown();
 | |
| 									} else {
 | |
| 										// Execute the codepath for showing last search result.											
 | |
| 										var ips = ipListContainer.children();	 
 | |
| 				                        if(ips != null && ips.length > 0) {					                            
 | |
| 				                            for (var i = 0; i < ips.length; i++) {
 | |
| 					                            var ip = $(ips[i]);
 | |
| 					                            if (ip.data("ip") == targetIp) {
 | |
| 						                            ip.fadeOut("fast", function(){							                                
 | |
| 						                                $(this).remove(); 
 | |
| 						                                							                                
 | |
| 						                                if(ipPanel.data("ip_address") == targetIp)
 | |
|                                                             ipPanel.removeData("ip_address");
 | |
| 						                                  
 | |
| 						                                if(ipListContainer.children().length == 0) { 
 | |
| 					                                        $("#submenu_content_network #show_last_search").hide();
 | |
| 					                                    } else {  
 | |
| 					                                        $("#submenu_content_network #show_last_search").show();
 | |
| 					                                        $("#submenu_content_network #show_last_search").click();
 | |
| 					                                    }	                               
 | |
| 						                            });		
 | |
| 						                        }		                    			                        
 | |
| 				                            }                           
 | |
| 				                        }										
 | |
| 									}
 | |
| 								},
 | |
| 								error: function(XMLHttpResponse) {		                   
 | |
| 	                                handleError(XMLHttpResponse);	
 | |
| 								    $("#submenu_content_network #overlay_white").hide();
 | |
| 			                        $("#submenu_content_network #loading_gridtable").hide();
 | |
| 								}
 | |
| 							}); 	
 | |
| 						}, 
 | |
| 						"Cancel": function() { 
 | |
| 							$(this).dialog("close"); 
 | |
| 						} 
 | |
| 					}).dialog("open");
 | |
| 				break;
 | |
| 			default :
 | |
| 				break;
 | |
| 		}
 | |
| 		return false;
 | |
| 	});
 | |
| 	
 | |
| 	//*** Network (end) ******************************************************************************
 | |
| 	
 | |
| 	//*** Network Group (begin) **********************************************************************	   
 | |
|     function networkGroupJSONToTemplate(json, template) {	       
 | |
|         (index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");	    
 | |
|         template.attr("id", "networkGroup_"+json.id).data("networkGroupId", json.id).data("domainId", json.domainid).data("account",json.account).data("networkGroupName", sanitizeXSS(json.name));	      		    				   
 | |
| 	    template.find("#delete_link, #ingress_rule_link").data("parent_template_id", "networkGroup_"+json.id);
 | |
| 	    
 | |
| 	    template.find("#id").text(json.id);
 | |
| 	    template.find("#name").text(json.name);
 | |
| 	    template.find("#description").text(json.description);	      
 | |
| 	    template.find("#domain").text(json.domain); 
 | |
| 	    template.find("#account").text(json.account);  		 
 | |
| 	    
 | |
| 		// disable delete link from the default group
 | |
| 	    if(json.name == 'default' && json.description == 'Default Network Group') {
 | |
| 			template.find("#delete_link").hide();
 | |
| 		} else {
 | |
| 			if(json.ingressrule == null || json.ingressrule.length == 0)
 | |
| 				template.find("#delete_link").show();
 | |
| 			else
 | |
| 				template.find("#delete_link").hide();
 | |
| 		}
 | |
|     }
 | |
|     	    
 | |
|     function listNetworkGroups() {       
 | |
|         var submenuContent = $("#submenu_content_network_groups");                                    
 | |
| 	     
 | |
| 	    var commandString;            
 | |
| 		var advanced = submenuContent.find("#search_button").data("advanced");                    
 | |
| 		if (advanced != null && advanced) {		
 | |
| 		    var name = submenuContent.find("#advanced_search #adv_search_name").val();	   
 | |
| 		    var virtualMachineId = submenuContent.find("#advanced_search #adv_search_vm").val();				   
 | |
| 		    var domainId = submenuContent.find("#advanced_search #adv_search_domain").val();
 | |
| 		    var account = submenuContent.find("#advanced_search #adv_search_account").val();
 | |
| 		    var moreCriteria = [];								
 | |
| 			if (name!=null && trim(name).length > 0) 
 | |
| 				moreCriteria.push("&networkgroupname="+encodeURIComponent(trim(name)));						
 | |
| 			if (virtualMachineId!=null && virtualMachineId.length > 0) 
 | |
| 				moreCriteria.push("&virtualmachineid="+encodeURIComponent(virtualMachineId));	   
 | |
| 			if (domainId!=null && domainId.length > 0) 
 | |
| 				moreCriteria.push("&domainid="+domainId);		
 | |
| 			if (account!=null && account.length > 0) 
 | |
| 				moreCriteria.push("&account="+account);			
 | |
| 			commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&response=json";		
 | |
| 		} else {    
 | |
| 		     var moreCriteria = [];		
 | |
| 		    if(domainId!=null)
 | |
| 		        moreCriteria.push("&domainid="+domainId);				   			  
 | |
|             var searchInput = submenuContent.find("#search_input").val();            
 | |
|             if (searchInput != null && searchInput.length > 0) 
 | |
|                 commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&keyword=" + searchInput + "&response=json"
 | |
|             else
 | |
|                 commandString = "command=listNetworkGroups&page=" + currentPage + moreCriteria.join("") + "&response=json";		
 | |
|         }    	              
 | |
|         
 | |
|         //listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate);         
 | |
|         listItems(submenuContent, commandString, "listnetworkgroupsresponse", "networkgroup", $("#network_group_template"), networkGroupJSONToTemplate);          
 | |
|     }	    
 | |
|     
 | |
|     submenuContentEventBinder($("#submenu_content_network_groups"), listNetworkGroups);	   
 | |
|     
 | |
|     $("#submenu_network_groups").bind("click", function(event) {		        
 | |
| 		currentSubMenu.removeClass().addClass("submenu_links_off");   
 | |
| 		currentSubMenu = $(this);
 | |
| 		currentSubMenu.removeClass().addClass("submenu_links_on");
 | |
| 		
 | |
| 		var submenuContent = $("#submenu_content_network_groups").show();
 | |
| 		$("#submenu_content_network").hide();	
 | |
| 					
 | |
| 		if (isAdmin())
 | |
| 	        submenuContent.find("#adv_search_domain_li, #adv_search_account_li").show();
 | |
| 				
 | |
| 		currentPage = 1;			
 | |
| 		listNetworkGroups();			
 | |
| 		return false;
 | |
| 	});	
 | |
| 	
 | |
| 	$("#submenu_content_network_groups").find("#grid_content").bind("click", function(event) {		
 | |
| 	    var link = $(event.target);			  
 | |
| 	    var parentTemplateId = link.data("parent_template_id"); 
 | |
| 	    var template = $(("#"+parentTemplateId));		
 | |
| 	    var networkGroupId = template.data("networkGroupId");    		
 | |
| 	    var domainId = template.data("domainId");
 | |
| 	    var account = template.data("account");
 | |
| 	    var networkGroupId = template.data("networkGroupId");	
 | |
| 	    var networkGroupName = template.data("networkGroupName");
 | |
| 	       
 | |
| 	    var submenuContent = $("#submenu_content_network_groups");		   
 | |
| 	    switch(event.target.id) {
 | |
| 	        case "delete_link":   
 | |
| 	            if(template.find("#ingress_rule_panel").css("display")=="block") //if network group's ingress rule grid is poped down, close it.
 | |
| 					template.find("#ingress_rule_grid").click();   
 | |
| 	            var loadingImg = template.find(".adding_loading");		
 | |
|                 var rowContainer = template.find("#row_container");                                                
 | |
|                 loadingImg.find(".adding_text").text("Deleting....");	
 | |
|                 loadingImg.show();  
 | |
|                 rowContainer.hide();                    	                                        
 | |
|                                    
 | |
|                 var array1 = [];
 | |
|                 array1.push("&domainid="+domainId);
 | |
|                 array1.push("&account="+account);
 | |
|                 array1.push("&name="+networkGroupName);                    
 | |
|                 
 | |
|                 $.ajax({
 | |
| 		            data: createURL("command=deleteNetworkGroup&response=json" + array1.join("")), 
 | |
|                     dataType: "json",
 | |
|                     success: function(json) {		                        	                                               				        
 | |
|                         template.slideUp("slow", function() { $(this).remove() });
 | |
| 						changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1);           		    					
 | |
|                     },
 | |
|                     error: function(XMLHttpResponse) {                                                			    
 | |
| 		                handleError(XMLHttpResponse);
 | |
| 		                loadingImg.hide();  
 | |
|                         rowContainer.show();								
 | |
|                     }
 | |
|                 });	 		        
 | |
| 	            break;	    
 | |
| 	        
 | |
| 	        case "ingress_rule_link":			                     		            		        
 | |
| 				var expanded = link.data("expanded");
 | |
| 				if (expanded == null || expanded == false) {						 					    			    
 | |
| 				    $.ajax({
 | |
| 					   data: createURL("command=listNetworkGroups"+"&domainid="+domainId+"&account="+account+"&networkgroupname="+networkGroupName+"&response=json"),
 | |
| 	                    dataType: "json",		                    
 | |
| 	                    success: function(json) {			                        		                       
 | |
| 	                        var items = json.listnetworkgroupsresponse.networkgroup[0].ingressrule;                  
 | |
| 	                        var grid = template.find("#ingress_rule_grid");								
 | |
| 					        if(grid.find("#network_group_ingress_rule_add_row").length==0) {
 | |
| 					            var row = $("#network_group_ingress_rule_add_row").clone().show();
 | |
| 	                            row.find("#network_group_ingress_rule_add_link").data("parent_template_id", parentTemplateId);
 | |
| 	                            grid.append(row);
 | |
| 					        }				
 | |
| 					        if (items != null && items.length > 0) {									    
 | |
| 					            grid.empty();		
 | |
| 					            
 | |
| 					            //need to append "add ingress rule" row again after emptying grid.							           
 | |
| 					            var row = $("#network_group_ingress_rule_add_row").clone().show();
 | |
| 	                            row.find("#network_group_ingress_rule_add_link").data("parent_template_id", parentTemplateId);
 | |
| 	                            grid.append(row);
 | |
| 					            						    				    															
 | |
| 						        for (var i = 0; i < items.length; i++) {			
 | |
| 						            var newTemplate = $("#network_group_ingress_rule_template").clone(true);
 | |
| 	                                ingressRuleJSONToTemplate(items[i], newTemplate).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName); 
 | |
| 	                                grid.append(newTemplate.show());																	
 | |
| 						        }					        
 | |
| 					        }
 | |
| 					        link.removeClass().addClass("vm_botactionslinks_up");
 | |
| 					        template.find("#ingress_rule_panel").slideDown("slow");						
 | |
| 					        link.data("expanded", true);                          			   
 | |
| 	                    }
 | |
|                     });			
 | |
| 				} else {
 | |
| 					link.removeClass().addClass("vm_botactionslinks_down");
 | |
| 					template.find("#ingress_rule_panel").slideUp("slow");
 | |
| 					link.data("expanded", false);
 | |
| 				}
 | |
| 				break;	
 | |
| 				
 | |
| 		    case "network_group_ingress_rule_add_link":	       
 | |
| 		        dialogAddIngressRule.find("#start_port").val("");
 | |
| 		        cleanErrMsg(dialogAddIngressRule.find("#start_port"), dialogAddIngressRule.find("#start_port_errormsg"));
 | |
| 		        
 | |
| 		        dialogAddIngressRule.find("#end_port").val("");
 | |
| 		        cleanErrMsg(dialogAddIngressRule.find("#end_port"), dialogAddIngressRule.find("#end_port_errormsg"));
 | |
| 		        
 | |
| 		        dialogAddIngressRule.find("#protocol").val("TCP");
 | |
| 		        
 | |
| 		        dialogAddIngressRule.find("#cidr_container").empty();
 | |
| 		        dialogAddIngressRule.find("#add_more_cidr").click();
 | |
| 		        
 | |
| 		        dialogAddIngressRule.find("#account_networkgroup_container").empty();
 | |
| 		        dialogAddIngressRule.find("#add_more_account_networkgroup").click();
 | |
| 		        
 | |
| 		        $("#dialog_add_ingress_rule")
 | |
| 	            .dialog('option', 'buttons', { 			    
 | |
| 		            "Add": function() { 
 | |
| 		                var thisDialog = $(this);
 | |
|     			    	
 | |
|     			    	var moreCriteria = [];	
 | |
|     			    	moreCriteria.push("&domainid="+domainId);
 | |
|                         moreCriteria.push("&account="+account);
 | |
|                         moreCriteria.push("&networkgroupname="+networkGroupName);   
 | |
|                         
 | |
|     			    	var protocol = thisDialog.find("#protocol").val();
 | |
| 			            if (protocol!=null && protocol.length > 0) 
 | |
| 				            moreCriteria.push("&protocol="+encodeURIComponent(protocol));	
 | |
| 				            	            										
 | |
| 		                // validate values (begin)							
 | |
| 			            var isValid = true;				
 | |
| 			            if(protocol == "ICMP") {					
 | |
| 			                isValid &= validateNumber("Type", thisDialog.find("#icmp_type"), thisDialog.find("#icmp_type_errormsg"), -1, 40, false);	//required	
 | |
| 			                isValid &= validateNumber("Code", thisDialog.find("#icmp_code"), thisDialog.find("#icmp_code_errormsg"), -1 , 15, false);	//required
 | |
| 			            }	
 | |
| 			            else {  //TCP, UDP
 | |
| 			                isValid &= validateNumber("Start Port", thisDialog.find("#start_port"), thisDialog.find("#start_port_errormsg"), 1, 65535, false);	//required	
 | |
| 			                isValid &= validateNumber("End Port", thisDialog.find("#end_port"), thisDialog.find("#end_port_errormsg"), 1, 65535, false);	//required
 | |
| 			            }
 | |
| 			            				          	
 | |
| 			            if(thisDialog.find("input[name='ingress_rule_type']:checked").val() == "cidr") {					                
 | |
| 			                isValid &= validateCIDR("CIDR", thisDialog.find(".cidr_template").eq(0).find("#cidr"), thisDialog.find(".cidr_template").eq(0).find("#cidr_errormsg"), false); //required                
 | |
| 	                        for(var i=1; i<thisDialog.find(".cidr_template").length; i++)
 | |
| 	                            isValid &= validateCIDR("CIDR", thisDialog.find(".cidr_template").eq(i).find("#cidr"), thisDialog.find(".cidr_template").eq(0).find("#cidr_errormsg"), true); //optional        
 | |
| 	                    }
 | |
| 	                    else if(thisDialog.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {			                        
 | |
| 	                        isValid &= validateString("Account", thisDialog.find(".account_networkgroup_template").eq(0).find("#account"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), false);	 //required                
 | |
| 	                        isValid &= validateString("Network Group", thisDialog.find(".account_networkgroup_template").eq(0).find("#networkgroup"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), false);	 //required             
 | |
| 	                        for(var i=1; i<thisDialog.find(".account_networkgroup_template").length; i++) {
 | |
| 	                            isValid &= validateString("Account", thisDialog.find(".account_networkgroup_template").eq(i).find("#account"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), true);	 //optional          
 | |
| 	                            isValid &= validateString("Network Group", thisDialog.find(".account_networkgroup_template").eq(i).find("#networkgroup"), thisDialog.find(".account_networkgroup_template").eq(0).find("#account_networkgroup_template_errormsg"), true);	 //optional     
 | |
| 	                        }
 | |
| 	                    }					            
 | |
| 			            if (!isValid) return;					
 | |
|     					// validate values (end)
 | |
|     					          							
 | |
|     					if(protocol == "ICMP") {        					    
 | |
|     					    var icmpType = thisDialog.find("#icmp_type").val();	
 | |
|     					    if (icmpType!=null && icmpType.length > 0)         					        
 | |
| 				                moreCriteria.push("&icmptype="+encodeURIComponent(icmpType));						            
 | |
| 				            var icmpCode = thisDialog.find("#icmp_code").val();
 | |
| 			                if (icmpCode!=null && icmpCode.length > 0) 				                    
 | |
| 				                moreCriteria.push("&icmpcode="+encodeURIComponent(icmpCode)); 					              					    
 | |
|     					}
 | |
|     					else {  //TCP, UDP
 | |
|     					    var startPort = thisDialog.find("#start_port").val();	
 | |
|     					    if (startPort!=null && startPort.length > 0) 
 | |
| 				                moreCriteria.push("&startport="+encodeURIComponent(startPort));	
 | |
| 				            var endPort = thisDialog.find("#end_port").val();
 | |
| 			                if (endPort!=null && endPort.length > 0) 
 | |
| 				                moreCriteria.push("&endport="+encodeURIComponent(endPort));	
 | |
|     					}        					            
 | |
| 			            				            				                                      
 | |
|                         if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "cidr") {	
 | |
|                             var array1 = [];	        
 | |
| 	                        var cidrElementArray = dialogAddIngressRule.find(".cidr_template").find("#cidr");			                        
 | |
| 	                        for(var i=0; i<cidrElementArray.length; i++) {
 | |
| 	                            if(cidrElementArray[i].value.length >  0)
 | |
| 	                                array1.push(cidrElementArray[i].value);
 | |
| 	                        }
 | |
| 	                        if(array1.length > 0)
 | |
| 			                    moreCriteria.push("&cidrlist="+encodeURIComponent(array1.join(",")));	
 | |
| 	                    }	    
 | |
| 	                    else if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {			                          
 | |
| 	                        var accountElementArray = dialogAddIngressRule.find(".account_networkgroup_template").find("#account");	
 | |
| 	                        var networkgroupElementArray = dialogAddIngressRule.find(".account_networkgroup_template").find("#networkgroup");			                        
 | |
| 	                        for(var i=0; i<accountElementArray.length; i++)	{	  
 | |
| 	                            if(networkgroupElementArray[i].value.length > 0 && accountElementArray[i].value.length > 0)                        
 | |
| 	                                moreCriteria.push("&usernetworkgrouplist["+i+"].account="+accountElementArray[i].value+"&usernetworkgrouplist["+i+"].group="+networkgroupElementArray[i].value);
 | |
| 	                        }
 | |
| 	                    }	  		           
 | |
| 			            				            					            	   
 | |
| 			            thisDialog.dialog("close");		      
 | |
|                                        
 | |
| 				        var ingressRuleTemplate = $("#network_group_ingress_rule_template").clone(true);											   
 | |
|                         var loadingImg = ingressRuleTemplate.find(".adding_loading");		
 | |
|                         var rowContainer = ingressRuleTemplate.find("#row_container");    	                               
 | |
|                         loadingImg.find(".adding_text").text("Adding....");	
 | |
|                         loadingImg.show();  
 | |
|                         rowContainer.hide();                                
 | |
|                         template.find("#ingress_rule_grid").append(ingressRuleTemplate.fadeIn("slow"));	
 | |
|                         template.find("#ingress_rule_grid").find("#no_ingress_rule").hide();             
 | |
|                         
 | |
|                         $.ajax({
 | |
| 			                data: createURL("command=authorizeNetworkGroupIngress"+moreCriteria.join("")+"&response=json"),
 | |
| 					        dataType: "json",
 | |
| 					        success: function(json) {					            		            				
 | |
| 					            var jobId = json.authorizenetworkgroupingress.jobid; 						            	                   
 | |
| 			                    var timerKey = "ingressRuleJob_"+jobId;
 | |
| 			                    ingressRuleTemplate.attr("id","ingressRule_"+jobId); //temporary id until API call returns real id							        
 | |
| 						        $("body").everyTime(
 | |
| 							        5000,
 | |
| 							        timerKey,
 | |
| 							        function() {
 | |
| 								        $.ajax({
 | |
| 									       data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"),
 | |
| 									        dataType: "json",
 | |
| 									        success: function(json) {
 | |
| 										        var result = json.queryasyncjobresultresponse;
 | |
| 										        if (result.jobstatus == 0) {
 | |
| 											        return; //Job has not completed
 | |
| 										        } else {
 | |
| 											        $("body").stopTime(timerKey);
 | |
| 											        if (result.jobstatus == 1) { // Succeeded													            							            
 | |
| 											            var items = result.networkgroup[0].ingressrule;			            
 | |
| 											            ingressRuleJSONToTemplate(items[0], ingressRuleTemplate).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName);													            
 | |
| 											            if(items.length > 1) {                               
 | |
|                                                             for(var i=1; i<items.length; i++) {         
 | |
|                                                                 var ingressRuleTemplate2 = $("#network_group_ingress_rule_template").clone(true);                                                               
 | |
|                                                                 ingressRuleJSONToTemplate(items[i], ingressRuleTemplate2).data("parentNetworkGroupId", networkGroupId).data("parentNetworkGroupDomainId", domainId).data("parentNetworkGroupAccount", account).data("parentNetworkGroupName",networkGroupName);	   
 | |
|                                                                 template.find("#ingress_rule_grid").append(ingressRuleTemplate2.fadeIn("slow"));	                                                                 
 | |
|                                                             }                                    
 | |
|                                                         }  												        		
 | |
| 												        loadingImg.hide();  
 | |
|                                                         rowContainer.show();                                                              
 | |
|                                                         //hide delete link of network group. (network group is not allowed to delete if it is not empty. i.e. having ingress rule(s) 
 | |
|                                                         template.find("#delete_link").hide();                                                                                                             												
 | |
| 											        } else if (result.jobstatus == 2) { // Failed
 | |
| 											            $("#dialog_alert").text("Unable to add ingress rule due to the error: " + result.jobresult).dialog("open");
 | |
| 												        ingressRuleTemplate.slideUp("slow", function() {
 | |
| 													        $(this).remove();
 | |
| 												        });
 | |
| 											        }
 | |
| 										        }
 | |
| 									        },
 | |
| 									        error: function(XMLHttpResponse) {
 | |
| 										        $("body").stopTime(timerKey);
 | |
| 										        handleError(XMLHttpResponse);										 
 | |
| 										        ingressRuleTemplate.slideUp("slow", function() {
 | |
| 											        $(this).remove();
 | |
| 										        });
 | |
| 									        }
 | |
| 								        });
 | |
| 							        },
 | |
| 							        0
 | |
| 						        );				        
 | |
| 					        },						
 | |
| 					        error: function(XMLHttpResponse) {							
 | |
| 						        handleError(XMLHttpResponse);										 
 | |
| 						        ingressRuleTemplate.slideUp("slow", function() {
 | |
| 							        $(this).remove();
 | |
| 						        });
 | |
| 					        }						
 | |
| 				        });				
 | |
| 			        }, 
 | |
| 		            "Cancel": function() { 				        				        
 | |
| 			            $(this).dialog("close"); 
 | |
| 		            } 
 | |
| 	            }).dialog("open");    
 | |
| 		        break;		           
 | |
| 	    }
 | |
| 	    		    
 | |
| 	    return false;
 | |
| 	});
 | |
| 	
 | |
| 	activateDialog($("#dialog_add_network_groups").dialog({ 			
 | |
| 		autoOpen: false,
 | |
| 		modal: true,
 | |
| 		zIndex: 2000
 | |
| 	}));	
 | |
| 	
 | |
| 	activateDialog($("#dialog_add_ingress_rule").dialog({ 
 | |
| 		width: 400,
 | |
| 		autoOpen: false,
 | |
| 		modal: true,
 | |
| 		zIndex: 2000
 | |
| 	}));				
 | |
| 	
 | |
| 	function ingressRuleJSONToTemplate(json, template) {
 | |
| 	    (index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd");		    
 | |
|         template.attr("id", "ingressRule_"+json.id).data("ingressRuleId", json.ruleid).data("protocol", json.protocol);	 
 | |
|         template.data("startPort", json.startport); 
 | |
|         template.data("endPort", json.endport);           
 | |
|         template.data("icmpType", json.icmptype);
 | |
|         template.data("icmpCode", json.icmpcode);	    				   
 | |
| 	    template.find("#id").text(json.ruleid);
 | |
| 	    template.find("#protocol").text(json.protocol);
 | |
| 	    			    		    
 | |
| 	    var endpoint;		    
 | |
| 	    if(json.protocol == "icmp")
 | |
| 	        endpoint = "ICMP Type=" + ((json.icmptype!=null)?json.icmptype:"") + ", code=" + ((json.icmpcode!=null)?json.icmpcode:"");		        
 | |
| 	    else //tcp, udp
 | |
| 	        endpoint = "Port Range " + ((json.startport!=null)?json.startport:"") + "-" + ((json.endport!=null)?json.endport:"");		    
 | |
| 	    template.find("#endpoint").text(endpoint);		    
 | |
| 	    template.data("startPort", json.startport); 
 | |
|         template.data("endPort", json.endport);           
 | |
|         template.data("icmpType", json.icmptype);
 | |
|         template.data("icmpCode", json.icmpcode);			    
 | |
| 	    
 | |
| 	    var cidrOrGroup;
 | |
| 	    if(json.cidr != null && json.cidr.length > 0)
 | |
| 	        cidrOrGroup = json.cidr;
 | |
| 	    else if (json.account != null && json.account.length > 0 &&  json.networkgroupname != null && json.networkgroupname.length > 0)
 | |
| 	        cidrOrGroup = json.account + "/" + json.networkgroupname;		    
 | |
| 	    template.find("#cidr").text(cidrOrGroup);		    		    
 | |
| 	    template.data("cidr", json.cidr);		    
 | |
| 	    template.data("account", json.account);		    
 | |
| 	    template.data("networkGroupName", json.networkgroupname);	
 | |
| 	    
 | |
| 	    return template;	   
 | |
|     }
 | |
| 		
 | |
| 	$("#network_group_ingress_rule_template").bind("click", function(event) {
 | |
|         var template = $(this);	
 | |
|                    
 | |
|         var parentNetworkGroupId = template.data("parentNetworkGroupId");
 | |
|         var parentNeteworkGroupTemplate = $("#networkGroup_" + parentNetworkGroupId);
 | |
|                     
 | |
|         var moreCriteria = [];		   	
 | |
| 	    
 | |
| 	    var parentNetworkGroupDomainId = template.data("parentNetworkGroupDomainId");
 | |
| 	    moreCriteria.push("&domainid="+encodeURIComponent(parentNetworkGroupDomainId));
 | |
| 	    
 | |
| 	    var parentNetworkGroupAccount = template.data("parentNetworkGroupAccount");
 | |
| 	    moreCriteria.push("&account="+encodeURIComponent(parentNetworkGroupAccount));
 | |
| 	    		    
 | |
| 	    var parentNetworkGroupName = template.data("parentNetworkGroupName");
 | |
| 	    moreCriteria.push("&networkgroupname="+encodeURIComponent(parentNetworkGroupName));    
 | |
| 	    
 | |
| 	    var protocol = template.data("protocol");
 | |
| 	    moreCriteria.push("&protocol="+encodeURIComponent(protocol));		    	
 | |
| 	    
 | |
| 	    if(protocol == "icmp") {
 | |
| 	        var icmpType = template.data("icmpType");
 | |
| 	        if(icmpType != null && icmpType.length > 0)
 | |
| 	            moreCriteria.push("&icmptype="+encodeURIComponent(icmpType));
 | |
| 		    
 | |
| 	        var icmpCode = template.data("icmpCode");
 | |
| 	        if(icmpCode != null && icmpCode.length > 0)
 | |
| 	            moreCriteria.push("&icmpcode="+encodeURIComponent(icmpCode));
 | |
| 	    }
 | |
| 	    else {  //TCP, UDP
 | |
| 	        var startPort = template.data("startPort");
 | |
| 	        if(startPort != null && startPort.length > 0)
 | |
| 	            moreCriteria.push("&startport="+encodeURIComponent(startPort));
 | |
| 		    
 | |
| 	        var endPort = template.data("endPort");
 | |
| 	        if(endPort != null && endPort.length > 0)
 | |
| 	            moreCriteria.push("&endport="+encodeURIComponent(endPort));
 | |
| 	    }
 | |
| 	        
 | |
| 	    var cidr = template.data("cidr")
 | |
| 	    if(cidr != null && cidr.length > 0)
 | |
| 	        moreCriteria.push("&cidrlist="+encodeURIComponent(cidr));
 | |
| 						
 | |
| 	    var account = template.data("account");
 | |
| 	    var networkGroupName = template.data("networkGroupName"); 
 | |
| 	    if((account != null && account.length > 0) && (networkGroupName != null && networkGroupName.length > 0))                        
 | |
|             moreCriteria.push("&usernetworkgrouplist[0].account="+account + "&usernetworkgrouplist[0].group="+networkGroupName);
 | |
| 			
 | |
| 	    var link = $(event.target);	 		    		        
 | |
| 	    switch(event.target.id) {
 | |
| 	        case "ingress_rule_delete_link":  	            		            
 | |
| 	            var loadingImg = template.find(".adding_loading");		
 | |
|                 var rowContainer = template.find("#row_container");                                                
 | |
|                 loadingImg.find(".adding_text").text("Deleting....");	
 | |
|                 loadingImg.show();  
 | |
|                 rowContainer.hide();              
 | |
|                 $.ajax({
 | |
| 		   data: createURL("command=revokeNetworkGroupIngress"+moreCriteria.join("")+"&response=json"), 
 | |
|                     dataType: "json",
 | |
|                     success: function(json) {		                                                                                            				        
 | |
|                         var jobId = json.revokenetworkgroupingress.jobid;	                    
 | |
|                         var timerKey = "revokeNetworkGroupIngressJob"+jobId;								    
 | |
|                         $("body").everyTime(2000, timerKey, function() {
 | |
| 		                    $.ajax({
 | |
| 					   data: createURL("command=queryAsyncJobResult&jobId="+jobId+"&response=json"), 
 | |
| 			                    dataType: "json",
 | |
| 			                    success: function(json) {					                        							       						   
 | |
| 				                    var result = json.queryasyncjobresultresponse;
 | |
| 				                    if (result.jobstatus == 0) {
 | |
| 					                    return; //Job has not completed
 | |
| 				                    } else {											    
 | |
| 					                    $("body").stopTime(timerKey);
 | |
| 					                    if (result.jobstatus == 1) { //success		
 | |
|                                             template.slideUp("slow", function() { 
 | |
|                                                 $(this).remove();                                                                                                        
 | |
|                                                 //After deleting ingress rule successfully, check if this network group has any ingress rule(s) left. Show delete link of network group if no ingress rule(s) are left.
 | |
|                                                 $.ajax({
 | |
| 						   data: createURL("command=listNetworkGroups&response=json&domainid="+parentNetworkGroupDomainId+"&account="+parentNetworkGroupAccount+"&networkgroupname="+parentNetworkGroupName),
 | |
|                                                     dataType: "json",
 | |
|                                                     success: function(json){                                                                                                                     
 | |
|                                                         networkGroupJSONToTemplate(json.listnetworkgroupsresponse.networkgroup[0], parentNeteworkGroupTemplate);
 | |
|                                                     }
 | |
|                                                 });                                                        
 | |
|                                             });							                                                           
 | |
| 					                    } else if (result.jobstatus == 2) {										        
 | |
| 						                    $("#dialog_alert").html("<p>" + sanitizeXSS(result.jobresult) + "</p>").dialog("open");		
 | |
| 						                    loadingImg.hide();  
 | |
|                                             rowContainer.show();                                                         									   					    
 | |
| 					                    }
 | |
| 				                    }
 | |
| 			                    },
 | |
| 			                    error: function(XMLHttpResponse) {				                        
 | |
| 				                    $("body").stopTime(timerKey);
 | |
| 				                    handleError(XMLHttpResponse);	
 | |
| 				                    loadingImg.hide();  
 | |
|                                     rowContainer.show();									    
 | |
| 			                    }
 | |
| 		                    });
 | |
| 	                    }, 0);						    					
 | |
|                     },
 | |
|                     error: function(XMLHttpResponse) {		                                  			    
 | |
| 		                handleError(XMLHttpResponse);
 | |
| 		                loadingImg.hide();  
 | |
|                         rowContainer.show();								
 | |
|                     }
 | |
|                 });	 		        
 | |
| 	            break;			                      
 | |
| 	    }		    
 | |
| 	    return false;
 | |
| 	});	
 | |
| 	
 | |
| 	//*** event handler of dialog_add_ingress_rule (begin) ***
 | |
| 	var dialogAddIngressRule = $("#dialog_add_ingress_rule");
 | |
| 				
 | |
| 	dialogAddIngressRule.find("#add_more_cidr").bind("click", function(event){		    
 | |
|         dialogAddIngressRule.find("#cidr_container").append($("#cidr_template").clone().show());
 | |
|         return false;
 | |
|     });	
 | |
| 	dialogAddIngressRule.find("#add_more_cidr").click();
 | |
| 	
 | |
| 		
 | |
| 	dialogAddIngressRule.find("#add_more_account_networkgroup").bind("click", function(event){		    
 | |
|         dialogAddIngressRule.find("#account_networkgroup_container").append($("#account_networkgroup_template").clone().show());
 | |
|         return false;
 | |
|     });		
 | |
|     dialogAddIngressRule.find("#add_more_account_networkgroup").click();
 | |
|     
 | |
| 				
 | |
| 	dialogAddIngressRule.find("input[name='ingress_rule_type']").change(function(){		    
 | |
| 	    if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "cidr") {	
 | |
| 	        //enable CIDR	        
 | |
| 	        dialogAddIngressRule.find(".cidr_template, #add_more_cidr").removeAttr("disabled");	 
 | |
| 	        	        
 | |
| 	        //disable Account/Network Group, clear up error fields 	        
 | |
| 	        dialogAddIngressRule.find(".account_networkgroup_template, #add_more_account_networkgroup").attr("disabled", "disabled"); 
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find(".account_networkgroup_template").find("#account"), dialogAddIngressRule.find(".account_networkgroup_template").find("#account_networkgroup_template_errormsg")); 
 | |
|     		cleanErrMsg(dialogAddIngressRule.find(".account_networkgroup_template").find("#networkgroup"), dialogAddIngressRule.find(".account_networkgroup_template").find("#account_networkgroup_template_errormsg")); 	        	        
 | |
| 	    }
 | |
| 	    else if(dialogAddIngressRule.find("input[name='ingress_rule_type']:checked").val() == "account_networkgroup") {
 | |
| 	        //enable Account/Network Group
 | |
| 	        dialogAddIngressRule.find(".account_networkgroup_template, #add_more_account_networkgroup").removeAttr("disabled");	
 | |
| 	        
 | |
| 	        //disable CIDR, clear up error fields
 | |
| 	        dialogAddIngressRule.find(".cidr_template, #add_more_cidr").attr("disabled", "disabled");   
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find(".cidr_template").find("#cidr"), dialogAddIngressRule.find(".cidr_template").find("#cidr_errormsg")); 		              
 | |
| 	    }
 | |
| 	});
 | |
| 	dialogAddIngressRule.find("input[name='ingress_rule_type']").change();
 | |
| 	
 | |
| 	
 | |
| 	dialogAddIngressRule.find("#protocol").bind("change", function(event){		    
 | |
| 	    var thisDropDown = $(this);		   
 | |
| 	    if(thisDropDown.val() == "ICMP") {		        
 | |
| 	        dialogAddIngressRule.find("#icmp_type_container, #icmp_code_container").show();
 | |
| 	        dialogAddIngressRule.find("#icmp_type, #icmp_code").val("-1");
 | |
| 	        
 | |
| 	        dialogAddIngressRule.find("#start_port_container, #end_port_container").hide();		        
 | |
| 	        dialogAddIngressRule.find("#start_port, #end_port").val("");	
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find("#start_port"), dialogAddIngressRule.find("#start_port_errormsg"));	  
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find("#end_port"), dialogAddIngressRule.find("#end_port_errormsg"));	                
 | |
| 	    }
 | |
| 	    else {  //TCP, UDP
 | |
| 	        dialogAddIngressRule.find("#start_port_container, #end_port_container").show();	 
 | |
| 	        
 | |
| 	        dialogAddIngressRule.find("#icmp_type_container, #icmp_code_container").hide();
 | |
| 	        dialogAddIngressRule.find("#icmp_type, #icmp_code").val("");
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find("#icmp_type"),dialogAddIngressRule.find("#icmp_type_errormsg"));	     
 | |
| 	        cleanErrMsg(dialogAddIngressRule.find("#icmp_code"),dialogAddIngressRule.find("#icmp_code_errormsg"));	
 | |
| 	    }		
 | |
| 	    return false;
 | |
| 	});
 | |
| 	dialogAddIngressRule.find("#protocol").change();
 | |
| 	//*** event handler of dialog_add_ingress_rule (end) ***
 | |
| 				
 | |
| 	$("#network_groups_action_new").bind("click", function(event){		    
 | |
| 	    $("#dialog_add_network_groups")
 | |
| 	    .dialog('option', 'buttons', {
 | |
| 	        "Create": function() {		            	          
 | |
| 	            var thisDialog = $(this);	
 | |
| 							
 | |
| 				// validate values
 | |
| 				var isValid = true;
 | |
| 				isValid &= validateString("Name", thisDialog.find("#name"), thisDialog.find("#name_errormsg"), false);  //required
 | |
| 				isValid &= validateString("Description", thisDialog.find("#description"), thisDialog.find("#description_errormsg"), true);	//optional				
 | |
| 				if (!isValid) return;	
 | |
| 				
 | |
| 				var submenuContent = $("#submenu_content_network_groups");
 | |
| 				
 | |
| 				var template = $("#network_group_template").clone(true);
 | |
| 				var loadingImg = template.find(".adding_loading");		
 | |
|                 var rowContainer = template.find("#row_container");    	                               
 | |
|                 loadingImg.find(".adding_text").text("Adding....");	
 | |
|                 loadingImg.show();  
 | |
|                 rowContainer.hide();                                   
 | |
|                 submenuContent.find("#grid_content").prepend(template.fadeIn("slow"));    					
 | |
| 				
 | |
| 				var name = trim(thisDialog.find("#name").val());
 | |
| 				var desc = trim(thisDialog.find("#description").val());
 | |
| 				
 | |
| 				thisDialog.dialog("close");
 | |
| 							
 | |
| 				$.ajax({						
 | |
| 				       data: createURL("command=createNetworkGroup&name="+encodeURIComponent(name)+"&description="+encodeURIComponent(desc)+"&response=json"),
 | |
| 					dataType: "json",
 | |
| 					success: function(json) {						   
 | |
| 						var items = json.createnetworkgroupresponse.networkgroup;													
 | |
| 						networkGroupJSONToTemplate(items[0], template);							
 | |
| 						changeGridRowsTotal(submenuContent.find("#grid_rows_total"), 1);	
 | |
| 						loadingImg.hide();  
 | |
|                         rowContainer.show();    						
 | |
| 					}, 								
 | |
|                     error: function(XMLHttpResponse) {		                   
 | |
| 	                    handleError(XMLHttpResponse);	
 | |
| 	                    template.slideUp("slow", function(){ $(this).remove(); } );							    
 | |
|                     }	
 | |
| 				});						            
 | |
| 	        },
 | |
| 	        "Cancel": function() {
 | |
| 	            $(this).dialog("close");
 | |
| 	        }
 | |
| 	    }).dialog("open");		    
 | |
| 	    return false;
 | |
| 	});	
 | |
| 				
 | |
| 	//*** Network Group (end) ************************************************************************	   		
 | |
| 	
 | |
| 	
 | |
| 	//initialize page
 | |
| 	if(getDirectAttachNetworkGroupsEnabled() != "true") 
 | |
| 	    $(".submenu_links, #submenu_content_network_groups").hide();		
 | |
| 	
 | |
| 	var currentSubMenu = $("#submenu_network");	
 | |
| 	currentSubMenu.click();	
 | |
| }
 |