diff --git a/ui/css/main.css b/ui/css/main.css
index 0789854041b..7b3962db9fd 100644
--- a/ui/css/main.css
+++ b/ui/css/main.css
@@ -1293,7 +1293,7 @@ a:hover.vm_create_close {
border-bottom:2px solid #b1b1b1;
margin:0;
padding:0;
- z-index:1004;
+ z-index:30000;
}
.adv_searchformbox {
diff --git a/ui/scripts/cloud.core.ipaddress.js b/ui/scripts/cloud.core.ipaddress.js
new file mode 100644
index 00000000000..889bd34f310
--- /dev/null
+++ b/ui/scripts/cloud.core.ipaddress.js
@@ -0,0 +1,1952 @@
+ /**
+ * 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") {
+ var domainId = $advancedSearchPopup.find("#adv_search_domain").val();
+ if (domainId!=null && domainId.length > 0)
+ moreCriteria.push("&domainid="+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 (begin) ********************************************************************
+ var tabArray = [$("#tab_details"), $("#tab_port_range"), $("#tab_port_forwarding"), $("#tab_load_balancer"), $("#tab_vpn")];
+ var tabContentArray = [$("#tab_content_details"), $("#tab_content_port_range"), $("#tab_content_port_forwarding"), $("#tab_content_load_balancer"), $("#tab_content_vpn")];
+ var afterSwitchFnArray = [ipJsonToDetailsTab, ipJsonToPortRangeTab, ipJsonToPortForwardingTab, ipJsonToLoadBalancerTab, ipJsonToVPNTab];
+ switchBetweenDifferentTabs(tabArray, tabContentArray, afterSwitchFnArray);
+ //***** switch between different tabs (end) **********************************************************************
+
+ //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) {
+ var submenuContent = $("#submenu_content_network");
+ $("#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) ***
+
+ //*** 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);
+
+ $.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");
+
+ $createPortForwardingRow.find("#add_link").bind("click", function(event){
+ var isValid = true;
+ isValid &= validateDropDownBox("Instance", $createPortForwardingRow.find("#vm"), $createPortForwardingRow.find("#vm_errormsg"));
+ isValid &= validateInteger("Public Port", $createPortForwardingRow.find("#public_port"), $createPortForwardingRow.find("#public_port_errormsg"), 1, 65535);
+ isValid &= validateInteger("Private Port", $createPortForwardingRow.find("#private_port"), $createPortForwardingRow.find("#private_port_errormsg"), 1, 65535);
+ 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 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("&ipaddressid="+ipObj.id);
+ array1.push("&publicport="+publicPort);
+ array1.push("&privateport="+privatePort);
+ array1.push("&protocol="+protocol);
+ array1.push("&virtualmachineid=" + virtualMachineId);
+
+ $.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 &= 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 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("&publicipid="+ipObj.id);
+ array1.push("&name="+todb(name));
+ array1.push("&publicport="+publicPort);
+ array1.push("&privateport="+privatePort);
+ array1.push("&algorithm="+algorithm);
+
+ $.ajax({
+ data: createURL("command=createLoadBalancerRule"+array1.join("")),
+ dataType: "json",
+ success: function(json) {
+ var item = json.createloadbalancerruleresponse.loadbalancer;
+ loadBalancerJsonToTemplate(item, $template);
+ $spinningWheel.hide();
+ refreshCreateLoadBalancerRow();
+ },
+ 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) ***
+}
+
+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 firstRow = jsonObj.ipaddress.substring(0,25);
+ if (jsonObj.issourcenat == true) {
+ firstRow+="[source nat]";
+ }
+ $midmenuItem1.find("#first_row").text(firstRow);
+ $midmenuItem1.find("#second_row").text("owned by: "+fromdb(jsonObj.account).substring(0,25));
+}
+
+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.networkid+"&isSystem=true"),
+ 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);
+ $("#tab_details").click();
+
+ if(ipObj.isstaticnat == true) {
+ $("#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) {
+ //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) {
+ $("#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 {
+ $("#tab_port_forwarding, #tab_load_balancer, #tab_vpn").hide();
+ }
+ }
+ else { //ipObj.forvirtualnetwork == false (direct network)
+ $("#tab_port_forwarding, #tab_load_balancer, #tab_vpn").hide();
+ }
+ }
+}
+
+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");
+
+ $.ajax({
+ data: createURL("command=createRemoteAccessVpn&publicipid="+ipObj.id+"&account="+ipObj.account+"&domainid="+ipObj.domainid+"&zoneid="+ipObj.zoneid),
+ 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 id = ipObj.id;
+
+ var $thisTab = $("#right_panel_content").find("#tab_content_details");
+ $thisTab.find("#tab_container").hide();
+ $thisTab.find("#tab_spinning_wheel").show();
+
+ $.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) {
+ 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 ipFindNetworkServiceByName(pName, networkObj) {
+ if(networkObj == null)
+ return null;
+ for(var i=0; i 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");
+}
+
+//***** 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));
+
+ $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").val(fromdb(jsonObj.privateport));
+
+ $template.find("#row_container #protocol").text(fromdb(jsonObj.protocol));
+ $template.find("#row_container_edit #protocol").text(fromdb(jsonObj.protocol));
+
+ var vmName = getVmName(jsonObj.virtualmachinename, jsonObj.virtualmachinedisplayname);
+ $template.find("#row_container #vm_name").text(vmName);
+ var virtualMachineId = fromdb(jsonObj.virtualmachineid);
+
+ ipSetRuleState(fromdb(jsonObj.state), $template.find("#row_container #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);
+
+ var $vmSelect = $template.find("#row_container_edit #vm").empty();
+ ipPopulateVMDropdown($vmSelect);
+ $vmSelect.val(virtualMachineId);
+
+ var $rowContainer = $template.find("#row_container");
+ var $rowContainerEdit = $template.find("#row_container_edit");
+
+ $template.find("#delete_link").unbind("click").bind("click", function(event){
+ var $spinningWheel = $rowContainer.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("#private_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
+ $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;
+ });
+
+ $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) ************************************************************************************************************