/** * 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 . * */ function ipGetSearchParams() { var moreCriteria = []; var searchInput = $("#basic_search").find("#search_input").val(); if (searchInput != null && searchInput.length > 0) { moreCriteria.push("&keyword="+todb(searchInput)); } var $advancedSearchPopup = getAdvancedSearchPopupInSearchContainer(); if ($advancedSearchPopup.length > 0 && $advancedSearchPopup.css("display") != "none" ) { var zone = $advancedSearchPopup.find("#adv_search_zone").val(); if (zone!=null && zone.length > 0) moreCriteria.push("&zoneId="+zone); if ($advancedSearchPopup.find("#adv_search_domain_li").css("display") != "none" && $advancedSearchPopup.find("#domain").hasClass("textwatermark") == false) { var domainName = $advancedSearchPopup.find("#domain").val(); if (domainName != null && domainName.length > 0) { var domainId; if(autoCompleteDomains != null && autoCompleteDomains.length > 0) { for(var i=0; i < autoCompleteDomains.length; i++) { if(fromdb(autoCompleteDomains[i].name).toLowerCase() == domainName.toLowerCase()) { domainId = autoCompleteDomains[i].id; break; } } } if(domainId == null) { showError(false, $advancedSearchPopup.find("#domain"), $advancedSearchPopup.find("#domain_errormsg"), g_dictionary["label.not.found"]); } else { //e.g. domainId == 5 (number) showError(true, $advancedSearchPopup.find("#domain"), $advancedSearchPopup.find("#domain_errormsg"), null) moreCriteria.push("&domainid="+todb(domainId)); } } } if ($advancedSearchPopup.find("#adv_search_account_li").css("display") != "none" && $advancedSearchPopup.find("#adv_search_account").hasClass("textwatermark") == false) { var account = $advancedSearchPopup.find("#adv_search_account").val(); if (account!=null && account.length > 0) moreCriteria.push("&account="+account); } } return moreCriteria.join(""); } function afterLoadIpJSP() { // switch between different tabs var tabArray = [$("#tab_details"), $("#tab_firewall"), $("#tab_port_range"), $("#tab_port_forwarding"), $("#tab_load_balancer"), $("#tab_vpn")]; var tabContentArray = [$("#tab_content_details"), $("#tab_content_firewall"), $("#tab_content_port_range"), $("#tab_content_port_forwarding"), $("#tab_content_load_balancer"), $("#tab_content_vpn")]; var afterSwitchFnArray = [ipJsonToDetailsTab, ipJsonToFirewallTab, ipJsonToPortRangeTab, ipJsonToPortForwardingTab, ipJsonToLoadBalancerTab, ipJsonToVPNTab]; switchBetweenDifferentTabs(tabArray, tabContentArray, afterSwitchFnArray); //****** Basic Zone, support Elastic Load Balancer (begin) ***************************************************************************************** if(g_supportELB == "guest" || g_supportELB == "public") { $("#tab_details,#tab_firewall,#tab_port_range,#tab_port_forwarding,#tab_load_balancer,#tab_vpn").hide(); $("#tab_content_details").hide(); $("#acquire_new_ip_button").hide(); $("#add_load_balancer_and_ip_button").show(); initDialog("dialog_add_load_balancer_and_ip"); $.ajax({ data: createURL("command=listZones&available=true"), dataType: "json", success: function(json) { var zones = json.listzonesresponse.zone; var zoneSelect = $("#dialog_add_load_balancer_and_ip #acquire_zone").empty(); if (zones != null && zones.length > 0) { for (var i = 0; i < zones.length; i++) { if(zones[i].networktype == "Basic") zoneSelect.append(""); } } } }); $("#add_load_balancer_and_ip_button").unbind("click").bind("click", function(event) { $("#dialog_add_load_balancer_and_ip").dialog('option', 'buttons', { "Acquire": function() { var $thisDialog = $(this); var isValid = true; isValid &= validateString("Name", $thisDialog.find("#name"), $thisDialog.find("#name_errormsg")); isValid &= validateInteger("Public Port", $thisDialog.find("#public_port"), $thisDialog.find("#public_port_errormsg"), 1, 65535); isValid &= validateInteger("Private Port", $thisDialog.find("#private_port"), $thisDialog.find("#private_port_errormsg"), 1, 65535); if (!isValid) return; $thisDialog.dialog("close"); var array1 = []; var zoneId = $thisDialog.find("#acquire_zone").val(); array1.push("&zoneid="+zoneId); var name = $thisDialog.find("#name").val(); array1.push("&name="+todb(name)); var publicPort = $thisDialog.find("#public_port").val(); array1.push("&publicport="+publicPort); var privatePort = $thisDialog.find("#private_port").val(); array1.push("&privateport="+privatePort); var algorithm = $thisDialog.find("#algorithm_select").val(); array1.push("&algorithm="+algorithm); array1.push("&openfirewall=false"); //elasticLB(basicZone) has nothing to do with firewall, so do not open firewall when creating LB rule in elasticLB(basicZone). var $midmenuItem1 = beforeAddingMidMenuItem() ; $.ajax({ data: createURL("command=createLoadBalancerRule"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createloadbalancerruleresponse.jobid; var timerKey = "addLbAndIpJob_"+jobId; $("body").everyTime(2000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), 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 publicipid = result.jobresult.loadbalancer.publicipid; var cmd; if(g_supportELB == "guest") { cmd = "command=listPublicIpAddresses&forvirtualnetwork=false&id="+publicipid; } else if(g_supportELB == "public") { cmd = "command=listPublicIpAddresses&forvirtualnetwork=true&id="+publicipid; } else { if(g_supportELB == null) alert("supportELB should be either guest or public. It should not be null."); else alert("supportELB should be either guest or public. It should not be " + g_supportELB); return; } $.ajax({ data: createURL(cmd), dataType: "json", async: false, success: function(json) { var items = json.listpublicipaddressesresponse.publicipaddress; if(items != null && items.length > 0) { ipToMidmenu(items[0], $midmenuItem1); bindClickToMidMenu($midmenuItem1, ipToRightPanel, ipGetMidmenuId); afterAddingMidMenuItem($midmenuItem1, true); } } }); } else if (result.jobstatus == 2) { afterAddingMidMenuItem($midmenuItem1, false, fromdb(result.jobresult.errortext)); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { afterAddingMidMenuItem($midmenuItem1, false, parseXMLHttpResponse(XMLHttpResponse)); }); } }); }, 0); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { afterAddingMidMenuItem($midmenuItem1, false, parseXMLHttpResponse(XMLHttpResponse)); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); } //****** Basic Zone, support Elastic Load Balancer (end) ***************************************************************************************** //****** Advanced Zone (begin) ******************************************************************************************************************* else { if(g_firewallRuleUiEnabled == "true") $("#tab_firewall").show(); else $("#tab_firewall").hide(); $("#tab_details,#tab_content_details").show(); //dialogs initDialog("dialog_acquire_public_ip", 325); initDialog("dialog_enable_vpn"); initDialog("dialog_disable_vpn"); initDialog("dialog_add_vpnuser"); initDialog("dialog_confirmation_remove_vpnuser"); initDialog("dialog_enable_static_NAT"); //*** Acquire New IP (begin) *** $.ajax({ data: createURL("command=listZones&available=true"), 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(""); } } } }); $("#acquire_new_ip_button").unbind("click").bind("click", function(event) { $("#dialog_acquire_public_ip").dialog('option', 'buttons', { "Acquire": function() { var thisDialog = $(this); thisDialog.dialog("close"); var zoneid = thisDialog.find("#acquire_zone").val(); var $midmenuItem1 = beforeAddingMidMenuItem() ; $.ajax({ data: createURL("command=associateIpAddress&zoneid="+zoneid), dataType: "json", success: function(json) { var jobId = json.associateipaddressresponse.jobid; var timerKey = "associateIpJob_"+jobId; $("body").everyTime(2000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), 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 ipToMidmenu(result.jobresult.ipaddress, $midmenuItem1); bindClickToMidMenu($midmenuItem1, ipToRightPanel, ipGetMidmenuId); afterAddingMidMenuItem($midmenuItem1, true); } else if (result.jobstatus == 2) { afterAddingMidMenuItem($midmenuItem1, false, fromdb(result.jobresult.errortext)); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { afterAddingMidMenuItem($midmenuItem1, false, parseXMLHttpResponse(XMLHttpResponse)); }); } }); }, 0); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { afterAddingMidMenuItem($midmenuItem1, false, parseXMLHttpResponse(XMLHttpResponse)); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); //*** Acquire New IP (end) *** //*** Firewall tab (begin) *** var $createFirewallRow = $("#tab_content_firewall").find("#create_firewall_row"); $createFirewallRow.find("#protocol").bind("change", function(event) { if($(this).val() == null) return true; var protocol = $(this).val().toLowerCase(); if(protocol == "tcp" || protocol == "udp") { $createFirewallRow.find("#start_port,#end_port").show(); $createFirewallRow.find("#ICMP_type,#ICMP_code").hide(); $createFirewallRow.find("#ICMP_type,#ICMP_code").val("") } else { //protocol == icmp $createFirewallRow.find("#ICMP_type,#ICMP_code").show(); $createFirewallRow.find("#start_port,#end_port").hide(); $createFirewallRow.find("#start_port,#end_port").val(""); } return true; }); $createFirewallRow.find("#add_link").bind("click", function(event){ var isValid = true; isValid &= validateCIDRList("Source CIDR", $createFirewallRow.find("#cidr"), $createFirewallRow.find("#cidr_errormsg"), true); //optional if($createFirewallRow.find("#start_port").css("display") != "none") isValid &= validateInteger("Start Port", $createFirewallRow.find("#start_port"), $createFirewallRow.find("#start_port_errormsg"), 1, 65535); if($createFirewallRow.find("#end_port").css("display") != "none") isValid &= validateInteger("End Port", $createFirewallRow.find("#end_port"), $createFirewallRow.find("#end_port_errormsg"), 1, 65535); if($createFirewallRow.find("#ICMP_type").css("display") != "none") isValid &= validateInteger("ICMP type", $createFirewallRow.find("#ICMP_type"), $createFirewallRow.find("#ICMP_type_errormsg"), null, null); if($createFirewallRow.find("#ICMP_code").css("display") != "none") isValid &= validateInteger("ICMP code", $createFirewallRow.find("#ICMP_code"), $createFirewallRow.find("#ICMP_code_errormsg"), null, null); if (!isValid) return; var $template = $("#firewall_template").clone(); $("#tab_content_firewall #grid_content").append($template.show()); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.adding.processing"]); $spinningWheel.show(); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var array1 = []; array1.push("&ipaddressid="+ipObj.id); var cidr = $createFirewallRow.find("#cidr").val(); if(cidr != null && cidr.length > 0) array1.push("&cidrlist="+cidr); if($createFirewallRow.find("#start_port").css("display") != "none") { var startPort = $createFirewallRow.find("#start_port").val(); array1.push("&startPort="+startPort); } if($createFirewallRow.find("#end_port").css("display") != "none") { var endPort = $createFirewallRow.find("#end_port").val(); array1.push("&endPort="+endPort); } var protocol = $createFirewallRow.find("#protocol").val(); array1.push("&protocol="+protocol); if($createFirewallRow.find("#ICMP_type").css("display") != "none") { var ICMPType = $createFirewallRow.find("#ICMP_type").val(); array1.push("&icmptype="+ICMPType); } if($createFirewallRow.find("#ICMP_code").css("display") != "none") { var ICMPCode = $createFirewallRow.find("#ICMP_code").val(); array1.push("&icmpcode="+ICMPCode); } $.ajax({ data: createURL("command=createFirewallRule"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createfirewallruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded var item = json.queryasyncjobresultresponse.jobresult.firewallrule; firewallJsonToTemplate(item, $template); $spinningWheel.hide(); refreshCreateFirewallRow(); } else if (result.jobstatus == 2) { // Failed $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); return false; }); //*** Firewall tab (end) *** //*** Port Range tab (begin) *** var $createPortRangeRow = $("#tab_content_port_range").find("#create_port_range_row"); $createPortRangeRow.find("#add_link").bind("click", function(event){ var isValid = true; isValid &= validateInteger("Start Port", $createPortRangeRow.find("#start_port"), $createPortRangeRow.find("#start_port_errormsg"), 1, 65535); isValid &= validateInteger("End Port", $createPortRangeRow.find("#end_port"), $createPortRangeRow.find("#end_port_errormsg"), 1, 65535); if (!isValid) return; var $template = $("#port_range_template").clone(); $("#tab_content_port_range #grid_content").append($template.show()); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.adding.processing"]); $spinningWheel.show(); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var startPort = $createPortRangeRow.find("#start_port").val(); var endPort = $createPortRangeRow.find("#end_port").val(); var protocol = $createPortRangeRow.find("#protocol").val(); var array1 = []; array1.push("&ipaddressid="+ipObj.id); array1.push("&startPort="+startPort); array1.push("&endPort="+endPort); array1.push("&protocol="+protocol); if(g_firewallRuleUiEnabled == "true") array1.push("&openfirewall=false"); $.ajax({ data: createURL("command=createIpForwardingRule"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createipforwardingruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded var item = json.queryasyncjobresultresponse.jobresult.ipforwardingrule; portRangeJsonToTemplate(item, $template); $spinningWheel.hide(); refreshCreatePortRangeRow(); } else if (result.jobstatus == 2) { // Failed $template.slideUp("slow", function() { $(this).remove(); }); //var errorMsg = g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); return false; }); //*** Port Range tab (end) *** //*** Port Forwarding tab (begin) *** var $createPortForwardingRow = $("#tab_content_port_forwarding").find("#create_port_forwarding_row"); // If public end port gets filled, disable private ports and copy public ports over to private ports /* $createPortForwardingRow.find("#public_end_port").bind("keyup", function(event) { if($(this).val() != null && $(this).val().length > 0) { $createPortForwardingRow.find("#private_port").attr("readonly", true); $createPortForwardingRow.find("#private_end_port").attr("readonly", true); $createPortForwardingRow.find("#private_port").val($createPortForwardingRow.find("#public_port").val()); $createPortForwardingRow.find("#private_end_port").val($(this).val()); } else { $createPortForwardingRow.find("#private_port").removeAttr("readonly"); $createPortForwardingRow.find("#private_end_port").removeAttr("readonly"); } return true; }); $createPortForwardingRow.find("#public_port").bind("keyup", function(event) { if($createPortForwardingRow.find("#private_port").attr("readonly") == true) $createPortForwardingRow.find("#private_port").val($(this).val()); return true; }); */ $createPortForwardingRow.find("#add_link").bind("click", function(event){ var isValid = true; //isValid &= validateCIDRList("CIDR", $createPortForwardingRow.find("#cidr"), $createPortForwardingRow.find("#cidr_errormsg"), true); //optional isValid &= validateInteger("Public Port", $createPortForwardingRow.find("#public_port"), $createPortForwardingRow.find("#public_port_errormsg"), 1, 65535, false); //required isValid &= validateInteger("Public End Port", $createPortForwardingRow.find("#public_end_port"), $createPortForwardingRow.find("#public_end_port_errormsg"), 1, 65535, true); //optional isValid &= validateInteger("Private Port", $createPortForwardingRow.find("#private_port"), $createPortForwardingRow.find("#private_port_errormsg"), 1, 65535, false); //required isValid &= validateInteger("Private End Port", $createPortForwardingRow.find("#private_end_port"), $createPortForwardingRow.find("#private_end_port_errormsg"), 1, 65535, true); //optional isValid &= validateDropDownBox("Instance", $createPortForwardingRow.find("#vm"), $createPortForwardingRow.find("#vm_errormsg")); if (!isValid) return; var $template = $("#port_forwarding_template").clone(); $("#tab_content_port_forwarding #grid_content").append($template.show()); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.adding.processing"]); $spinningWheel.show(); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var array1 = []; array1.push("&ipaddressid="+ipObj.id); var publicPort = $createPortForwardingRow.find("#public_port").val(); array1.push("&publicport="+publicPort); var publicEndPort = $createPortForwardingRow.find("#public_end_port").val(); if(publicEndPort != null && publicEndPort.length > 0) array1.push("&publicendport="+publicEndPort); var privatePort = $createPortForwardingRow.find("#private_port").val(); array1.push("&privateport="+privatePort); var privateEndPort = $createPortForwardingRow.find("#private_end_port").val(); if(privateEndPort != null && privateEndPort.length > 0) array1.push("&privateendport="+privateEndPort); var protocol = $createPortForwardingRow.find("#protocol").val(); array1.push("&protocol="+protocol); var virtualMachineId = $createPortForwardingRow.find("#vm").val(); array1.push("&virtualmachineid=" + virtualMachineId); if(g_firewallRuleUiEnabled == "true") array1.push("&openfirewall=false"); $.ajax({ data: createURL("command=createPortForwardingRule"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createportforwardingruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded var item = json.queryasyncjobresultresponse.jobresult.portforwardingrule; portForwardingJsonToTemplate(item,$template); $spinningWheel.hide(); refreshCreatePortForwardingRow(); } else if (result.jobstatus == 2) { // Failed $template.slideUp("slow", function() { $(this).remove(); }); //var errorMsg = g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); return false; }); //*** Port Forwarding tab (end) *** } //*** Load Balancer tab (begin) *** var createLoadBalancerRow = $("#tab_content_load_balancer #create_load_balancer_row"); createLoadBalancerRow.find("#add_link").bind("click", function(event){ // validate values var isValid = true; //isValid &= validateCIDRList("CIDR", createLoadBalancerRow.find("#cidr"), createLoadBalancerRow.find("#cidr_errormsg"), true); //optional isValid &= validateString("Name", createLoadBalancerRow.find("#name"), createLoadBalancerRow.find("#name_errormsg")); isValid &= validateInteger("Public Port", createLoadBalancerRow.find("#public_port"), createLoadBalancerRow.find("#public_port_errormsg"), 1, 65535); isValid &= validateInteger("Private Port", createLoadBalancerRow.find("#private_port"), createLoadBalancerRow.find("#private_port_errormsg"), 1, 65535); if (!isValid) return; var $template = $("#load_balancer_template").clone(); $("#tab_content_load_balancer #grid_content").append($template.show()); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.adding.processing"]); $spinningWheel.show(); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var array1 = []; array1.push("&publicipid="+ipObj.id); var name = createLoadBalancerRow.find("#name").val(); array1.push("&name="+todb(name)); var publicPort = createLoadBalancerRow.find("#public_port").val(); array1.push("&publicport="+publicPort); var privatePort = createLoadBalancerRow.find("#private_port").val(); array1.push("&privateport="+privatePort); var algorithm = createLoadBalancerRow.find("#algorithm_select").val(); array1.push("&algorithm="+algorithm); if(g_firewallRuleUiEnabled == "true") array1.push("&openfirewall=false"); $.ajax({ data: createURL("command=createLoadBalancerRule"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createloadbalancerruleresponse.jobid; var timerKey = "addLbJob_"+jobId; $("body").everyTime(2000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), 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 item = result.jobresult.loadbalancer; loadBalancerJsonToTemplate(item, $template); $spinningWheel.hide(); refreshCreateLoadBalancerRow(); } else if (result.jobstatus == 2) { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = fromdb(result.jobresult.errortext); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); }, 0); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { $template.slideUp("slow", function() { $(this).remove(); }); var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); }); } }); return false; }); //*** Load Balancer tab (end) *** //****** Advanced Zone (end) ******************************************************************************************************************* } function ipGetMidmenuId(jsonObj) { return ipGetMidmenuId2(jsonObj.ipaddress); } function ipGetMidmenuId2(ipaddress) { return "midmenuItem_" + ipaddress.replace(/\./g, "_"); //e.g. "192.168.33.108" => "192_168_33_108" } function ipToMidmenu(jsonObj, $midmenuItem1) { var id = ipGetMidmenuId(jsonObj); $midmenuItem1.attr("id", id); $midmenuItem1.data("jsonObj", jsonObj); var $iconContainer = $midmenuItem1.find("#icon_container").show(); $iconContainer.find("#icon").attr("src", "images/midmenuicon_network_networkgroup.png"); var firstRowText = fromdb(jsonObj.ipaddress); if (jsonObj.issourcenat == true) firstRowText += "[source nat]"; $midmenuItem1.find("#first_row").text(firstRowText.substring(0,midMenuFirstRowLength)); $midmenuItem1.find("#first_row_container").attr("title", firstRowText); var secondRowText = "owned by: "+fromdb(jsonObj.account); $midmenuItem1.find("#second_row").text(secondRowText.substring(0,midMenuSecondRowLength)); $midmenuItem1.find("#second_row_container").attr("title", secondRowText); } function isIpManageable(domainid, account) { if(((g_domainid == domainid && g_account == account) || (isDomainAdmin()) || (isAdmin())) && account!="system") return true; else return false; } function ipToRightPanel($midmenuItem1) { var ipObj = $midmenuItem1.data("jsonObj"); var networkObj; if(ipObj.networkid != null) { $.ajax({ data: createURL("command=listNetworks&id="+ipObj.associatednetworkid), dataType: "json", async: false, success: function(json) { var items = json.listnetworksresponse.network; if(items != null && items.length > 0) { networkObj = items[0]; $midmenuItem1.data("networkObj", networkObj); } } }); } copyActionInfoFromMidMenuToRightPanel($midmenuItem1); $("#right_panel_content").data("$midmenuItem1", $midmenuItem1); if(g_supportELB == "guest" || g_supportELB == "public") $("#tab_load_balancer").click(); else $("#tab_details").click(); if(ipObj.isstaticnat == true) { if(g_firewallRuleUiEnabled == "true") { $("#tab_firewall").show(); $("#tab_port_range").hide(); } else { $("#tab_firewall").hide(); $("#tab_port_range").show(); } $("#tab_port_forwarding, #tab_load_balancer, #tab_vpn").hide(); } else { //ipObj.isstaticnat == false $("#tab_port_range").hide(); if(ipObj.forvirtualnetwork == true) { // Public network if(isIpManageable(ipObj.domainid, ipObj.account) == true) { // IP is managable if(g_firewallRuleUiEnabled == "true") $("#tab_firewall").show(); else $("#tab_firewall").hide(); //Port Forwarding tab if(networkObj != null) { var firewallServiceObj = ipFindNetworkServiceByName("Firewall", networkObj); if(firewallServiceObj != null) { var portForwardingCapabilityObj = ipFindCapabilityByName("PortForwarding", firewallServiceObj); if(portForwardingCapabilityObj != null) { if(portForwardingCapabilityObj.value == "true") $("#tab_port_forwarding").show(); else $("#tab_port_forwarding").hide(); } else { $("#tab_port_forwarding").hide(); } } else { $("#tab_port_forwarding").hide(); } } else { $("#tab_port_forwarding").hide(); } //Load Balancer tab if (ipObj.issourcenat == true) { var lbServiceObj = ipFindNetworkServiceByName("Lb", networkObj); if(lbServiceObj != null) { var LoadBalancingSupportedIpsCapabilityObj = ipFindCapabilityByName("LoadBalancingSupportedIps", lbServiceObj); if(LoadBalancingSupportedIpsCapabilityObj != null) $("#tab_load_balancer").hide(); else $("#tab_load_balancer").show(); } else { $("#tab_load_balancer").hide(); } } else { if(networkObj != null) { var lbServiceObj = ipFindNetworkServiceByName("Lb", networkObj); if(lbServiceObj != null) $("#tab_load_balancer").show(); else $("#tab_load_balancer").hide(); } else { $("#tab_load_balancer").hide(); } } //VPN tab if (ipObj.issourcenat == true) { var vpnServiceObj = ipFindNetworkServiceByName("Vpn", networkObj); if(vpnServiceObj != null) $("#tab_vpn").show(); else $("#tab_vpn").hide(); } else { $("#tab_vpn").hide(); } } else { // IP is not managable $("#tab_firewall, #tab_port_forwarding, #tab_load_balancer, #tab_vpn").hide(); } } else { // Direct Network (ipObj.forvirtualnetwork == false) $("#tab_firewall, #tab_port_forwarding, #tab_load_balancer, #tab_vpn").hide(); } } } function ipJsonToFirewallTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearFirewallTab(); return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearFirewallTab(); return; } var $thisTab = $("#right_panel_content #tab_content_firewall"); $thisTab.find("#tab_container").hide(); $thisTab.find("#tab_spinning_wheel").show(); var networkObj = $midmenuItem1.data("networkObj"); if(networkObj != null) { var firewallServiceObj = ipFindNetworkServiceByName("Firewall", networkObj); if(firewallServiceObj != null) { var supportedProtocolsCapabilityObj = ipFindCapabilityByName("SupportedProtocols", firewallServiceObj); if(supportedProtocolsCapabilityObj != null) { var protocols = supportedProtocolsCapabilityObj.value.toUpperCase(); //e.g. "tcp,udp" => "TCP,UDP" var array1 = protocols.split(","); var $protocolField = $("#create_firewall_row").find("#protocol").empty(); for(var i=0; i"+array1[i]+"") } } } } refreshCreateFirewallRow(); $.ajax({ data: createURL("command=listFirewallRules&ipaddressid=" + ipObj.id), dataType: "json", success: function(json) { var items = json.listfirewallrulesresponse.firewallrule; var $grid = $thisTab.find("#grid_content").empty(); if (items != null && items.length > 0) { for (var i = 0; i < items.length; i++) { var $template = $("#firewall_template").clone(true); firewallJsonToTemplate(items[i], $template); $grid.append($template.show()); } } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); } }); } function ipJsonToPortRangeTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearPortRangeTab(); return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearPortRangeTab(); return; } var $thisTab = $("#right_panel_content #tab_content_port_range"); $thisTab.find("#tab_container").hide(); $thisTab.find("#tab_spinning_wheel").show(); var networkObj = $midmenuItem1.data("networkObj"); if(networkObj != null) { var firewallServiceObj = ipFindNetworkServiceByName("Firewall", networkObj); if(firewallServiceObj != null) { var supportedProtocolsCapabilityObj = ipFindCapabilityByName("SupportedProtocols", firewallServiceObj); if(supportedProtocolsCapabilityObj != null) { var protocols = supportedProtocolsCapabilityObj.value.toUpperCase(); //e.g. "tcp,udp" => "TCP,UDP" var array1 = protocols.split(","); var $protocolField = $("#create_port_range_row").find("#protocol").empty(); for(var i=0; i"+array1[i]+"") } } } } refreshCreatePortRangeRow(); $.ajax({ data: createURL("command=listIpForwardingRules&ipaddressid=" + ipObj.id), dataType: "json", success: function(json) { var items = json.listipforwardingrulesresponse.ipforwardingrule; var $PortRangeGrid = $thisTab.find("#grid_content"); $PortRangeGrid.empty(); if (items != null && items.length > 0) { for (var i = 0; i < items.length; i++) { var $template = $("#port_range_template").clone(true); portRangeJsonToTemplate(items[i], $template); $PortRangeGrid.append($template.show()); } } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); } }); } function ipJsonToPortForwardingTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearPortForwardingTab(); return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearPortForwardingTab(); return; } var $thisTab = $("#right_panel_content #tab_content_port_forwarding"); $thisTab.find("#tab_container").hide(); $thisTab.find("#tab_spinning_wheel").show(); var networkObj = $midmenuItem1.data("networkObj"); if(networkObj != null) { var firewallServiceObj = ipFindNetworkServiceByName("Firewall", networkObj); if(firewallServiceObj != null) { var supportedProtocolsCapabilityObj = ipFindCapabilityByName("SupportedProtocols", firewallServiceObj); if(supportedProtocolsCapabilityObj != null) { var protocols = supportedProtocolsCapabilityObj.value.toUpperCase(); //e.g. "tcp,udp" => "TCP,UDP" var array1 = protocols.split(","); var $protocolField = $("#create_port_forwarding_row").find("#protocol").empty(); for(var i=0; i"+array1[i]+"") } } } } refreshCreatePortForwardingRow(); $.ajax({ data: createURL("command=listPortForwardingRules&ipaddressid=" + ipObj.id), dataType: "json", success: function(json) { var items = json.listportforwardingrulesresponse.portforwardingrule; var $portForwardingGrid = $thisTab.find("#grid_content"); $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()); } } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); } }); } function ipJsonToLoadBalancerTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearLoadBalancerTab(); return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearLoadBalancerTab(); return; } var $thisTab = $("#right_panel_content #tab_content_load_balancer"); $thisTab.find("#tab_container").hide(); $thisTab.find("#tab_spinning_wheel").show(); var networkObj = $midmenuItem1.data("networkObj"); if(networkObj != null) { var lbServiceObj = ipFindNetworkServiceByName("Lb", networkObj); if(lbServiceObj != null) { var supportedLbAlgorithmsCapabilityObj = ipFindCapabilityByName("SupportedLbAlgorithms", lbServiceObj); if(supportedLbAlgorithmsCapabilityObj != null) { var algorithms = supportedLbAlgorithmsCapabilityObj.value; //e.g. "roundrobin,leastconn,sourceip" var array1 = algorithms.split(","); var $algorithmField1 = $("#create_load_balancer_row").find("#algorithm_select").empty(); var $algorithmField2 = $("#load_balancer_template").find("#row_container_edit").find("#algorithm_select").empty(); for(var i=0; i"+array1[i]+""); $algorithmField2.append(""); } } } } refreshCreateLoadBalancerRow(); $.ajax({ data: createURL("command=listLoadBalancerRules&publicipid="+ipObj.id), dataType: "json", success: function(json) { var items = json.listloadbalancerrulesresponse.loadbalancerrule; var loadBalancerGrid = $thisTab.find("#grid_content"); 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()); } } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); } }); } function showEnableVPNDialog($thisTab) { $("#dialog_enable_vpn") .dialog('option', 'buttons', { "Enable": function() { var $thisDialog = $(this); $thisDialog.find("#info_container").hide(); $spinningWheel = $thisDialog.find("#spinning_wheel").show(); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var array1 = []; array1.push("&publicipid="+ipObj.id); array1.push("&account="+ipObj.account); array1.push("&domainid="+ipObj.domainid); array1.push("&zoneid="+ipObj.zoneid); if(g_firewallRuleUiEnabled == "true") array1.push("&openfirewall=true"); $.ajax({ data: createURL("command=createRemoteAccessVpn"+array1.join("")), dataType: "json", success: function(json) { var jobId = json.createremoteaccessvpnresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded showVpnUsers(result.jobresult.remoteaccessvpn.presharedkey, result.jobresult.remoteaccessvpn.publicip); $thisDialog.dialog("close"); $thisTab.find("#tab_container").show(); $thisTab.find("#vpn_disabled_msg").hide(); } else if (result.jobstatus == 2) { // Failed //var errorMsg = "We were unable to enable VPN access. Please contact support."; var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $thisDialog.find("#info_container").text(errorMsg).show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, "Cancel": function() { $thisTab.find("#tab_container").hide(); $thisTab.find("#vpn_disabled_msg").show(); $(this).dialog("close"); $thisTab.find("#enable_vpn_link").unbind("click").bind("click", function(event) { showEnableVPNDialog($thisTab); }); } }).dialog("open"); } function ipJsonToVPNTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearVPNTab(); return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearVPNTab(); return; } var $thisTab = $("#right_panel_content").find("#tab_content_vpn"); $thisTab.find("#tab_spinning_wheel").show(); $thisTab.find("#tab_container").hide(); $.ajax({ data: createURL("command=listRemoteAccessVpns&publicipid="+ipObj.id), dataType: "json", success: function(json) { var items = json.listremoteaccessvpnsresponse.remoteaccessvpn; if (items != null && items.length > 0) { showVpnUsers(items[0].presharedkey, items[0].publicip); } else { showEnableVPNDialog($thisTab); } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); $thisTab.find("#vpn_disabled_msg").hide(); } }); } function ipClearVPNTab() { var $thisTab = $("#right_panel_content").find("#tab_content_vpn"); showEnableVPNDialog($thisTab); $thisTab.find("#vpn_disabled_msg").hide(); } function showVpnUsers(presharedkey, publicip) { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); var ipObj = $midmenuItem1.data("jsonObj"); var $vpnTab = $("#right_panel_content #tab_content_vpn"); var $actionMenu = $vpnTab.find("#vpn_action_menu"); $actionMenu.find("#action_list").empty(); $vpnTab.find("#vpn_key").text(presharedkey); $vpnTab.find("#vpn_ip").text(publicip); var $listItemTemplate = $("#action_list_item"); var $listItem = $listItemTemplate.clone(); $listItem.find("#link").text("Disable VPN"); $listItem.bind("click", function(event) { $actionMenu.hide(); $("#dialog_disable_vpn") .dialog('option', 'buttons', { "Disable": function() { var $thisDialog = $(this); $thisDialog.find("#info_container").hide(); $spinningWheel = $thisDialog.find("#spinning_wheel").show(); $.ajax({ data: createURL("command=deleteRemoteAccessVpn&publicipid="+ipObj.id+"&account="+ipObj.account+"&domainid="+ipObj.domainid+"&zoneid="+ipObj.zoneid), dataType: "json", success: function(json) { var jobId = json.deleteremoteaccessvpnresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $thisDialog.dialog("close"); $vpnTab.find("#vpn_help").hide(); $vpnTab.find("#enable_vpn_link").unbind("click").bind("click", function(event) { showEnableVPNDialog($vpnTab); }); $vpnTab.find("#tab_container").hide(); $vpnTab.find("#vpn_disabled_msg").show(); } else if (result.jobstatus == 2) { // Failed //var errorMsg = "We were unable to disable VPN access. Please contact support."; var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $thisDialog.find("#info_container").text(errorMsg).show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); $actionMenu.find("#action_list").append($listItem.show()); $listItem = $listItemTemplate.clone(); $listItem.find("#link").text("Add VPN User"); $listItem.bind("click", function(event) { $actionMenu.hide(); $vpnDialog = $("#dialog_add_vpnuser"); $vpnDialog.find("#username").val(""); $vpnDialog.find("#password").val(""); $("#dialog_add_vpnuser") .dialog('option', 'buttons', { "Add": function() { var $thisDialog = $(this); $thisDialog.find("#info_container").hide(); var isValid = true; isValid &= validateString("Username", $thisDialog.find("#username"), $thisDialog.find("#username_errormsg")); isValid &= validateString("Password", $thisDialog.find("#password"), $thisDialog.find("#password_errormsg")); if (!isValid) return; var username = todb($thisDialog.find("#username").val()); var password = todb($thisDialog.find("#password").val()); $spinningWheel = $thisDialog.find("#spinning_wheel").show(); $.ajax({ data: createURL("command=addVpnUser&username="+username+"&password="+password), dataType: "json", success: function(json) { var jobId = json.addvpnuserresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $thisDialog.dialog("close"); $("#tab_content_vpn #grid_content").append(vpnUserJsonToTemplate(result.jobresult.vpnuser).fadeIn()); } else if (result.jobstatus == 2) { // Failed //var errorMsg = "We were unable to add user access to your VPN. Please contact support."; var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $thisDialog.find("#info_container").text(errorMsg).show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); $actionMenu.find("#action_list").append($listItem.show()); // Enable action menu for vpn var $actionLink = $vpnTab.find("#vpn_action_link"); $actionLink.unbind("mouseover").bind("mouseover", function(event) { $(this).find("#vpn_action_menu").show(); return false; }); $actionLink.unbind("mouseout").bind("mouseout", function(event) { $(this).find("#vpn_action_menu").hide(); return false; }); $vpnTab.find("#vpn_help").show(); enableDeleteUser(); // List users $.ajax({ data: createURL("command=listVpnUsers&account="+ipObj.account+"&domainid="+ipObj.domainid), dataType: "json", async: false, success: function(json) { var items = json.listvpnusersresponse.vpnuser; if(items != null && items.length > 0) { var $gridContent = $("#tab_content_vpn #grid_content").empty(); for (var i = 0; i < items.length; i++) { $gridContent.append(vpnUserJsonToTemplate(items[i]).show()); } //Enable delete user } } }); } function enableDeleteUser() { $("#tab_content_vpn #grid_content").unbind("click").bind("click", function(event) { var target = $(event.target); var targetId = target.attr("id"); if (targetId == "vpn_delete_user") { var id = target.data("id"); var username = target.data("username"); var account = target.data("account"); var domainId = target.data("domainid"); var params = []; params.push("&username="+username); params.push("&account="+account); params.push("&domainid="+domainId); var $thisDialog = $("#dialog_confirmation_remove_vpnuser"); $thisDialog.find("#username").text(target.data("username")); $thisDialog.dialog('option', 'buttons', { "Ok": function() { $thisDialog.find("#info_container").hide(); $spinningWheel = $thisDialog.find("#spinning_wheel").show(); $.ajax({ data: createURL("command=removeVpnUser"+params.join("")), dataType: "json", success: function(json) { var jobId = json.removevpnuserresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $thisDialog.dialog("close"); //remove user from grid $("#right_panel_content #tab_content_vpn").find("#vpnuser"+id).slideUp(); } else if (result.jobstatus == 2) { // Failed //var errorMsg = "We were unable to add user access to your VPN. Please contact support."; var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $thisDialog.find("#info_container").text(errorMsg).show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDialog(XMLHttpResponse, $thisDialog); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); } return false; }); } var vpnItem = 1; function vpnUserJsonToTemplate(json) { var $template = $("#vpn_template").clone(); if (vpnItem++ % 2 == 0) $template.removeClass("odd").addClass("even"); $template.find("#username").text(json.username); $template.attr("id", "vpnuser"+json.id); $template.find("#vpn_delete_user").data("id", json.id).data("username", json.username).data("account", json.account).data("domainid", json.domainid); return $template; } function ipClearRightPanel() { ipClearDetailsTab(); ipClearPortForwardingTab(); ipClearLoadBalancerTab(); } //***** Details tab (begin) **************************************************************************************************************** function ipJsonToDetailsTab() { var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) { ipClearDetailsTab() return; } var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) { ipClearDetailsTab() return; } var networkObj = $midmenuItem1.data("networkObj"); var publicipid = ipObj.id; var $thisTab = $("#right_panel_content").find("#tab_content_details"); $thisTab.find("#tab_container").hide(); $thisTab.find("#tab_spinning_wheel").show(); var cmd; if(g_supportELB == "guest") { cmd = "command=listPublicIpAddresses&forvirtualnetwork=false&id="+publicipid; } else if(g_supportELB == "public") { cmd = "command=listPublicIpAddresses&forvirtualnetwork=true&id="+publicipid; } else { //g_supportELB == "false" cmd = "command=listPublicIpAddresses&id="+publicipid; } $.ajax({ data: createURL(cmd), dataType: "json", async: false, success: function(json) { var items = json.listpublicipaddressesresponse.publicipaddress; if(items != null && items.length > 0) { ipObj = items[0]; $midmenuItem1.data("jsonObj", ipObj); } } }); $thisTab.find("#grid_header_title").text(fromdb(ipObj.ipaddress)); $thisTab.find("#id").text(fromdb(ipObj.id)); $thisTab.find("#ipaddress").text(fromdb(ipObj.ipaddress)); $thisTab.find("#zonename").text(fromdb(ipObj.zonename)); $thisTab.find("#state").text(fromdb(ipObj.state)); $thisTab.find("#vlanname").text(fromdb(ipObj.vlanname)); setBooleanReadField(ipObj.issourcenat, $thisTab.find("#source_nat")); setNetworkTypeField(ipObj.forvirtualnetwork, $thisTab.find("#network_type")); $thisTab.find("#networkid").text(fromdb(ipObj.networkid)); $thisTab.find("#associatednetworkid").text(fromdb(ipObj.associatednetworkid)); $thisTab.find("#domain").text(fromdb(ipObj.domain)); $thisTab.find("#account").text(fromdb(ipObj.account)); $thisTab.find("#allocated").text(fromdb(ipObj.allocated)); setBooleanReadField(ipObj.isstaticnat, $thisTab.find("#static_nat")); if(ipObj.isstaticnat == true) { $thisTab.find("#vm_of_static_nat").text(getVmName(ipObj.virtualmachinename, ipObj.virtualmachinedisplayname)); $thisTab.find("#vm_of_static_nat_container").show(); } else { $thisTab.find("#vm_of_static_nat").text(""); $thisTab.find("#vm_of_static_nat_container").hide(); } //actions *** var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); var noAvailableActions = true; if(isIpManageable(ipObj.domainid, ipObj.account) == true) { ipPopulateVMarray(ipObj); //popoulate VM array var $vmSelect = $("#dialog_enable_static_NAT").find("#vm_dropdown").empty(); ipPopulateVMDropdown($vmSelect); if(ipObj.isstaticnat == true) { buildActionLinkForTab("label.action.disable.static.NAT", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); buildActionLinkForTab("label.action.release.ip", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); noAvailableActions = false; } else { if(ipObj.issourcenat != true) { if(networkObj != null) { var firewallServiceObj = ipFindNetworkServiceByName("Firewall", networkObj); if(firewallServiceObj != null) { var staticNatCapabilityObj = ipFindCapabilityByName("StaticNat", firewallServiceObj); if(staticNatCapabilityObj != null) { if(staticNatCapabilityObj.value == "true") buildActionLinkForTab("label.action.enable.static.NAT", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); } } } buildActionLinkForTab("label.action.release.ip", ipActionMap, $actionMenu, $midmenuItem1, $thisTab); noAvailableActions = false; } } } // no available actions if(noAvailableActions == true) { $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); } $thisTab.find("#tab_spinning_wheel").hide(); $thisTab.find("#tab_container").show(); } function ipClearDetailsTab() { var $thisTab = $("#right_panel_content #tab_content_details"); $thisTab.find("#grid_header_title").text(""); $thisTab.find("#id").text(""); $thisTab.find("#ipaddress").text(""); $thisTab.find("#zonename").text(""); $thisTab.find("#state").text(""); $thisTab.find("#vlanname").text(""); $thisTab.find("#source_nat").text(""); $thisTab.find("#network_type").text(""); $thisTab.find("#networkid").text(""); $thisTab.find("#associatednetworkid").text(""); $thisTab.find("#domain").text(""); $thisTab.find("#account").text(""); $thisTab.find("#allocated").text(""); $thisTab.find("#static_nat").text(""); $thisTab.find("#vm_of_static_nat").text(""); //actions *** var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); } function setNetworkTypeField(value, $field) { if(value == true) $field.text("Public"); else if(value == false) $field.text("Direct"); else $field.text(""); } var ipActionMap = { "label.action.release.ip": { isAsyncJob: true, asyncJobResponse: "disassociateipaddressresponse", dialogBeforeActionFn : doReleaseIp, inProcessText: "label.action.release.ip.processing", afterActionSeccessFn: function(json, $midmenuItem1, id) { $midmenuItem1.remove(); if(id.toString() == $("#right_panel_content").find("#tab_content_details").find("#id").text()) { clearRightPanel(); ipClearRightPanel(); } } }, "label.action.enable.static.NAT": { isAsyncJob: false, dialogBeforeActionFn: doEnableStaticNAT, inProcessText: "label.action.enable.static.NAT.processing", afterActionSeccessFn: function(json, $midmenuItem1, id) { if(id.toString() == $("#right_panel_content").find("#tab_content_details").find("#id").text()) { $.ajax({ data: createURL("command=listPublicIpAddresses&id="+id), dataType: "json", async: false, success: function(json) { var items = json.listpublicipaddressesresponse.publicipaddress; if(items != null && items.length > 0) { ipToMidmenu(items[0], $midmenuItem1); } } }); } } }, "label.action.disable.static.NAT": { isAsyncJob: true, asyncJobResponse: "disablestaticnatresponse", dialogBeforeActionFn: doDisableStaticNAT, inProcessText: "label.action.disable.static.NAT.processing", afterActionSeccessFn: function(json, $midmenuItem1, id) { if(id.toString() == $("#right_panel_content").find("#tab_content_details").find("#id").text()) { $.ajax({ data: createURL("command=listPublicIpAddresses&id="+id), dataType: "json", async: false, success: function(json) { var items = json.listpublicipaddressesresponse.publicipaddress; if(items != null && items.length > 0) { ipToMidmenu(items[0], $midmenuItem1); } } }); } } } } function doReleaseIp($actionLink, $detailsTab, $midmenuItem1) { var jsonObj = $midmenuItem1.data("jsonObj"); var id = jsonObj.id; $("#dialog_confirmation") .text(dictionary["message.action.release.ip"]) .dialog('option', 'buttons', { "Confirm": function() { $(this).dialog("close"); var apiCommand = "command=disassociateIpAddress&id="+id; doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $detailsTab); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); } function doEnableStaticNAT($actionLink, $detailsTab, $midmenuItem1) { var ipObj = $midmenuItem1.data("jsonObj"); $("#dialog_enable_static_NAT") .dialog('option', 'buttons', { "Confirm": function() { var $thisDialog = $(this); //validate var vmId = $thisDialog.find("#vm_dropdown").val(); if(vmId == null || vmId.length == 0) return; $thisDialog.dialog("close"); var apiCommand = "command=enableStaticNat&ipaddressid="+ipObj.id+"&virtualmachineid="+vmId; doActionToTab(ipObj.id, $actionLink, apiCommand, $midmenuItem1, $detailsTab); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); } function doDisableStaticNAT($actionLink, $detailsTab, $midmenuItem1) { var ipObj = $midmenuItem1.data("jsonObj"); $("#dialog_confirmation") .text(dictionary["message.action.disable.static.NAT"]) .dialog('option', 'buttons', { "Confirm": function() { $(this).dialog("close"); var apiCommand = "command=disableStaticNat&ipaddressid="+ipObj.id; doActionToTab(ipObj.id, $actionLink, apiCommand, $midmenuItem1, $detailsTab); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); } //***** Details tab (end) ****************************************************************************************************************** function ipSetRuleState(stateValue, $stateField) { $stateField.text(stateValue); if(stateValue == "Active") //green $stateField.removeClass("status_red status_gray").addClass("status_green"); else if(stateValue == "Deleting") //red $stateField.removeClass("status_green status_gray").addClass("status_red"); else //gray $stateField.removeClass("status_red status_green").addClass("status_gray"); } //***** Firewall tab (begin) ******************************************************************************************************** function ipClearFirewallTab() { $("#tab_firewall #grid_content").empty(); refreshCreateFirewallRow(); } function firewallJsonToTemplate(jsonObj, $template) { $template.attr("id", "firewall_" + fromdb(jsonObj.id)).data("firewallId", fromdb(jsonObj.id)); $template.find("#row_container #cidr").text(fromdb(jsonObj.cidrlist)); $template.find("#row_container #start_port").text(fromdb(jsonObj.startport)); $template.find("#row_container #end_port").text(fromdb(jsonObj.endport)); $template.find("#row_container #protocol").text(fromdb(jsonObj.protocol)); $template.find("#row_container #ICMP_type").text(fromdb(jsonObj.icmptype)); $template.find("#row_container #ICMP_code").text(fromdb(jsonObj.icmpcode)); $template.find("#delete_link").unbind("click").bind("click", function(event){ var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.deleting.processing"]); $spinningWheel.show(); $.ajax({ data: createURL("command=deleteFirewallRule&id="+fromdb(jsonObj.id)), dataType: "json", success: function(json) { var jobId = json.deletefirewallruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $template.slideUp("slow", function() { $(this).remove(); }); } else if (result.jobstatus == 2) { // Failed var errorMsg = g_dictionary["label.deleting.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); $spinningWheel.hide(); handleError(XMLHttpResponse); } }); }, 0 ); }, error: function(XMLHttpResponse) { $spinningWheel.hide(); handleError(XMLHttpResponse); } }); return false; }); } function refreshCreateFirewallRow() { var $createFirewallRow = $("#tab_content_firewall").find("#create_firewall_row"); $createFirewallRow.find("#cidr").val(""); $createFirewallRow.find("#start_port").val(""); $createFirewallRow.find("#end_port").val(""); $createFirewallRow.find("#ICMP_type").val(""); $createFirewallRow.find("#ICMP_code").val(""); $createFirewallRow.find("#protocol").change(); } //***** Firewall tab (end) ********************************************************************************************************** //***** Port Range tab (begin) ******************************************************************************************************** function ipClearPortRangeTab() { $("#tab_content_port_range #grid_content").empty(); refreshCreatePortRangeRow(); } function portRangeJsonToTemplate(jsonObj, $template) { $template.attr("id", "PortRange_" + fromdb(jsonObj.id)).data("PortRangeId", fromdb(jsonObj.id)); $template.find("#row_container #start_port").text(fromdb(jsonObj.startport)); $template.find("#row_container #end_port").text(fromdb(jsonObj.endport)); $template.find("#row_container #protocol").text(fromdb(jsonObj.protocol)); ipSetRuleState(fromdb(jsonObj.state), $template.find("#row_container #state")); $template.find("#delete_link").unbind("click").bind("click", function(event){ var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.deleting.processing"]); $spinningWheel.show(); $.ajax({ data: createURL("command=deleteIpForwardingRule&id="+fromdb(jsonObj.id)), dataType: "json", success: function(json) { var jobId = json.deleteipforwardingruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $template.slideUp("slow", function() { $(this).remove(); }); } else if (result.jobstatus == 2) { // Failed var errorMsg = g_dictionary["label.deleting.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); $spinningWheel.hide(); handleError(XMLHttpResponse); } }); }, 0 ); }, error: function(XMLHttpResponse) { $spinningWheel.hide(); handleError(XMLHttpResponse); } }); return false; }); } function refreshCreatePortRangeRow() { var $createPortRangeRow = $("#create_port_range_row"); $createPortRangeRow.find("#start_port").val(""); $createPortRangeRow.find("#end_port").val(""); } //***** Port Range tab (end) ********************************************************************************************************** //***** Port Forwarding tab (begin) ******************************************************************************************************** function ipClearPortForwardingTab() { $("#tab_content_port_forwarding #grid_content").empty(); refreshCreatePortForwardingRow(); } function portForwardingJsonToTemplate(jsonObj, $template) { $template.attr("id", "portForwarding_" + fromdb(jsonObj.id)).data("portForwardingId", fromdb(jsonObj.id)); var publicPort = fromdb(jsonObj.publicport); if(jsonObj.publicendport != null && jsonObj.publicendport.length > 0) publicPort += (" - " + fromdb(jsonObj.publicendport)); $template.find("#public_port").text(publicPort); var privatePort = fromdb(jsonObj.privateport); if(jsonObj.privateendport != null && jsonObj.privateendport.length > 0) privatePort += (" - " + fromdb(jsonObj.privateendport)); $template.find("#private_port").text(privatePort); $template.find("#protocol").text(fromdb(jsonObj.protocol)); var vmName = getVmName(jsonObj.virtualmachinename, jsonObj.virtualmachinedisplayname); $template.find("#vm_name").text(vmName); var virtualMachineId = fromdb(jsonObj.virtualmachineid); ipSetRuleState(fromdb(jsonObj.state), $template.find("#state")); var $midmenuItem1 = $("#right_panel_content").data("$midmenuItem1"); if($midmenuItem1 == null) return; var ipObj = $midmenuItem1.data("jsonObj"); if(ipObj == null) return; var ipAddress = fromdb(ipObj.ipaddress); $template.find("#delete_link").unbind("click").bind("click", function(event){ var $spinningWheel = $template.find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.deleting.processing"]); $spinningWheel.show(); $.ajax({ data: createURL("command=deletePortForwardingRule&id="+fromdb(jsonObj.id)), dataType: "json", success: function(json) { var jobId = json.deleteportforwardingruleresponse.jobid; var timerKey = "asyncJob_" + jobId; $("body").everyTime( 10000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $template.slideUp("slow", function() { $(this).remove(); }); } else if (result.jobstatus == 2) { // Failed var errorMsg = g_dictionary["label.deleting.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); $spinningWheel.hide(); handleError(XMLHttpResponse); } }); }, 0 ); }, error: function(XMLHttpResponse) { $spinningWheel.hide(); handleError(XMLHttpResponse); } }); return false; }); } function refreshCreatePortForwardingRow() { var $createPortForwardingRow = $("#create_port_forwarding_row"); $createPortForwardingRow.find("#public_port").val(""); $createPortForwardingRow.find("#public_end_port").val(""); $createPortForwardingRow.find("#private_port").val(""); $createPortForwardingRow.find("#private_end_port").val(""); var $vmSelect = $createPortForwardingRow.find("#vm").empty(); ipPopulateVMDropdown($vmSelect); } var runningVMs, stoppedVMs; function ipPopulateVMarray(ipObj) { var commandString = "command=listVirtualMachines&domainid="+ipObj.domainid+"&account="+ipObj.account+"&networkid="+ipObj.associatednetworkid; $.ajax({ data: createURL(commandString+"&state=Running"), dataType: "json", async: false, success: function(json) { runningVMs = json.listvirtualmachinesresponse.virtualmachine; } }); $.ajax({ data: createURL(commandString+"&state=Stopped"), dataType: "json", async: false, success: function(json) { stoppedVMs = json.listvirtualmachinesresponse.virtualmachine; } }); } function ipPopulateVMDropdown($vmSelect) { if (runningVMs != null && runningVMs.length > 0) { for (var i = 0; i < runningVMs.length; i++) { var html = $(""); $vmSelect.append(html); } } if (stoppedVMs != null && stoppedVMs.length > 0) { for (var i = 0; i < stoppedVMs.length; i++) { var html = $(""); $vmSelect.append(html); } } } //***** Port Forwarding tab (end) ********************************************************************************************************** //***** Load Balancer tab (begin) ********************************************************************************************************** function ipClearLoadBalancerTab() { $("#tab_content_load_balancer #grid_content").empty(); refreshCreateLoadBalancerRow(); } function loadBalancerJsonToTemplate(jsonObj, $template) { var loadBalancerId = fromdb(jsonObj.id); $template.attr("id", "loadBalancer_" + loadBalancerId).data("loadBalancerId", loadBalancerId); $template.find("#row_container #name").text(fromdb(jsonObj.name)); $template.find("#row_container_edit #name").val(fromdb(jsonObj.name)); $template.find("#row_container #public_port").text(fromdb(jsonObj.publicport)); $template.find("#row_container_edit #public_port").text(fromdb(jsonObj.publicport)); $template.find("#row_container #private_port").text(fromdb(jsonObj.privateport)); $template.find("#row_container_edit #private_port").text(fromdb(jsonObj.privateport)); $template.find("#row_container #algorithm").text(fromdb(jsonObj.algorithm)); $template.find("#row_container_edit #algorithm_select").val(fromdb(jsonObj.algorithm)); ipSetRuleState(fromdb(jsonObj.state), $template.find("#row_container #state")); $template.find("#manage_link").unbind("click").bind("click", function(event){ var $managementArea = $template.find("#management_area"); var $vmSubgrid = $managementArea.find("#subgrid_content"); if($managementArea.css("display") == "none") { $vmSubgrid.empty(); $.ajax({ cache: false, data: createURL("command=listLoadBalancerRuleInstances&id="+loadBalancerId+"&applied=true"), 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].ipaddress}; lbVmObjToTemplate(obj, $lbVmTemplate); $vmSubgrid.append($lbVmTemplate.show()); } } } }); $managementArea.show(); } else { $managementArea.hide(); } return false; }); var $rowContainer = $template.find("#row_container"); var $rowContainerEdit = $template.find("#row_container_edit"); $template.find("#delete_link").unbind("click").bind("click", function(event){ var $managementArea = $template.find("#management_area"); if($managementArea.css("display") != "none") $managementArea.hide(); var $spinningWheel = $template.find("#row_container").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.deleting.processing"]); $spinningWheel.show(); $.ajax({ data: createURL("command=deleteLoadBalancerRule&id="+loadBalancerId), dataType: "json", success: function(json) { var jobId = json.deleteloadbalancerruleresponse.jobid; var timerKey = "deleteLoadBalancerRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { $("body").stopTime(timerKey); $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded var total_lbrules = $("#tab_content_load_balancer").find("#grid_content").find(".grid_rows").length; $template.slideUp("slow", function() { $(this).remove(); if(g_supportELB == "guest" || g_supportELB == "public") { var count_lb = $("div[id*='loadBalancer_']").length; if(count_lb == 0) { var params = $("#middle_menu_pagination").data("params"); if(params == null) return; listMidMenuItems2(params.commandString, params.getSearchParamsFn, params.jsonResponse1, params.jsonResponse2, params.toMidmenuFn, params.toRightPanelFn, params.getMidmenuIdFn, params.isMultipleSelectionInMidMenu, 1); if($("div[id*='midmenuItem_']").length == 0) $("#tab_content_load_balancer").hide(); } } }); } else if (result.jobstatus == 2) { // Failed var errorMsg = g_dictionary["label.deleting.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); $spinningWheel.hide(); handleError(XMLHttpResponse); } }); }, 0 ); } , error: function(XMLHttpResponse) { $spinningWheel.hide(); handleError(XMLHttpResponse); } }); 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){ var isValid = true; isValid &= validateString("Name", $rowContainerEdit.find("#name"), $rowContainerEdit.find("#name_errormsg")); if (!isValid) return; var $spinningWheel = $template.find("#row_container_edit").find("#spinning_wheel"); $spinningWheel.find("#description").text(g_dictionary["label.saving.processing"]); $spinningWheel.show(); var name = $rowContainerEdit.find("#name").val(); var algorithm = $rowContainerEdit.find("#algorithm_select").val(); var array1 = []; array1.push("&id=" + loadBalancerId); array1.push("&name=" + name); array1.push("&algorithm=" + algorithm); $.ajax({ data: createURL("command=updateLoadBalancerRule"+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), 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 item = result.jobresult.loadbalancer; loadBalancerJsonToTemplate(item,$template); $spinningWheel.hide(); $rowContainerEdit.hide(); $rowContainer.show(); } else if (result.jobstatus == 2) { //Fail $spinningWheel.hide(); $rowContainerEdit.hide(); $rowContainer.show(); //var errorMsg = g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_alert").text(errorMsg).dialog("open"); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); $spinningWheel.hide(); $rowContainerEdit.hide(); $rowContainer.show(); handleError(XMLHttpResponse); } }); }, 0); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); $spinningWheel.hide(); $rowContainerEdit.hide(); $rowContainer.show(); } }); }); refreshLbVmSelect($template, jsonObj.id); $template.find("#add_vm_to_lb_row #assign_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 $spinningWheel = $template.find("#add_vm_to_lb_row #spinning_wheel"); $spinningWheel.show(); $.ajax({ data: createURL("command=assignToLoadBalancerRule&id="+loadBalancerId+"&virtualmachineids="+vmId), dataType: "json", success: function(json) { var lbInstanceJSON = json.assigntoloadbalancerruleresponse; var jobId = lbInstanceJSON.jobid; var timerKey = "assignToLoadBalancerRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), 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("#management_area #subgrid_content").append($lbVmTemplate.show()); refreshLbVmSelect($template, loadBalancerId); $spinningWheel.hide(); } else if (result.jobstatus == 2) { // Failed //var errorMsg = g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); $spinningWheel.hide(); } } }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); $("body").stopTime(timerKey); $spinningWheel.hide(); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); $spinningWheel.hide(); } }); return false; }); } function refreshCreateLoadBalancerRow() { var createLoadBalancerRow = $("#tab_content_load_balancer #create_load_balancer_row"); createLoadBalancerRow.find("#name").val(""); createLoadBalancerRow.find("#public_port").val(""); createLoadBalancerRow.find("#private_port").val(""); createLoadBalancerRow.find("#algorithm_select").val("roundrobin"); } function lbVmObjToTemplate(obj, $template) { $template.find("#vm_name").text(obj.vmName); $template.find("#vm_private_ip").text(fromdb(obj.vmPrivateIp)); $template.find("#remove_link").bind("click", function(event){ var $spinningWheel = $template.find("#spinning_wheel"); $spinningWheel.show(); $.ajax({ data: createURL("command=removeFromLoadBalancerRule&id="+fromdb(obj.loadBalancerId)+"&virtualmachineids="+fromdb(obj.vmId)), dataType: "json", success: function(json) { var lbJSON = json.removefromloadbalancerruleresponse; var jobId = lbJSON.jobid; var timerKey = "removeFromLoadBalancerRuleJob_"+jobId; $("body").everyTime( 5000, timerKey, function() { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), 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 //var errorMsg = g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $("#dialog_error").text(errorMsg).dialog("open"); $spinningWheel.hide(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse); $spinningWheel.hide(); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); $spinningWheel.hide(); } }); 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"), 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 = $(""); html.data("vmPrivateIp", instances[i].ipaddress); html.data("vmName", vmName); vmSelect.append(html); } } else { vmSelect.append(""); } } }); } //***** Load Balancer tab (end) ************************************************************************************************************