/**
* 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
PLEASE RESTART YOUR MGMT SERVER!!
PLEASE RESTART YOUR MGMT SERVER!!
You have successfully change a global configuration value. Please RESTART your management server for your new settings to take effect. Refer to the install guide for instructions on how to restart the mgmt server.
ZONE: "+sanitizeXSS(obj.name)+"
" + "DNS 1: "+obj.dns1+"
" + "DNS 2: "+((obj.dns2 == null) ? "" : obj.dns2) +"
" + "Internal DNS 1: "+obj.internaldns1+"
" + "Internal DNS 2: "+((obj.internaldns2 == null) ? "" : obj.internaldns2) +"
"; if (getNetworkType() != "vnet") rightContentHtml += "VLAN: "+((obj.vlan == null) ? "" : obj.vlan) +"
"; rightContentHtml += "Guest CIDR: "+obj.guestcidraddress+"
"; rightContent.data("id", obj.id).html(rightContentHtml); $("#submenu_content_zones").find("#action_edit_pod, #action_add_directip_vlan").hide(); var buttons = $("#submenu_content_zones #action_delete, #submenu_content_zones #action_edit_zone, #submenu_content_zones #action_add_pod, #submenu_content_zones #action_add_publicip_vlan").data("type", "zone").show(); buttons.data("id", obj.id); buttons.data("name", obj.name); buttons.data("dns1", obj.dns1); buttons.data("dns2", obj.dns2); buttons.data("internaldns1", obj.internaldns1); buttons.data("internaldns2", obj.internaldns2); buttons.data("vlan", obj.vlan); buttons.data("guestcidraddress", obj.guestcidraddress); } function podObjectToRightPanel(obj) { rightPanel.html("Pod: " + sanitizeXSS(obj.name)); var rightContentHtml = "POD: "+sanitizeXSS(obj.name)+"
" + "Private CIDR: "+obj.cidr+"
" + "Private IP Range: "+obj.ipRange+"
" + "Gateway: "+obj.gateway+"
"; rightContent.data("id", obj.id).html(rightContentHtml); $("#submenu_content_zones").find("#action_edit_zone, #action_add_pod, #action_add_publicip_vlan").hide(); var buttons = $("#submenu_content_zones").find("#action_delete, #action_edit_pod").data("type", "pod").show(); buttons.data("id", obj.id); buttons.data("zoneid", obj.zoneid); buttons.data("name", obj.name); buttons.data("cidr", obj.cidr); buttons.data("startip", obj.startip); buttons.data("endip", obj.endip); buttons.data("ipRange", obj.ipRange); buttons.data("gateway", obj.gateway); if (getDirectAttachUntaggedEnabled() == "true") { $("#submenu_content_zones #action_add_directip_vlan").data("type", "pod").data("id", obj.id).data("name", obj.name).data("zoneid", obj.zoneid).show(); } } $("#submenu_content_zones #action_delete").bind("click", function(event) { var deleteButton = $(this); var confirmMessage = null; var id = deleteButton.data("id"); var type = deleteButton.data("type"); var command = null; if (type == "zone") { confirmMessage = "Please confirm you want to delete the zone : " + deleteButton.data("name") +""; command = "deleteZone"; } else if (type == "pod") { confirmMessage = "Please confirm you want to delete the pod : " + deleteButton.data("name") + ""; command = "deletePod" } else { confirmMessage = "Please confirm you want to delete the public vlan IP range : " + deleteButton.data("name") + ""; command = "deleteVlanIpRange"; } $("#dialog_confirmation") .html(confirmMessage) .dialog('option', 'buttons', { "Confirm": function() { $(this).dialog("close"); $.ajax({ data: createURL("command="+command+"&id="+id+"&response=json"), dataType: "json", success: function(json) { var target = null; if (type == "zone") { target = $("#submenu_content_zones #zone_" + id); } else if (type == "pod") { target = $("#submenu_content_zones #pod_" + id); } else { target = $("#submenu_content_zones #publicip_range_" + id); } target.fadeOut("slow", function() { $(this).remove(); }); rightPanel.empty(); rightContent.empty(); $("#submenu_content_zones #action_delete").hide(); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); }); $("#submenu_content_zones #action_edit_zone").bind("click", function(event) { var id = $(this).data("id"); var dialogEditZone = $("#dialog_edit_zone"); dialogEditZone.find("#edit_zone_name").val($(this).data("name")); dialogEditZone.find("#edit_zone_dns1").val($(this).data("dns1")); dialogEditZone.find("#edit_zone_dns2").val($(this).data("dns2")); dialogEditZone.find("#edit_zone_internaldns1").val($(this).data("internaldns1")); dialogEditZone.find("#edit_zone_internaldns2").val($(this).data("internaldns2")); dialogEditZone.find("#edit_zone_guestcidraddress").val($(this).data("guestcidraddress")); var guestcidraddress = $(this).data("guestcidraddress"); // If the network type is vnet, don't show any vlan stuff. if (getNetworkType() != "vnet") { dialogEditZone.find("#edit_zone_startvlan").val(""); dialogEditZone.find("#edit_zone_endvlan").val(""); var vlan = $(this).data("vlan"); if(vlan != null) { if(vlan.indexOf("-")!==-1) { var startVlan = vlan.substring(0, vlan.indexOf("-")); var endVlan = vlan.substring((vlan.indexOf("-")+1)); dialogEditZone.find("#edit_zone_startvlan").val(startVlan); dialogEditZone.find("#edit_zone_endvlan").val(endVlan); } else { dialogEditZone.find("#edit_zone_startvlan").val(vlan); } } } dialogEditZone .dialog('option', 'buttons', { "Change": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#edit_zone_name"), thisDialog.find("#edit_zone_name_errormsg")); isValid &= validateIp("DNS 1", thisDialog.find("#edit_zone_dns1"), thisDialog.find("#edit_zone_dns1_errormsg"), false); //required isValid &= validateIp("DNS 2", thisDialog.find("#edit_zone_dns2"), thisDialog.find("#edit_zone_dns2_errormsg"), true); //optional isValid &= validateIp("Internal DNS 1", thisDialog.find("#edit_zone_internaldns1"), thisDialog.find("#edit_zone_internaldns1_errormsg"), false); //required isValid &= validateIp("Internal DNS 2", thisDialog.find("#edit_zone_internaldns2"), thisDialog.find("#edit_zone_internaldns2_errormsg"), true); //optional if (getNetworkType() != "vnet") { isValid &= validateString("Zone - Start VLAN Range", thisDialog.find("#edit_zone_startvlan"), thisDialog.find("#edit_zone_startvlan_errormsg"), false); //required isValid &= validateString("Zone - End VLAN Range", thisDialog.find("#edit_zone_endvlan"), thisDialog.find("#edit_zone_endvlan_errormsg"), true); //optional } isValid &= validateCIDR("Guest CIDR", thisDialog.find("#edit_zone_guestcidraddress"), thisDialog.find("#edit_zone_guestcidraddress_errormsg"), false); //required if (!isValid) return; var moreCriteria = []; var name = trim(thisDialog.find("#edit_zone_name").val()); moreCriteria.push("&name="+encodeURIComponent(name)); var dns1 = trim(thisDialog.find("#edit_zone_dns1").val()); moreCriteria.push("&dns1="+encodeURIComponent(dns1)); var dns2 = trim(thisDialog.find("#edit_zone_dns2").val()); if (dns2 != null & dns2.length > 0) moreCriteria.push("&dns2="+encodeURIComponent(dns2)); var internaldns1 = trim(thisDialog.find("#edit_zone_internaldns1").val()); moreCriteria.push("&internaldns1="+encodeURIComponent(internaldns1)); var internaldns2 = trim(thisDialog.find("#edit_zone_internaldns2").val()); if (internaldns2 != null & internaldns2.length > 0) moreCriteria.push("&internaldns2="+encodeURIComponent(internaldns2)); var vlan; if (getNetworkType() != "vnet") { var vlanStart = trim(thisDialog.find("#edit_zone_startvlan").val()); var vlanEnd = trim(thisDialog.find("#edit_zone_endvlan").val()); if (vlanEnd != null && vlanEnd.length > 0) vlan = vlanStart + "-" + vlanEnd; else vlan = vlanStart; moreCriteria.push("&vlan=" + encodeURIComponent(vlan)); } var guestcidraddress = trim(thisDialog.find("#edit_zone_guestcidraddress").val()); moreCriteria.push("&guestcidraddress="+encodeURIComponent(guestcidraddress)); thisDialog.dialog("close"); var template = $("#zone_"+id); var loadingImg = template.find(".adding_loading").find(".adding_text").text("Updating zone...."); var row_container = template.find("#row_container"); loadingImg.show(); row_container.hide(); $.ajax({ data: createURL("command=updateZone&id="+id+moreCriteria.join("")+"&response=json"), dataType: "json", success: function(json) { var obj = {"id": id, "name": name, "dns1": dns1, "dns2": dns2, "internaldns1": internaldns1, "internaldns2": internaldns2, "vlan": vlan, "guestcidraddress": guestcidraddress }; zoneObjectToRightPanel(obj); var zoneName = $("#zone_"+id).find("#zone_name").text(name); zoneName.data("id", id).data("name", sanitizeXSS(name)).data("dns1", dns1).data("internaldns1", internaldns1).data("guestcidraddress", guestcidraddress); if (dns2 != "") zoneName.data("dns2", dns2); if (internaldns2 != "") zoneName.data("internaldns2", internaldns2); if (vlan != "") zoneName.data("vlan", vlan); loadingImg.hide(); row_container.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); loadingImg.hide(); row_container.show(); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); }); $("#submenu_content_zones #action_add_pod").bind("click", function(event) { var id = $(this).data("id"); $("#dialog_add_pod").find("#add_pod_zone_name").text($(this).data("name")); $("#dialog_add_pod #add_pod_name, #dialog_add_pod #add_pod_cidr, #dialog_add_pod #add_pod_startip, #dialog_add_pod #add_pod_endip, #add_pod_gateway").val(""); $("#dialog_add_pod") .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#add_pod_name"), thisDialog.find("#add_pod_name_errormsg")); isValid &= validateCIDR("CIDR", thisDialog.find("#add_pod_cidr"), thisDialog.find("#add_pod_cidr_errormsg")); isValid &= validateIp("Start IP Range", thisDialog.find("#add_pod_startip"), thisDialog.find("#add_pod_startip_errormsg")); //required isValid &= validateIp("End IP Range", thisDialog.find("#add_pod_endip"), thisDialog.find("#add_pod_endip_errormsg"), true); //optional isValid &= validateIp("Gateway", thisDialog.find("#add_pod_gateway"), thisDialog.find("#add_pod_gateway_errormsg")); //required when creating if (!isValid) return; var name = trim(thisDialog.find("#add_pod_name").val()); var cidr = trim(thisDialog.find("#add_pod_cidr").val()); var startip = trim(thisDialog.find("#add_pod_startip").val()); var endip = trim(thisDialog.find("#add_pod_endip").val()); //optional var gateway = trim(thisDialog.find("#add_pod_gateway").val()); var array1 = []; array1.push("&zoneId="+id); array1.push("&name="+encodeURIComponent(name)); array1.push("&cidr="+encodeURIComponent(cidr)); array1.push("&startIp="+encodeURIComponent(startip)); if (endip != null && endip.length > 0) array1.push("&endIp="+encodeURIComponent(endip)); array1.push("&gateway="+encodeURIComponent(gateway)); thisDialog.dialog("close"); var template = $("#pod_template").clone(true); var loadingImg = template.find(".adding_loading"); var row_container = template.find("#row_container"); $("#zone_"+id+" #zone_content").show(); $("#zone_" + id + " #pods_container").prepend(template.show()); $("#zone_" + id + " #zone_expand").removeClass().addClass("zonetree_openarrows"); loadingImg.show(); row_container.hide(); template.fadeIn("slow"); $.ajax({ data: createURL("command=createPod&response=json"+array1.join("")), dataType: "json", success: function(json) { var pod = json.createpodresponse; template.attr("id", "pod_"+pod.id); podJSONToTemplate(pod, template); loadingImg.hide(); row_container.show(); if (forceLogout) { $("#dialog_confirmation") .html("You have successfully added your first Zone and Pod. After clicking 'OK', this UI will automatically refresh to give you access to the rest of cloud features.
") .dialog('option', 'buttons', { "OK": function() { $(this).dialog("close"); window.location.reload(); } }).dialog("open"); } }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function() { $(this).remove(); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); }); $("#submenu_content_zones #action_add_directip_vlan").bind("click", function(event) { var thisLink = $(this); var podid = thisLink.data("id"); var podname = thisLink.data("name"); var zoneid = thisLink.data("zoneid"); $("#dialog_add_vlan_for_pod").find("#pod_name_label").text(podname); $("#dialog_add_vlan_for_pod") .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateIp("Gateway", thisDialog.find("#gateway"), thisDialog.find("#gateway_errormsg")); isValid &= validateIp("Netmask", thisDialog.find("#netmask"), thisDialog.find("#netmask_errormsg")); isValid &= validateIp("Start IP Range", thisDialog.find("#startip"), thisDialog.find("#startip_errormsg")); //required isValid &= validateIp("End IP Range", thisDialog.find("#endip"), thisDialog.find("#endip_errormsg"), true); //optional if (!isValid) return; var gateway = trim(thisDialog.find("#gateway").val()); var netmask = trim(thisDialog.find("#netmask").val()); var startip = trim(thisDialog.find("#startip").val()); var endip = trim(thisDialog.find("#endip").val()); var array1 = []; array1.push("&vlan=untagged"); array1.push("&zoneid=" + zoneid); array1.push("&podId=" + podid); array1.push("&forVirtualNetwork=false"); //direct VLAN array1.push("&gateway="+encodeURIComponent(gateway)); array1.push("&netmask="+encodeURIComponent(netmask)); array1.push("&startip="+encodeURIComponent(startip)); if(endip != null && endip.length > 0) array1.push("&endip="+encodeURIComponent(endip)); thisDialog.dialog("close"); var template = $("#vlan_ip_range_template").clone(true); //direct untagged VLAN is under pod(2nd level). So, make direct untagged VLAN 3rd level. template.find("#row_container .zonetree_secondlevel").removeClass().addClass("zonetree_thirdlevel"); var loadingImg = template.find(".adding_loading"); loadingImg.find(".adding_text").text("Adding a direct IP range...."); var row_container = template.find("#row_container"); $("#zone_" + zoneid).find("#pod_" + podid).find("#directip_ranges_container").prepend(template.show()); loadingImg.show(); row_container.hide(); template.fadeIn("slow"); $.ajax({ data: createURL("command=createVlanIpRange&response=json" + array1.join("")), dataType: "json", success: function(json) { var vlan = json.createvlaniprangeresponse; template.attr("id", "publicip_range_"+vlan.id); vlanIpRangeJSONToTemplate(vlan, template); loadingImg.hide(); row_container.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function() { $(this).remove(); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); $("#submenu_content_zones #action_edit_pod").bind("click", function(event) { var id = $(this).data("id"); var zoneid = $(this).data("zoneid"); var dialogEditPod = $("#dialog_edit_pod"); var oldName = $(this).data("name"); dialogEditPod.find("#edit_pod_name").val(oldName); var oldCidr = $(this).data("cidr"); dialogEditPod.find("#edit_pod_cidr").val(oldCidr); var oldStartip = $(this).data("startip"); dialogEditPod.find("#edit_pod_startip").val(oldStartip); var oldEndip = $(this).data("endip"); dialogEditPod.find("#edit_pod_endip").val(oldEndip); var oldGateway = $(this).data("gateway"); dialogEditPod.find("#edit_pod_gateway").val(oldGateway); dialogEditPod .dialog('option', 'buttons', { "Change": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#edit_pod_name"), thisDialog.find("#edit_pod_name_errormsg")); isValid &= validateCIDR("CIDR", thisDialog.find("#edit_pod_cidr"), thisDialog.find("#edit_pod_cidr_errormsg")); isValid &= validateIp("Start IP Range", thisDialog.find("#edit_pod_startip"), dialogEditPod.find("#edit_pod_startip_errormsg")); //required isValid &= validateIp("End IP Range", dialogEditPod.find("#edit_pod_endip"), thisDialog.find("#edit_pod_endip_errormsg"), true); //optional isValid &= validateIp("Gateway", thisDialog.find("#edit_pod_gateway"), thisDialog.find("#edit_pod_gateway_errormsg"), true); //optional when editing if (!isValid) return; var newName = trim(thisDialog.find("#edit_pod_name").val()); var newCidr = trim(thisDialog.find("#edit_pod_cidr").val()); var newStartip = trim(thisDialog.find("#edit_pod_startip").val()); var newEndip = trim(thisDialog.find("#edit_pod_endip").val()); var newIpRange = getIpRange(newStartip, newEndip); var newGateway = trim(thisDialog.find("#edit_pod_gateway").val()); var array1 = []; array1.push("&id="+id); if(newName != oldName) array1.push("&name="+encodeURIComponent(newName)); if(newCidr != oldCidr) array1.push("&cidr="+encodeURIComponent(newCidr)); if(newStartip != oldStartip) array1.push("&startIp="+encodeURIComponent(newStartip)); if(newEndip != oldEndip && newEndip != null && newEndip.length > 0) array1.push("&endIp="+encodeURIComponent(newEndip)); if(newGateway != oldGateway && newGateway != null && newGateway.length > 0) array1.push("&gateway="+encodeURIComponent(newGateway)); $(this).dialog("close"); var template = $("#pod_"+id); var loadingImg = template.find(".adding_loading"); loadingImg.find(".adding_text").text("Updating a pod...."); var row_container = template.find("#row_container"); loadingImg.show(); row_container.hide(); template.fadeIn("slow"); $.ajax({ data: createURL("command=updatePod&response=json"+array1.join("")), dataType: "json", success: function(json) { var newIpRange = getIpRange(newStartip, newEndip); var obj = {"id": id, "zoneid": zoneid, "name": newName, "cidr": newCidr, "startip": newStartip, "endip": newEndip, "ipRange": newIpRange, "gateway": newGateway}; podObjectToRightPanel(obj); var podName = $("#pod_"+id).find("#pod_name").text(newName); podName.data("id", id).data("name", sanitizeXSS(newName)).data("cidr", newCidr).data("startip", newStartip).data("endip", newEndip).data("ipRange", newIpRange).data("gateway", newGateway); loadingImg.hide(); row_container.show(); }, error: function(XMLHttpResponse) { loadingImg.hide(); row_container.show(); handleError(XMLHttpResponse); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); }); $("#submenu_content_zones #action_add_publicip_vlan").bind("click", function(event) { var id = $(this).data("id"); // reset dialog dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container, #add_publicip_vlan_domain_container, #add_publicip_vlan_account_container").hide(); dialogAddVlanForZone.find("#add_publicip_vlan_tagged, #add_publicip_vlan_vlan, #add_publicip_vlan_gateway, #add_publicip_vlan_netmask, #add_publicip_vlan_startip, #add_publicip_vlan_endip, #add_publicip_vlan_account").val(""); dialogAddVlanForZone.find("#add_publicip_vlan_zone_name").text($(this).data("name")); if (getNetworkType() == 'vnet') { $("#add_publicip_vlan_type_container").hide(); } else { dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_type").change(); $("#add_publicip_vlan_type_container").show(); var podSelect = dialogAddVlanForZone.find("#add_publicip_vlan_pod").empty(); $.ajax({ data: createURL("command=listPods&zoneId="+id+"&response=json"+maxPageSize), dataType: "json", async: false, success: function(json) { var pods = json.listpodsresponse.pod; if (pods != null && pods.length > 0) { for (var i = 0; i < pods.length; i++) { podSelect.append(""); } } else { podSelect.append(""); } } }); var domainSelect = dialogAddVlanForZone.find("#add_publicip_vlan_domain").empty(); $.ajax({ data: createURL("command=listDomains&response=json"+maxPageSize), dataType: "json", async: false, success: function(json) { var domains = json.listdomainsresponse.domain; if (domains != null && domains.length > 0) { for (var i = 0; i < domains.length; i++) { domainSelect.append(""); } } } }); } dialogAddVlanForZone .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; var isTagged = false; var isDirect = false; if (getNetworkType() == "vlan") { isDirect = thisDialog.find("#add_publicip_vlan_type").val() == "false"; isTagged = thisDialog.find("#add_publicip_vlan_tagged").val() == "tagged"; } if (isDirect && isTagged) isValid &= validateString("Account", thisDialog.find("#add_publicip_vlan_account"), thisDialog.find("#add_publicip_vlan_account_errormsg"), false); //required else isValid &= validateString("Account", thisDialog.find("#add_publicip_vlan_account"), thisDialog.find("#add_publicip_vlan_account_errormsg"), true); //optional if (isTagged) { isValid &= validateNumber("VLAN", thisDialog.find("#add_publicip_vlan_vlan"), thisDialog.find("#add_publicip_vlan_vlan_errormsg"), 2, 4095); } isValid &= validateIp("Gateway", thisDialog.find("#add_publicip_vlan_gateway"), thisDialog.find("#add_publicip_vlan_gateway_errormsg")); isValid &= validateIp("Netmask", thisDialog.find("#add_publicip_vlan_netmask"), thisDialog.find("#add_publicip_vlan_netmask_errormsg")); isValid &= validateIp("Start IP Range", thisDialog.find("#add_publicip_vlan_startip"), thisDialog.find("#add_publicip_vlan_startip_errormsg")); //required isValid &= validateIp("End IP Range", thisDialog.find("#add_publicip_vlan_endip"), thisDialog.find("#add_publicip_vlan_endip_errormsg"), true); //optional if (!isValid) return; var vlan = trim(thisDialog.find("#add_publicip_vlan_vlan").val()); if (isTagged) { vlan = "&vlan="+vlan; } else { vlan = "&vlan=untagged"; } var directParams = ""; if (isDirect && isTagged) { directParams = "&domainId="+trim(thisDialog.find("#add_publicip_vlan_domain").val())+"&account="+trim(thisDialog.find("#add_publicip_vlan_account").val()); } else if (isDirect && !isTagged) { directParams = "&podId="+trim(thisDialog.find("#add_publicip_vlan_pod").val()); } else if (!isDirect && (dialogAddVlanForZone.find("#add_publicip_vlan_scope").val()=="account-specific")) { //public VLAN, account-specific directParams = "&domainId="+trim(thisDialog.find("#add_publicip_vlan_domain").val())+"&account="+trim(thisDialog.find("#add_publicip_vlan_account").val()); } var type = "true"; if (getNetworkType() == "vlan") type = trim(thisDialog.find("#add_publicip_vlan_type").val()); var gateway = trim(thisDialog.find("#add_publicip_vlan_gateway").val()); var netmask = trim(thisDialog.find("#add_publicip_vlan_netmask").val()); var startip = trim(thisDialog.find("#add_publicip_vlan_startip").val()); var endip = trim(thisDialog.find("#add_publicip_vlan_endip").val()); thisDialog.dialog("close"); var template = $("#vlan_ip_range_template").clone(true); var loadingImg = template.find(".adding_loading"); var row_container = template.find("#row_container"); $("#zone_" + id + " #zone_content").show(); $("#zone_" + id + " #publicip_ranges_container").prepend(template.show()); $("#zone_" + id + " #zone_expand").removeClass().addClass("zonetree_openarrows"); loadingImg.show(); row_container.hide(); template.fadeIn("slow"); $.ajax({ data: createURL("command=createVlanIpRange&forVirtualNetwork="+type+"&zoneId="+id+vlan+directParams+"&gateway="+encodeURIComponent(gateway)+"&netmask="+encodeURIComponent(netmask)+"&startip="+encodeURIComponent(startip)+"&endip="+encodeURIComponent(endip)+"&response=json"), dataType: "json", success: function(json) { var vlan = json.createvlaniprangeresponse; template.attr("id", "publicip_range_"+vlan.id); vlanIpRangeJSONToTemplate(vlan, template); loadingImg.hide(); row_container.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function() { $(this).remove(); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); }); $("#zone_template").bind("click", function(event) { var template = $(this); var target = $(event.target); var action = target.attr("id"); var id = template.data("id"); var name = template.data("name"); switch (action) { case "zone_expand" : if (target.hasClass("zonetree_closedarrows")) { $("#zone_"+id+" #zone_content").show(); target.removeClass().addClass("zonetree_openarrows"); } else { $("#zone_"+id+" #zone_content").hide(); target.removeClass().addClass("zonetree_closedarrows"); } break; case "zone_name" : $("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel"); $("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel"); template.find(".zonetree_firstlevel").removeClass().addClass("zonetree_firstlevel_selected"); var obj = {"id": target.data("id"), "name": target.data("name"), "dns1": target.data("dns1"), "dns2": target.data("dns2"), "internaldns1": target.data("internaldns1"), "internaldns2": target.data("internaldns2"), "vlan": target.data("vlan"), "guestcidraddress": target.data("guestcidraddress")}; zoneObjectToRightPanel(obj); break; case "pod_name" : $("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel"); $("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel"); target.parent(".zonetree_secondlevel").removeClass().addClass("zonetree_secondlevel_selected"); var obj = {"id": target.data("id"), "zoneid": target.data("zoneid"), "name": target.data("name"), "cidr": target.data("cidr"), "startip": target.data("startip"), "endip": target.data("endip"), "ipRange": target.data("ipRange"), "gateway": target.data("gateway")}; podObjectToRightPanel(obj); break; case "vlan_ip_range_name" : $("#submenu_content_zones .zonetree_firstlevel_selected").removeClass().addClass("zonetree_firstlevel"); $("#submenu_content_zones .zonetree_secondlevel_selected").removeClass().addClass("zonetree_secondlevel"); target.parent(".zonetree_secondlevel").removeClass().addClass("zonetree_secondlevel_selected"); var title = "Public VLAN IP Range"; var isDirect = target.data("forVirtualNetwork") == "false"; var isTagged = target.data("vlan") != "untagged"; if (isDirect) { title = "Direct VLAN IP Range"; } var rightPanelHtmlForDirect = ""; if (isDirect && isTagged) { rightPanelHtmlForDirect = "Domain ID: "+target.data("domainId")+"
Account: "+target.data("account")+"
" } else if (isDirect && !isTagged) { rightPanelHtmlForDirect = "Pod: "+target.data("podname")+"
"; } rightPanel.html(title); var rightContentHtml = "VLAN ID: "+target.data("vlan")+"
" + rightPanelHtmlForDirect + "Gateway: "+target.data("gateway")+"
" + "Netmask: "+target.data("netmask")+"
" + "IP Range: "+target.data("name")+"
"; if(target.data("domain")!=null) rightContentHtml += "Domain: "+target.data("domain")+"
"; if(target.data("account")!=null) rightContentHtml += "Account: "+target.data("account")+"
"; rightContent.data("id", target.data("id")).html(rightContentHtml); $("#submenu_content_zones").find("#action_edit_zone, #action_add_pod, #action_edit_pod, #action_add_publicip_vlan, #action_add_directip_vlan").hide(); $("#submenu_content_zones #action_delete").data("id", target.data("id")).data("name", target.data("name")).data("type", "publicip_range").show(); break; default: break; } return false; }); function vlanIpRangeJSONToTemplate(json, template) { template.data("id", json.id); var vlanName = json.id; var vlanDisplayName = vlanName; if (json.description != undefined) { if (json.description.indexOf("-") == -1) { vlanName = json.description; vlanDisplayName = vlanName; } else { var ranges = json.description.split("-"); vlanName = ranges[0] + " -" + ranges[1]; vlanDisplayName = ranges[0] + " - " + ranges[1]; } } var isDirect = json.forvirtualnetwork == "false"; var isTagged = json.vlan != "untagged"; if (isDirect) { template.find(".zonetree_ipicon").removeClass().addClass("zonetree_directipicon"); template.find("#vlan_ip_range_type").text("Direct IP Range:"); } else { template.find("#vlan_ip_range_type").text("Public IP Range:"); } template.find("#vlan_ip_range_name") .html(vlanName) .data("id", json.id) .data("name", vlanDisplayName) .data("vlan", json.vlan) .data("forVirtualNetwork", json.forvirtualnetwork) .data("gateway", json.gateway) .data("netmask", json.netmask); template.find("#vlan_ip_range_name").data("domainId", json.domainid); //json.domainid might be null. template.find("#vlan_ip_range_name").data("domain", json.domain); //json.domain might be null. template.find("#vlan_ip_range_name").data("account", json.account); //json.account might be null. template.find("#vlan_ip_range_name").data("podname", json.podname); //json.podname might be null. } function getIpRange(startip, endip) { var ipRange = ""; if (startip != null && startip.length > 0) { ipRange = startip; } if (endip != null && endip.length > 0) { ipRange = ipRange + "-" + endip; } return ipRange; } function podJSONToTemplate(json, template) { var ipRange = getIpRange(json.startip, json.endip); template.data("id", json.id).data("name", json.name); var podName = template.find("#pod_name").text(json.name); podName.data("id", json.id); podName.data("zoneid", json.zoneid); podName.data("name", json.name); podName.data("cidr", json.cidr); podName.data("startip", json.startip); podName.data("endip", json.endip); podName.data("ipRange", ipRange); podName.data("gateway", json.gateway); $.ajax({ data: createURL("command=listVlanIpRanges&zoneid="+json.zoneid+"&podid="+json.id+"&response=json"), dataType: "json", success: function(json) { var ranges = json.listvlaniprangesresponse.vlaniprange; var grid = template.find("#directip_ranges_container").empty(); if (ranges != null && ranges.length > 0) { for (var i = 0; i < ranges.length; i++) { if(ranges[i].forvirtualnetwork == "false" && ranges[i].vlan == "untagged") { //direct untagged VLAN should be under pod, instead of under zone. var rangeTemplate = $("#vlan_ip_range_template").clone(true).attr("id", "publicip_range_"+ranges[i].id); vlanIpRangeJSONToTemplate(ranges[i], rangeTemplate); grid.append(rangeTemplate.show()); //direct untagged VLAN is under pod(2nd level). So, make direct untagged VLAN 3rd level. rangeTemplate.find("#row_container .zonetree_secondlevel").removeClass().addClass("zonetree_thirdlevel"); } } } } }); } function zoneJSONToTemplate(json, template) { var zoneid = json.id; template.data("id", zoneid).data("name", sanitizeXSS(json.name)); template.find("#zone_name") .text(json.name) .data("id", zoneid) .data("name", sanitizeXSS(json.name)) .data("dns1", json.dns1) .data("internaldns1", json.internaldns1) .data("guestcidraddress", json.guestcidraddress); if (json.dns2 != undefined) { template.find("#zone_name").data("dns2", json.dns2); } if (json.internaldns2 != undefined) { template.find("#zone_name").data("internaldns2", json.internaldns2); } if (json.vlan != undefined) { template.find("#zone_name").data("vlan", json.vlan); } $.ajax({ data: createURL("command=listPods&zoneid="+zoneid+"&response=json"), dataType: "json", success: function(json) { var pods = json.listpodsresponse.pod; var grid = template.find("#pods_container").empty(); if (pods != null && pods.length > 0) { for (var i = 0; i < pods.length; i++) { var podTemplate = $("#pod_template").clone(true).attr("id", "pod_"+pods[i].id); podJSONToTemplate(pods[i], podTemplate); grid.append(podTemplate.show()); forceLogout = false; } } } }); $.ajax({ data: createURL("command=listVlanIpRanges&zoneId="+zoneid+"&response=json"), dataType: "json", success: function(json) { var ranges = json.listvlaniprangesresponse.vlaniprange; var grid = template.find("#publicip_ranges_container").empty(); if (ranges != null && ranges.length > 0) { for (var i = 0; i < ranges.length; i++) { if(ranges[i].forvirtualnetwork == "false" && ranges[i].vlan == "untagged") //direct untagged VLAN should be under pod, instead of under zone. continue; var rangeTemplate = $("#vlan_ip_range_template").clone(true).attr("id", "publicip_range_"+ranges[i].id); vlanIpRangeJSONToTemplate(ranges[i], rangeTemplate); grid.append(rangeTemplate.show()); } } } }); } // If the network type is vnet, don't show any vlan stuff. if (getNetworkType() == "vnet") { $("#action_add_publicip_vlan").removeClass().addClass("zonedetails_addpublicipbutton"); $("#dialog_add_vlan_for_zone").attr("title", "Add Public IP Range"); $("#dialog_edit_zone #edit_zone_container, #dialog_add_zone #add_zone_container").hide(); } activateDialog($("#dialog_add_zone").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); activateDialog($("#dialog_edit_zone").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); activateDialog($("#dialog_add_pod").dialog({ autoOpen: false, modal: true, width:320, zIndex: 2000 })); activateDialog($("#dialog_edit_pod").dialog({ autoOpen: false, width: 320, modal: true, zIndex: 2000 })); activateDialog($("#dialog_add_vlan_for_zone").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); activateDialog($("#dialog_add_vlan_for_pod").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); //direct VLAN shows only "tagged" option while public VLAN shows both "tagged" and "untagged" option. var dialogAddVlanForZone = $("#dialog_add_vlan_for_zone"); dialogAddVlanForZone.find("#add_publicip_vlan_type").change(function(event) { var addPublicipVlanTagged = dialogAddVlanForZone.find("#add_publicip_vlan_tagged").empty(); if ($(this).val() == "false") { //direct VLAN (only tagged option) dialogAddVlanForZone.find("#add_publicip_vlan_scope_container").hide(); addPublicipVlanTagged.append(''); dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_account_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } else { //public VLAN dialogAddVlanForZone.find("#add_publicip_vlan_scope_container").show(); // default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container". dialogAddVlanForZone.find("#add_publicip_vlan_scope").change(); addPublicipVlanTagged.append('').append(''); if (dialogAddVlanForZone.find("#add_publicip_vlan_tagged") == "tagged") { dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } else { dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").hide(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } } return false; }); if (getNetworkType() != "vnet") { dialogAddVlanForZone.find("#add_publicip_vlan_tagged").change(function(event) { if (dialogAddVlanForZone.find("#add_publicip_vlan_type").val() == "false") { //direct VLAN (only tagged option) dialogAddVlanForZone.find("#add_publicip_vlan_scope_container").hide(); dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_account_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } else { //public VLAN dialogAddVlanForZone.find("#add_publicip_vlan_scope_container").show(); // default value of "#add_publicip_vlan_scope" is "zone-wide". Calling change() will hide "#add_publicip_vlan_domain_container", "#add_publicip_vlan_account_container". dialogAddVlanForZone.find("#add_publicip_vlan_scope").change(); if ($(this).val() == "tagged") { dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } else { dialogAddVlanForZone.find("#add_publicip_vlan_vlan_container").hide(); dialogAddVlanForZone.find("#add_publicip_vlan_pod_container").hide(); } } return false; }); } else { dialogAddVlanForZone.find("#add_publicip_vlan_container").hide(); } dialogAddVlanForZone.find("#add_publicip_vlan_scope").change(function(event) { if($(this).val() == "zone-wide") { dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").hide(); dialogAddVlanForZone.find("#add_publicip_vlan_account_container").hide(); } else { // account-specific dialogAddVlanForZone.find("#add_publicip_vlan_domain_container").show(); dialogAddVlanForZone.find("#add_publicip_vlan_account_container").show(); } return false; }); $("#action_add_zone").bind("click", function(event) { var thisDialog = $(this); thisDialog.find("#add_zone_name, #add_zone_dns1, #add_zone_dns2, #add_zone_internaldns1, #add_zone_internaldns2, #add_zone_startvlan, #add_zone_endvlan, #add_zone_guestcidraddress").val(""); $("#dialog_add_zone") .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#add_zone_name"), thisDialog.find("#add_zone_name_errormsg")); isValid &= validateIp("DNS 1", thisDialog.find("#add_zone_dns1"), thisDialog.find("#add_zone_dns1_errormsg"), false); //required isValid &= validateIp("DNS 2", thisDialog.find("#add_zone_dns2"), thisDialog.find("#add_zone_dns2_errormsg"), true); //optional isValid &= validateIp("Internal DNS 1", thisDialog.find("#add_zone_internaldns1"), thisDialog.find("#add_zone_internaldns1_errormsg"), false); //required isValid &= validateIp("Internal DNS 2", thisDialog.find("#add_zone_internaldns2"), thisDialog.find("#add_zone_internaldns2_errormsg"), true); //optional if (getNetworkType() != "vnet") { isValid &= validateString("Zone - Start VLAN Range", thisDialog.find("#add_zone_startvlan"), thisDialog.find("#add_zone_startvlan_errormsg"), false); //required isValid &= validateString("Zone - End VLAN Range", thisDialog.find("#add_zone_endvlan"), thisDialog.find("#add_zone_endvlan_errormsg"), true); //optional } isValid &= validateCIDR("Guest CIDR", thisDialog.find("#add_zone_guestcidraddress"), thisDialog.find("#add_zone_guestcidraddress_errormsg"), false); //required if (!isValid) return; var moreCriteria = []; var name = trim(thisDialog.find("#add_zone_name").val()); moreCriteria.push("&name="+encodeURIComponent(name)); var dns1 = trim(thisDialog.find("#add_zone_dns1").val()); moreCriteria.push("&dns1="+encodeURIComponent(dns1)); var dns2 = trim(thisDialog.find("#add_zone_dns2").val()); if (dns2 != null && dns2.length > 0) moreCriteria.push("&dns2="+encodeURIComponent(dns2)); var internaldns1 = trim(thisDialog.find("#add_zone_internaldns1").val()); moreCriteria.push("&internaldns1="+encodeURIComponent(internaldns1)); var internaldns2 = trim(thisDialog.find("#add_zone_internaldns2").val()); if (internaldns2 != null && internaldns2.length > 0) moreCriteria.push("&internaldns2="+encodeURIComponent(internaldns2)); if (getNetworkType() != "vnet") { var vlanStart = trim(thisDialog.find("#add_zone_startvlan").val()); var vlanEnd = trim(thisDialog.find("#add_zone_endvlan").val()); if (vlanEnd != null && vlanEnd.length > 0) moreCriteria.push("&vlan=" + encodeURIComponent(vlanStart + "-" + vlanEnd)); else moreCriteria.push("&vlan=" + encodeURIComponent(vlanStart)); } var guestcidraddress = trim(thisDialog.find("#add_zone_guestcidraddress").val()); moreCriteria.push("&guestcidraddress="+encodeURIComponent(guestcidraddress)); thisDialog.dialog("close"); var template = $("#zone_template").clone(true); var loadingImg = template.find(".adding_loading"); var row_container = template.find("#row_container"); $("#submenu_content_zones #zones_container").prepend(template.show()); loadingImg.show(); row_container.hide(); template.fadeIn("slow"); $.ajax({ data: createURL("command=createZone"+moreCriteria.join("")+"&response=json"), dataType: "json", success: function(json) { var zone = json.createzoneresponse; template.attr("id", "zone_"+zone.id); zoneJSONToTemplate(zone, template); loadingImg.hide(); row_container.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function() { thisDialog.remove(); }); } }); }, "Cancel": function() { var thisDialog = $(this); thisDialog.dialog("close"); cleanErrMsg(thisDialog.find("#add_zone_name"), thisDialog.find("#add_zone_name_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_dns1"), thisDialog.find("#add_zone_dns1_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_dns2"), thisDialog.find("#add_zone_dns2_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_internaldns1"), thisDialog.find("#add_zone_internaldns1_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_internaldns2"), thisDialog.find("#add_zone_internaldns2_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_startvlan"), thisDialog.find("#add_zone_startvlan_errormsg")); cleanErrMsg(thisDialog.find("#add_zone_guestcidraddress"), thisDialog.find("#add_zone_guestcidraddress_errormsg")); } }).dialog("open"); }); $("#submenu_zones").bind("click", function(event) { event.preventDefault(); $(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off"); currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on"); currentSubMenu = $(this); var container = $("#submenu_content_zones").show(); $("#submenu_content_global, #submenu_content_service, #submenu_content_disk").hide(); clearRightPanel(); $.ajax({ data: createURL("command=listZones&available=true&response=json"+maxPageSize), dataType: "json", success: function(json) { var zones = json.listzonesresponse.zone; var grid = $("#submenu_content_zones #zones_container").empty(); if (zones != null && zones.length > 0) { for (var i = 0; i < zones.length; i++) { var template = $("#zone_template").clone(true).attr("id", "zone_"+zones[i].id); zoneJSONToTemplate(zones[i], template); grid.append(template.show()); } } } }); }); $("#service_template").bind("click", function(event) { var template = $(this); var link = $(event.target); var linkAction = link.attr("id"); var svcId = template.data("svcId"); var svcName = template.data("svcName"); var submenuContent = $("#submenu_content_service"); switch (linkAction) { case "service_action_edit" : var dialogEditService = $("#dialog_edit_service"); dialogEditService.find("#service_name").text(svcName); dialogEditService.find("#edit_service_name").val(svcName); dialogEditService.find("#edit_service_display").val(template.find("#service_display").text()); dialogEditService.find("#edit_service_offerha").val(toBooleanValue(template.find("#service_offerha").text())); dialogEditService .dialog('option', 'buttons', { "Confirm": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#edit_service_name"), thisDialog.find("#edit_service_name_errormsg")); isValid &= validateString("Display Text", thisDialog.find("#edit_service_display"), thisDialog.find("#edit_service_display_errormsg")); if (!isValid) return; var moreCriteria = []; var name = trim(thisDialog.find("#edit_service_name").val()); moreCriteria.push("&name="+encodeURIComponent(name)); var displaytext = trim(thisDialog.find("#edit_service_display").val()); moreCriteria.push("&displayText="+encodeURIComponent(displaytext)); var offerha = trim(thisDialog.find("#edit_service_offerha").val()); moreCriteria.push("&offerha="+offerha); thisDialog.dialog("close"); $.ajax({ data: createURL("command=updateServiceOffering&id="+svcId+moreCriteria.join("")+"&response=json"), dataType: "json", success: function(json) { template.find("#service_displaytext").text(displaytext); template.find("#service_name").text(name); template.find("#service_offerha").text(toBooleanText(offerha)); template.data("svcName", name); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); break; case "service_action_delete" : $("#dialog_confirmation") .html("Please confirm you want to remove the service offering: "+svcName+" from the management server.
") .dialog('option', 'buttons', { "Confirm": function() { var dialogBox = $(this); $.ajax({ data: createURL("command=deleteServiceOffering&id="+svcId+"&response=json"), dataType: "json", success: function(json) { dialogBox.dialog("close"); template.slideUp("slow", function() { $(this).remove(); changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); break; default : break; } return false; }); function serviceJSONToTemplate(json, template) { template.attr("id", "service_"+json.id); (index++ % 2 == 0)? template.addClass("smallrow_even"): template.addClass("smallrow_odd"); template.data("svcId", json.id).data("svcName", sanitizeXSS(json.name)); template.find("#service_id").text(json.id); template.find("#service_name").text(json.name); template.find("#service_displaytext").text(json.displaytext); template.find("#service_storagetype").text(json.storagetype); template.find("#service_cpu").text(json.cpunumber + " x " + convertHz(json.cpuspeed)); template.find("#service_memory").text(convertBytes(parseInt(json.memory)*1024*1024)); template.find("#service_offerha").text(toBooleanText(json.offerha)); template.find("#service_networktype").text(toNetworkType(json.usevirtualnetwork)); template.find("#service_tags").text(json.tags); setDateField(json.created, template.find("#service_created")); } $("#submenu_content_service .grid_container .grid_header .grid_genheader_cell").bind("click", function(event) { var headerColumn = $(this); var sortingIcon = headerColumn.find(".gridsorting_arrow"); if (sortingIcon.hasClass("up") == false) { //If it's not in ascending order, sort it ascending. $("#submenu_content_service .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first sortingIcon.addClass("up"); //add up arrow to this specific header column sortingOrder = "asc"; } else if (sortingIcon.hasClass("up") == true) { //If it's in ascending order, sort it descending. $("#submenu_content_service .grid_container .grid_header .grid_genheader_cell .gridsorting_arrow").removeClass("down up"); //remove arrow from all header columns first sortingIcon.addClass("down"); //add down arrow to this specific header column sortingOrder = "desc"; } switch(headerColumn[0].id) { case "id_header": sortBy = "id"; items.sort(sortArrayNumerically); break; case "name_header": sortBy = "name"; items.sort(sortArrayAlphabetically); break; case "displaytext_header": sortBy = "displaytext"; items.sort(sortArrayAlphabetically); break; case "storagetype_header": sortBy = "storagetype"; items.sort(sortArrayAlphabetically); break; case "cpu_header": //sortBy = "???"; //items.sort(sortArray???); break; case "memory_header": sortBy = "memory"; parseFunction = parseInt; items.sort(sortArrayNumericallyParse); break; case "offerha_header": sortBy = "offerha"; parseFunction = toBooleanText; items.sort(sortArrayAlphabetically); break; case "networktype_header": sortBy = "usevirtualnetwork"; parseFunction = toNetworkType; items.sort(sortArrayAlphabeticallyParse); break; case "tags_header": sortBy = "tags"; items.sort(sortArrayAlphabetically); break; case "created_header": sortBy = "created"; items.sort(sortArrayByDate); break; } drawGrid(items, $("#submenu_content_service"), $("#service_template"), serviceJSONToTemplate); return false; }); activateDialog($("#dialog_add_service").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); activateDialog($("#dialog_edit_service").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); activateDialog($("#dialog_edit_disk").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); $("#service_add_service").bind("click", function(event) { var dialogAddService = $("#dialog_add_service"); dialogAddService.find("#add_service_name").val(""); dialogAddService.find("#add_service_display").val(""); dialogAddService.find("#add_service_cpucore").val(""); dialogAddService.find("#add_service_cpu").val(""); dialogAddService.find("#add_service_memory").val(""); dialogAddService.find("#add_service_offerha").val("false"); (g_hypervisorType == "kvm")? dialogAddService.find("#add_service_offerha_container").hide():dialogAddService.find("#add_service_offerha_container").show(); var submenuContent = $("#submenu_content_service"); dialogAddService .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#add_service_name"), thisDialog.find("#add_service_name_errormsg")); isValid &= validateString("Display Text", thisDialog.find("#add_service_display"), thisDialog.find("#add_service_display_errormsg")); isValid &= validateNumber("# of CPU Core", thisDialog.find("#add_service_cpucore"), thisDialog.find("#add_service_cpucore_errormsg"), 1, 1000); isValid &= validateNumber("CPU", thisDialog.find("#add_service_cpu"), thisDialog.find("#add_service_cpu_errormsg"), 100, 100000); isValid &= validateNumber("Memory", thisDialog.find("#add_service_memory"), thisDialog.find("#add_service_memory_errormsg"), 64, 1000000); isValid &= validateString("Tags", thisDialog.find("#add_service_tags"), thisDialog.find("#add_service_tags_errormsg"), true); //optional if (!isValid) return; var submenuContent = $("#submenu_content_service"); var template = $("#service_template").clone(true); var loadingImg = template.find(".adding_loading"); var rowContainer = template.find("#row_container"); loadingImg.find(".adding_text").text("Adding...."); loadingImg.show(); rowContainer.hide(); submenuContent.find("#grid_content").prepend(template.fadeIn("slow")); var array1 = []; var name = trim(thisDialog.find("#add_service_name").val()); array1.push("&name="+encodeURIComponent(name)); var display = trim(thisDialog.find("#add_service_display").val()); array1.push("&displayText="+encodeURIComponent(display)); var storagetype = trim(thisDialog.find("#add_service_storagetype").val()); array1.push("&storageType="+storagetype); var core = trim(thisDialog.find("#add_service_cpucore").val()); array1.push("&cpuNumber="+core); var cpu = trim(thisDialog.find("#add_service_cpu").val()); array1.push("&cpuSpeed="+cpu); var memory = trim(thisDialog.find("#add_service_memory").val()); array1.push("&memory="+memory); var offerha = thisDialog.find("#add_service_offerha").val(); array1.push("&offerha="+offerha); var networkType = thisDialog.find("#add_service_networktype").val(); var useVirtualNetwork = (networkType=="direct")? false:true; array1.push("&usevirtualnetwork="+useVirtualNetwork); var tags = trim(thisDialog.find("#add_service_tags").val()); if(tags != null && tags.length > 0) array1.push("&tags="+encodeURIComponent(tags)); thisDialog.dialog("close"); $.ajax({ data: createURL("command=createServiceOffering"+array1.join("")+"&response=json"), dataType: "json", success: function(json) { var offering = json.createserviceofferingresponse; serviceJSONToTemplate(offering, template); changeGridRowsTotal(submenuContent.find("#grid_rows_total"), 1); loadingImg.hide(); rowContainer.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function(){ $(this).remove(); } ); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); //add a new disk offering activateDialog($("#dialog_add_disk").dialog({ autoOpen: false, modal: true, zIndex: 2000 })); $("#disk_add_disk").bind("click", function(event) { var dialogAddDisk = $("#dialog_add_disk"); dialogAddDisk.find("#disk_name").val(""); dialogAddDisk.find("#disk_description").val(""); dialogAddDisk.find("#disk_disksize").val(""); var submenuContent = $("#submenu_content_disk"); dialogAddDisk .dialog('option', 'buttons', { "Add": function() { var thisDialog = $(this); // validate values var isValid = true; isValid &= validateString("Name", thisDialog.find("#add_disk_name"), thisDialog.find("#add_disk_name_errormsg")); isValid &= validateString("Description", thisDialog.find("#add_disk_description"), thisDialog.find("#add_disk_description_errormsg")); isValid &= validateNumber("Disk size", thisDialog.find("#add_disk_disksize"), thisDialog.find("#add_disk_disksize_errormsg"), 1, null); isValid &= validateString("Tags", thisDialog.find("#add_disk_tags"), thisDialog.find("#add_disk_tags_errormsg"), true); //optional if (!isValid) return; var submenuContent = $("#submenu_content_disk"); var template = $("#disk_template").clone(true); var loadingImg = template.find(".adding_loading"); var rowContainer = template.find("#row_container"); loadingImg.find(".adding_text").text("Adding...."); loadingImg.show(); rowContainer.hide(); submenuContent.find("#grid_content").prepend(template.fadeIn("slow")); var array1 = []; var name = trim(thisDialog.find("#add_disk_name").val()); array1.push("&name="+encodeURIComponent(name)); var description = trim(thisDialog.find("#add_disk_description").val()); array1.push("&displaytext="+encodeURIComponent(description)); var disksize = trim(thisDialog.find("#add_disk_disksize").val()); array1.push("&disksize="+disksize); var tags = trim(thisDialog.find("#add_disk_tags").val()); if(tags != null && tags.length > 0) array1.push("&tags="+encodeURIComponent(tags)); thisDialog.dialog("close"); $.ajax({ data: createURL("command=createDiskOffering&isMirrored=false&response=json" + array1.join("")), dataType: "json", success: function(json) { var offering = json.creatediskofferingresponse; diskJSONToTemplate(offering, template); changeGridRowsTotal(submenuContent.find("#grid_rows_total"), 1); loadingImg.hide(); rowContainer.show(); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); template.slideUp("slow", function(){ $(this).remove(); } ); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); return false; }); function listServiceOfferings() { var submenuContent = $("#submenu_content_service"); var commandString; var advanced = submenuContent.find("#search_button").data("advanced"); if (advanced != null && advanced) { var name = submenuContent.find("#advanced_search #adv_search_name").val(); var moreCriteria = []; if (name!=null && trim(name).length > 0) moreCriteria.push("&name="+encodeURIComponent(trim(name))); commandString = "command=listServiceOfferings&page="+currentPage+moreCriteria.join("")+"&response=json"; } else { var searchInput = submenuContent.find("#search_input").val(); if (searchInput != null && searchInput.length > 0) commandString = "command=listServiceOfferings&page="+currentPage +"&keyword="+searchInput+"&response=json"; else commandString = "command=listServiceOfferings&page="+currentPage+"&response=json"; } //listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate); listItems(submenuContent, commandString, "listserviceofferingsresponse", "serviceoffering", $("#service_template"), serviceJSONToTemplate); } submenuContentEventBinder($("#submenu_content_service"), listServiceOfferings); $("#submenu_service").bind("click", function(event) { event.preventDefault(); $(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off"); currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on"); currentSubMenu = $(this); var submenuContent = $("#submenu_content_service").show(); $("#submenu_content_zones, #submenu_content_global, #submenu_content_disk").hide(); currentPage = 1; listServiceOfferings(); }); //Disk Offering $("#disk_template").bind("click", function(event) { var template = $(this); var link = $(event.target); var linkAction = link.attr("id"); var diskId = template.data("diskId"); var diskName = template.data("diskName"); var submenuContent = $("#submenu_content_disk"); switch (linkAction) { case "disk_action_edit" : var dialogEditDisk = $("#dialog_edit_disk"); dialogEditDisk.find("#edit_disk_name").val(template.find("#disk_name").text()); dialogEditDisk.find("#edit_disk_display").val(template.find("#disk_description").text()); dialogEditDisk .dialog('option', 'buttons', { "Confirm": function() { // validate values var isValid = true; isValid &= validateString("Name", dialogEditDisk.find("#edit_disk_name"), dialogEditDisk.find("#edit_disk_name_errormsg")); isValid &= validateString("Display Text", dialogEditDisk.find("#edit_disk_display"), dialogEditDisk.find("#edit_disk_display_errormsg")); if (!isValid) return; var name = trim(dialogEditDisk.find("#edit_disk_name").val()); var display = trim(dialogEditDisk.find("#edit_disk_display").val()); var dialogBox = $(this); dialogBox.dialog("close"); $.ajax({ data: createURL("command=updateDiskOffering&name="+encodeURIComponent(name)+"&displayText="+encodeURIComponent(display)+"&id="+diskId+"&response=json"), dataType: "json", success: function(json) { template.find("#disk_description").text(display); template.find("#disk_name").text(name); template.data("diskName", name); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); break; case "disk_action_delete" : $("#dialog_confirmation") .html("Please confirm you want to remove the disk offering: "+diskName+" from the management server.
") .dialog('option', 'buttons', { "Confirm": function() { var dialogBox = $(this); $.ajax({ data: createURL("command=deleteDiskOffering&id="+diskId+"&response=json"), dataType: "json", success: function(json) { dialogBox.dialog("close"); template.slideUp("slow", function() { $(this).remove(); changeGridRowsTotal(submenuContent.find("#grid_rows_total"), -1); }); } }); }, "Cancel": function() { $(this).dialog("close"); } }).dialog("open"); break; default : break; } return false; }); function diskJSONToTemplate(json, template) { template.attr("id", "disk_"+json.id); if (index++ % 2 == 0) { template.addClass("smallrow_even"); } else { template.addClass("smallrow_odd"); } template.data("diskId", json.id).data("diskName", sanitizeXSS(json.name)); template.find("#disk_id").text(json.id); template.find("#disk_name").text(json.name); template.find("#disk_description").text(json.displaytext); template.find("#disk_disksize").text(convertBytes(json.disksize)); template.find("#disk_tags").text(json.tags); template.find("#disk_domain").text(json.domain); template.find("#disk_ismirrored").text(json.ismirrored); } function listDiskOfferings() { var submenuContent = $("#submenu_content_disk"); var commandString; var advanced = submenuContent.find("#search_button").data("advanced"); if (advanced != null && advanced) { var name = submenuContent.find("#advanced_search #adv_search_name").val(); var moreCriteria = []; if (name!=null && trim(name).length > 0) moreCriteria.push("&name="+encodeURIComponent(trim(name))); commandString = "command=listDiskOfferings&page="+currentPage+moreCriteria.join("")+"&response=json"; //moreCriteria.join("") } else { var searchInput = submenuContent.find("#search_input").val(); if (searchInput != null && searchInput.length > 0) commandString = "command=listDiskOfferings&page="+currentPage+"&keyword="+searchInput+"&response=json"; else commandString = "command=listDiskOfferings&page="+currentPage+"&response=json"; } //listItems(submenuContent, commandString, jsonResponse1, jsonResponse2, template, fnJSONToTemplate); listItems(submenuContent, commandString, "listdiskofferingsresponse", "diskoffering", $("#disk_template"), diskJSONToTemplate); } submenuContentEventBinder($("#submenu_content_disk"), listDiskOfferings); $("#submenu_disk").bind("click", function(event) { event.preventDefault(); $(this).toggleClass("submenu_links_on").toggleClass("submenu_links_off"); currentSubMenu.toggleClass("submenu_links_off").toggleClass("submenu_links_on"); currentSubMenu = $(this); var submenuContent = $("#submenu_content_disk").show(); $("#submenu_content_zones, #submenu_content_service, #submenu_content_global").hide(); currentPage=1; listDiskOfferings(); }); $("#submenu_global").click(); }