/** * 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 . * */ // ***** periodically check non-complete async job (begin)*************************************************************** var g_nonCompleteAsyncJob = {}; function periodicallyCheckNonCompleteAsyncJob() { var timerKey = "checkNonCompleteAsyncJob"; $("#dialog_action_complete").everyTime( 30000, timerKey, function() { for(var jobId in g_nonCompleteAsyncJob) { $.ajax({ data: createURL("command=queryAsyncJobResult&jobId="+jobId), dataType: "json", async: false, success: function(json) { var result = json.queryasyncjobresultresponse; if (result.jobstatus == 0) { return; //Job has not completed } else { var label2 = g_nonCompleteAsyncJob[jobId]; delete g_nonCompleteAsyncJob[jobId]; if(label2 != null) { var afterActionInfo; if (result.jobstatus == 1) { // Succeeded afterActionInfo = (label2 + " - " + g_dictionary["label.succeeded"]); } else if (result.jobstatus == 2) { // Failed afterActionInfo = label2 + " - " + g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); } $("#dialog_action_complete") .text(afterActionInfo) .dialog("open"); } } }, error: function(XMLHttpResponse) { var label2 = g_nonCompleteAsyncJob[jobId]; delete g_nonCompleteAsyncJob[jobId]; if(label2 != null) { var errorMsg = ""; if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) { errorMsg = parseXMLHttpResponse(XMLHttpResponse); } var afterActionInfo; if(errorMsg.length > 0) afterActionInfo = label2 + " - " + g_dictionary["label.failed"] + " - " + errorMsg; else afterActionInfo = label2 + " - " + g_dictionary["label.failed"]; $("#dialog_action_complete") .text(afterActionInfo) .dialog("open"); } } }); } }, 0 ); } //***** periodically check non-complete async job (end)***************************************************************** //***** actions for a tab in right panel (begin) ************************************************************************ function buildActionLinkForTab(label, actionMap, $actionMenu, $midmenuItem1, $thisTab) { var apiInfo = actionMap[label]; var $listItem = $("#action_list_item").clone(); $actionMenu.find("#action_list").append($listItem.show()); var label2; if(label in dictionary) label2 = dictionary[label]; else label2 = label; $listItem.find("#link").text(label2); $listItem.data("label", label); $listItem.data("apiInfo", apiInfo); var id = $midmenuItem1.data("jsonObj").id; $listItem.bind("click", function(event) { $actionMenu.hide(); var $actionLink = $(this); var dialogBeforeActionFn = apiInfo.dialogBeforeActionFn; if(dialogBeforeActionFn == null) { var apiCommand = "command="+apiInfo.api+"&id="+id; doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $thisTab); } else { dialogBeforeActionFn($actionLink, $thisTab, $midmenuItem1); } return false; }); } function doActionToTab(id, $actionLink, apiCommand, $midmenuItem1, $thisTab) { var label = $actionLink.data("label"); var label2; if(label in dictionary) label2 = dictionary[label]; else label2 = label; var apiInfo = $actionLink.data("apiInfo"); var inProcessText = apiInfo.inProcessText; var inProcessText2; if(inProcessText in dictionary) inProcessText2 = dictionary[inProcessText]; else inProcessText2 = inProcessText; var isAsyncJob = apiInfo.isAsyncJob; var asyncJobResponse = apiInfo.asyncJobResponse; var afterActionSeccessFn = apiInfo.afterActionSeccessFn; var $spinningWheel = $thisTab.find("#spinning_wheel"); $spinningWheel.find("#description").text(inProcessText2); $spinningWheel.show(); $midmenuItem1.find("#content").removeClass("selected").addClass("inaction"); $midmenuItem1.find("#spinning_wheel").addClass("midmenu_addingloader").show(); $midmenuItem1.find("#spinning_wheel").data("inProcessText", inProcessText2); $midmenuItem1.find("#info_icon").hide(); var $afterActionInfoContainer = $("#right_panel_content #after_action_info_container_on_top"); $afterActionInfoContainer.removeClass("errorbox").hide(); //Async job (begin) ***** if(isAsyncJob == true) { $.ajax({ data: createURL(apiCommand), dataType: "json", success: function(json) { var jobId = json[asyncJobResponse].jobid; var timerKey = "asyncJob_" + jobId; g_nonCompleteAsyncJob[jobId] = label2; $("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); delete g_nonCompleteAsyncJob[jobId]; $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded var afterActionInfo = afterActionSeccessFn(json, $midmenuItem1, id); //afterActionSeccessFn() will update $midmenuItem1.data("jsonObj") if($("#middle_menu").css("display") != "none") { if(afterActionInfo == null) handleMidMenuItemAfterDetailsTabAction($midmenuItem1, true, (label2 + " - " + g_dictionary["label.succeeded"])); else handleMidMenuItemAfterDetailsTabAction($midmenuItem1, true, afterActionInfo); } else { if(afterActionInfo == null) showAfterActionInfoOnTop(true, (label2 + " - " + g_dictionary["label.succeeded"])); else showAfterActionInfoOnTop(true, afterActionInfo); } } else if (result.jobstatus == 2) { // Failed var errorMsg = label2 + " - " + g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); if($("#middle_menu").css("display") != "none") handleMidMenuItemAfterDetailsTabAction($midmenuItem1, false, errorMsg); else showAfterActionInfoOnTop(false, errorMsg); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInDetailsTab(XMLHttpResponse, $thisTab, label2, $afterActionInfoContainer, $midmenuItem1); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDetailsTab(XMLHttpResponse, $thisTab, label2, $afterActionInfoContainer, $midmenuItem1); }); } }); } //Async job (end) ***** //Sync job (begin) ***** else { $.ajax({ data: createURL(apiCommand), dataType: "json", async: false, success: function(json) { $spinningWheel.hide(); var afterActionInfo = afterActionSeccessFn(json, $midmenuItem1, id); //afterActionSeccessFn() will update $midmenuItem1.data("jsonObj") if($("#middle_menu").css("display") != "none") { if(afterActionInfo == null) handleMidMenuItemAfterDetailsTabAction($midmenuItem1, true, (label2 + " - " + g_dictionary["label.succeeded"])); //handleMidMenuItemAfterDetailsTabAction() will used updated $midmenuItem1.data("jsonObj") else handleMidMenuItemAfterDetailsTabAction($midmenuItem1, true, afterActionInfo); } else { if(afterActionInfo == null) showAfterActionInfoOnTop(true, (label2 + " - " + g_dictionary["label.succeeded"])); else showAfterActionInfoOnTop(true, afterActionInfo); } }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInDetailsTab(XMLHttpResponse, $thisTab, label2, $afterActionInfoContainer, $midmenuItem1); }); } }); } //Sync job (end) ***** } function handleErrorInDetailsTab(XMLHttpResponse, $thisTab, label, $afterActionInfoContainer, $midmenuItem1) { var errorMsg = ""; if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) { errorMsg = parseXMLHttpResponse(XMLHttpResponse); } var afterActionInfo; if(errorMsg.length > 0) afterActionInfo = label + " - " + g_dictionary["label.failed"] + " - " + errorMsg; else afterActionInfo = label + " - " + g_dictionary["label.failed"]; $afterActionInfoContainer.find("#after_action_info").text(afterActionInfo); $afterActionInfoContainer.addClass("errorbox").show(); $thisTab.find("#spinning_wheel").hide(); handleMidMenuItemAfterDetailsTabAction($midmenuItem1, false, afterActionInfo); } function handleMidMenuItemAfterDetailsTabAction($midmenuItem1, isSuccessful, afterActionInfo) { $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); $midmenuItem1.data("afterActionInfo", afterActionInfo); var $infoIcon = $midmenuItem1.find("#info_icon").show(); if(isSuccessful) $infoIcon.removeClass("error"); else $infoIcon.addClass("error"); if($midmenuItem1.attr("id") == selected_midmenu_id) { if($("#midmenu_container").find("#multiple_selection_sub_container").length == 0) //single-selection middle menu $midmenuItem1.click(); else //multiple-selection middle menu clickItemInMultipleSelectionMidmenu($midmenuItem1); } } //***** actions for a tab in right panel (end) ************************************************************************** //***** actions for a subgrid item in right panel (begin) ************************************************************************ function buildActionLinkForSubgridItem(label, actionMap, $actionMenu, $subgridItem) { var apiInfo = actionMap[label]; var $listItem = $("#action_list_item").clone(); $actionMenu.find("#action_list").append($listItem.show()); $listItem.data("label", label); var label2; if(label in dictionary) label2 = dictionary[label]; else label2 = label; $listItem.find("#link").text(label2); $listItem.data("apiInfo", apiInfo); var id = $subgridItem.data("jsonObj").id; $listItem.bind("click", function(event) { $actionMenu.hide(); var $actionLink = $(this); var dialogBeforeActionFn = apiInfo.dialogBeforeActionFn; if(dialogBeforeActionFn == null) { var apiCommand = "command="+apiInfo.api+"&id="+id; doActionToSubgridItem(id, $actionLink, apiCommand, $subgridItem); } else { dialogBeforeActionFn($actionLink, $subgridItem); } return false; }); } function doActionToSubgridItem(id, $actionLink, apiCommand, $subgridItem) { var label = $actionLink.data("label"); var label2; if(label in dictionary) label2 = dictionary[label]; else label2 = label; var apiInfo = $actionLink.data("apiInfo"); var inProcessText = apiInfo.inProcessText; var inProcessText2; if(inProcessText in dictionary) inProcessText2 = dictionary[inProcessText]; else inProcessText2 = inProcessText; var isAsyncJob = apiInfo.isAsyncJob; var asyncJobResponse = apiInfo.asyncJobResponse; var afterActionSeccessFn = apiInfo.afterActionSeccessFn; var $spinningWheel = $subgridItem.find("#spinning_wheel"); $spinningWheel.find("#description").text(inProcessText2); $spinningWheel.show(); $subgridItem.find("#after_action_info_container").removeClass("error").addClass("success").hide(); //Async job (begin) ***** if(isAsyncJob == true) { $.ajax({ data: createURL(apiCommand), dataType: "json", success: function(json) { var jobId = json[asyncJobResponse].jobid; var timerKey = "asyncJob_" + jobId; g_nonCompleteAsyncJob[jobId] = label2; $("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); delete g_nonCompleteAsyncJob[jobId]; $spinningWheel.hide(); if (result.jobstatus == 1) { // Succeeded $subgridItem.find("#after_action_info_container").removeClass("error").addClass("success").show(); var afterActionInfo = afterActionSeccessFn(json, id, $subgridItem); if(afterActionInfo == null) $subgridItem.find("#after_action_info").text(label2 + " - " + g_dictionary["label.succeeded"]); else $subgridItem.find("#after_action_info").text(afterActionInfo); } else if (result.jobstatus == 2) { // Failed //var errorMsg = label2 + " - " + g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = label2 + " - " + g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); $subgridItem.find("#after_action_info").text(errorMsg); $subgridItem.find("#after_action_info_container").removeClass("success").addClass("error").show(); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleError(XMLHttpResponse, function() { handleErrorInSubgridItem(XMLHttpResponse, $subgridItem, label2); }); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInSubgridItem(XMLHttpResponse, $subgridItem, label2); }); } }); } //Async job (end) ***** //Sync job (begin) ***** else { $.ajax({ data: createURL(apiCommand), dataType: "json", async: false, success: function(json) { $spinningWheel.hide(); $subgridItem.find("#after_action_info_container").removeClass("error").addClass("success").show(); var afterActionInfo = afterActionSeccessFn(json, id, $subgridItem); if(afterActionInfo == null) $subgridItem.find("#after_action_info").text(label2 + " - " + g_dictionary["label.succeeded"]); else $subgridItem.find("#after_action_info").text(afterActionInfo); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse, function() { handleErrorInSubgridItem(XMLHttpResponse, $subgridItem, label2); }); } }); } //Sync job (end) ***** } function handleErrorInSubgridItem(XMLHttpResponse, $subgridItem, label) { $subgridItem.find("#spinning_wheel").hide(); var errorMsg = ""; if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) { errorMsg = parseXMLHttpResponse(XMLHttpResponse); } var afterActionInfo; if(errorMsg.length > 0) afterActionInfo = label + " - " + g_dictionary["label.failed"] + " - " + errorMsg; else afterActionInfo = label + " - " + g_dictionary["label.failed"]; $subgridItem.find("#after_action_info").text(afterActionInfo); $subgridItem.find("#after_action_info_container").removeClass("success").addClass("error").show(); } //***** actions for a subgrid item in right panel (end) ************************************************************************** //***** actions for middle menu (begin) ************************************************************************ var selectedItemsInMidMenu = {}; function doActionToMidMenu(id, apiInfo, apiCommand) { var label = apiInfo.label; var label2; if(label in dictionary) label2 = dictionary[label]; else label2 = label; var inProcessText = apiInfo.inProcessText; var inProcessText2; if(inProcessText in dictionary) inProcessText2 = dictionary[inProcessText]; else inProcessText2 = inProcessText; var isAsyncJob = apiInfo.isAsyncJob; var asyncJobResponse = apiInfo.asyncJobResponse; var afterActionSeccessFn = apiInfo.afterActionSeccessFn; var $midmenuItem1 = $("#midmenuItem_"+id); $midmenuItem1.find("#content").removeClass("selected").addClass("inaction"); //it's being un-selected now because it's in action now uncountTopButtonMapFn($midmenuItem1.data("jsonObj")); //uncount it from topButtonMap $midmenuItem1.find("#spinning_wheel").addClass("midmenu_addingloader").show(); $midmenuItem1.find("#spinning_wheel").data("inProcessText", inProcessText2); $midmenuItem1.find("#info_icon").hide(); var $detailsTab = $("#right_panel_content #tab_content_details"); var $spinningWheel = $detailsTab.find("#spinning_wheel"); $spinningWheel.find("#description").text(inProcessText2); $spinningWheel.show(); //Async job (begin) ***** if(isAsyncJob == true) { $.ajax({ data: createURL(apiCommand), dataType: "json", success: function(json) { var jobId = json[asyncJobResponse].jobid; var timerKey = "asyncJob_" + jobId; g_nonCompleteAsyncJob[jobId] = label2; $("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); delete g_nonCompleteAsyncJob[jobId]; $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); if (result.jobstatus == 1) { // Succeeded $midmenuItem1.find("#info_icon").removeClass("error").show(); var afterActionInfo = afterActionSeccessFn(json, $midmenuItem1, id); if(afterActionInfo == null) $midmenuItem1.data("afterActionInfo", (label2 + " - " + g_dictionary["label.succeeded"])); else $midmenuItem1.data("afterActionInfo", afterActionInfo); hideDetailsTabActionSpinningWheel(id, inProcessText2, $midmenuItem1); //this line will use $midmenuItem1.data("afterActionInfo") } else if (result.jobstatus == 2) { // Failed //var errorMsg = label2 + " - " + g_dictionary["label.failed"] + " - " + g_dictionary["label.error.code"] + " " + fromdb(result.jobresult.errorcode); var errorMsg = label2 + " - " + g_dictionary["label.failed"] + " - " + fromdb(result.jobresult.errortext); handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText2); } } }, error: function(XMLHttpResponse) { $("body").stopTime(timerKey); handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText2); } }); }, 0 ); }, error: function(XMLHttpResponse) { handleError(XMLHttpResponse); handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText2); } }); } //Async job (end) ***** //Sync job (begin) ***** else { $.ajax({ data: createURL(apiCommand), dataType: "json", async: false, success: function(json) { $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); $midmenuItem1.find("#info_icon").removeClass("error").show(); hideDetailsTabActionSpinningWheel(id, inProcessText2, $midmenuItem1); var afterActionInfo = afterActionSeccessFn(json, $midmenuItem1, id); if(afterActionInfo == null) $midmenuItem1.data("afterActionInfo", (label2 + " - " + g_dictionary["label.succeeded"])); else $midmenuItem1.data("afterActionInfo", afterActionInfo); }, error: function(XMLHttpResponse) { handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText2); } }); } //Sync job (end) ***** } function handleErrorInMidMenu(XMLHttpResponse, $midmenuItem1, id, inProcessText) { var errorMsg = ""; if(XMLHttpResponse.responseText != null & XMLHttpResponse.responseText.length > 0) { errorMsg = parseXMLHttpResponse(XMLHttpResponse); } handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText); } function handleErrorInMidMenu2(errorMsg, $midmenuItem1, id, inProcessText) { $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); $midmenuItem1.find("#info_icon").addClass("error").show(); $midmenuItem1.data("afterActionInfo", errorMsg); hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1); if(errorMsg.length > 0) $midmenuItem1.find("#second_row").text(fromdb(errorMsg)); else $midmenuItem1.find("#second_row").html(" "); } function hideDetailsTabActionSpinningWheel(id, inProcessText, $midmenuItem1) { var $detailsTab = $("#right_panel_content #tab_content_details"); var jsonObj = $detailsTab.data("jsonObj"); var $spinningWheel = $detailsTab.find("#spinning_wheel"); if((id == $detailsTab.find("#id").text()) && (inProcessText == $spinningWheel.find("#description").text())) { copyActionInfoFromMidMenuToRightPanel($midmenuItem1); } } function copyActionInfoFromMidMenuToRightPanel($midmenuItem1) { var $afterActionInfoContainer = $("#right_panel_content #after_action_info_container_on_top"); if($midmenuItem1.find("#info_icon").css("display") != "none") { $afterActionInfoContainer.find("#after_action_info").text($midmenuItem1.data("afterActionInfo")); if($midmenuItem1.find("#info_icon").hasClass("error")) $afterActionInfoContainer.addClass("errorbox"); else $afterActionInfoContainer.removeClass("errorbox"); $afterActionInfoContainer.show(); $midmenuItem1.find("#info_icon").hide(); //make info icon disappear after the middle menu item is clicked once } else { $afterActionInfoContainer.find("#after_action_info").text(""); $afterActionInfoContainer.hide(); } var $midMenuSpinningWheel = $midmenuItem1.find("#spinning_wheel"); var $detailsTabSpinningWheel = $("#right_panel_content #tab_content_details").find("#spinning_wheel"); if($midMenuSpinningWheel.css("display") != "none") { if($detailsTabSpinningWheel.css("display") == "none") { var inProcessText = $midMenuSpinningWheel.data("inProcessText"); $detailsTabSpinningWheel.find("#description").text(inProcessText); if(inProcessText in dictionary) $detailsTabSpinningWheel.find("#description").text(dictionary[inProcessText]); else $detailsTabSpinningWheel.find("#description").text(inProcessText); $detailsTabSpinningWheel.show(); } } else { $detailsTabSpinningWheel.hide(); } } //***** actions for middle menu (end) ************************************************************************** function createURL(url) { return url +"&response=json&sessionkey=" + g_sessionKey; } function fromdb(val) { return sanitizeXSS(noNull(val)); } function todb(val) { return encodeURIComponent(val); } var midmenuItemCount = 20; function setBooleanReadField(value, $field) { if(value == "true" || value == true) $field.text("Yes"); else if(value == "false" || value == false) $field.text("No"); else $field.text(""); /* if(value == "true" || value == true) $field.text("Yes").show(); else if(value == "false" || value == false) $field.text("No").show(); else $field.hide(); */ } function setBooleanEditField(value, $field) { if(value == "true" || value == true) $field.val("true"); else if(value == "false" || value == false) $field.val("false"); /* if(value == "true" || value == true) $field.val("true"); else if(value == "false" || value == false) $field.val("false"); else $field.hide(); */ } var LeftMenuAdvancedSearchMap = { "leftmenu_instances_my_instances": "advanced_search_popup_nodomainaccount", "leftmenu_instances_running_instances": "advanced_search_popup_nostate", "leftmenu_instances_stopped_instances": "advanced_search_popup_nostate", "leftmenu_instances_destroyed_instances": "advanced_search_popup_nostate" } function getAdvancedSearchPopup($container) { var $advancedSearchPopup; if(currentLeftMenuId in LeftMenuAdvancedSearchMap) $advancedSearchPopup = $container.find("#"+LeftMenuAdvancedSearchMap[currentLeftMenuId]); else $advancedSearchPopup = $container.find("#advanced_search_popup"); //default return $advancedSearchPopup; } function getAdvancedSearchPopupInHiddenContainer() { return getAdvancedSearchPopup($("#hidden_container")); } function getAdvancedSearchPopupInSearchContainer() { return getAdvancedSearchPopup($("#advanced_search_container")); } function clearMiddleMenu() { $("#midmenu_container").empty(); $("#midmenu_action_link").hide(); $("#basic_search").find("#search_input").val(""); $("#advanced_search_icon").removeClass("up"); if($("#hidden_container").length > 0) getAdvancedSearchPopupInSearchContainer().hide().appendTo($("#hidden_container")); else getAdvancedSearchPopupInSearchContainer().remove(); $("#midmenu_prevbutton, #midmenu_nextbutton").hide(); $("#middle_menu_pagination").data("params", null); } function clearButtonsOnTop() { return $("#top_button_container").empty(); } function clearRightPanel() { var $actionMenu = $("#right_panel_content #tab_content_details #action_link #action_menu"); $actionMenu.find("#action_list").empty(); $actionMenu.find("#action_list").append($("#no_available_actions").clone().show()); $("#right_panel_content #tab_content_details #spinning_wheel").hide(); $("#right_panel_content #after_action_info_container").hide(); cancelEditMode($("#tab_content_details")); } var $selectedLeftMenu; var $expandedLeftMenu; function selectLeftMenu($menuToSelect, expandable, afterSelectFn) { if ($selectedLeftMenu == null || ($menuToSelect.attr("id") != $selectedLeftMenu.attr("id"))) { if($selectedLeftMenu != null) { $selectedLeftMenu.removeClass("selected"); $selectedLeftMenu.find(".leftmenu_arrows_firstlevel_open").hide(); } $menuToSelect.addClass("selected"); $menuToSelect.find(".leftmenu_arrows_firstlevel_open").show(); $selectedLeftMenu = $menuToSelect; // collapse any current expanded menu var $menuToExpand; if (expandable != undefined && expandable) { $menuToExpand = $selectedLeftMenu.siblings(".leftmenu_expandedbox"); } if ($expandedLeftMenu != null) { $expandedLeftMenu.slideUp(500, afterSelectFn); if ($menuToExpand != null) $menuToExpand.slideDown(500); $expandedLeftMenu = null; } else if ($menuToExpand != null) { $menuToExpand.slideDown(500, afterSelectFn); } else if (afterSelectFn != undefined) { afterSelectFn(); } $expandedLeftMenu = $menuToExpand; // Close the help link if it's opened $("#help_dropdown_dialog").hide(); $("#help_button").removeClass("selected"); return true; } return false; } var $selectedSubMenu; function selectLeftSubMenu($menuToSelect) { if ($selectedSubMenu == null || ($menuToSelect.attr("id") != $selectedSubMenu.attr("id"))) { if($selectedSubMenu != null) $selectedSubMenu.removeClass("selected"); $menuToSelect.addClass("selected"); $selectedSubMenu = $menuToSelect; } // Every time you click on a different menu item, we should stop all previous async job queries $("body").stopTime(); } var selected_midmenu_id = null; function hideMiddleMenu() { $("#middle_menu, #search_panel, #middle_menu_pagination").hide(); $("#midmenu_container").empty(); $("#right_panel").removeClass("main_contentarea_with_midmenu").addClass("main_contentarea_without_midmenu"); } function showMiddleMenu() { $("#middle_menu, #search_panel, #middle_menu_pagination").show(); $("#right_panel").removeClass("main_contentarea_without_midmenu").addClass("main_contentarea_with_midmenu"); } function isMiddleMenuShown() { if($("#middle_menu").css("display") == "none") return false; else return true; } // adding middle menu item *** function beforeAddingMidMenuItem() { var $midmenuItem1 = $("#midmenu_item").clone().attr("id", "midmenu_item_clone"); $midmenuItem1.find("#first_row").text(g_dictionary["label.adding.processing"]); $midmenuItem1.find("#second_row").html(" "); $midmenuItem1.find("#content").addClass("inaction"); $midmenuItem1.find("#spinning_wheel").show(); $midmenuItem1.find("#info_icon").removeClass("error").hide(); $("#midmenu_container").prepend($midmenuItem1.show()); return $midmenuItem1; } function afterAddingMidMenuItem($midmenuItem1, isSuccessful, secondRowText) { $midmenuItem1.find("#content").removeClass("inaction"); $midmenuItem1.find("#spinning_wheel").hide(); if(isSuccessful == true) { $midmenuItem1.find("#info_icon").removeClass("error").show(); $midmenuItem1.data("afterActionInfo", g_dictionary["label.adding.succeeded"]); var $container = $("#midmenu_container"); if($("#midmenu_container").find("#multiple_selection_sub_container").length > 0) { $container = $("#midmenu_container").find("#multiple_selection_sub_container"); $("#midmenu_container #multiple_selection_sub_container").prepend($midmenuItem1); } var $noItemsAvailable = $container.find("#midmenu_container_no_items_available"); if($noItemsAvailable.length > 0) { $noItemsAvailable.slideUp("slow", function() { $(this).remove(); }); } } else { // Failed $midmenuItem1.find("#content").addClass("addingfailed"); $midmenuItem1.find("#icon").attr("src", "images/addingfailed_icon.png"); $midmenuItem1.find("#icon_container").show(); $midmenuItem1.find("#first_row").text(g_dictionary["label.adding.failed"]); if(secondRowText != null) $midmenuItem1.find("#second_row").text(secondRowText.substring(0,midMenuSecondRowLength)); $midmenuItem1.find("#close_icon").show().bind("click", function(event) { $midmenuItem1.slideUp("slow", function() { $(this).remove(); }); return false; }); } if(secondRowText != null) { $midmenuItem1.find("#second_row").text(secondRowText.substring(0,midMenuSecondRowLength)); } } function switchBetweenDifferentTabs(tabArray, tabContentArray, afterSwitchFnArray) { for(var tabIndex=0; tabIndex 0) $("#"+selected_midmenu_id).find("#content").removeClass("selected"); selected_midmenu_id = getMidmenuIdFn($currentMidmenuItem.data("jsonObj")); $currentMidmenuItem.find("#content").addClass("selected"); clearRightPanel(); toRightPanelFn($currentMidmenuItem); return false; }); } function clickItemInMultipleSelectionMidmenu($midmenuItem1) { $midmenuItem1.find("#content").addClass("selected"); //"selected" is a CSS class in cloudstack-defined CSS if($midmenuItem1.hasClass("ui-selected") == false) //"ui-selected" is a CSS class in JQuery selectable widget $midmenuItem1.addClass("ui-selected"); clearRightPanel(); var toRightPanelFn = $midmenuItem1.data("toRightPanelFn"); toRightPanelFn($midmenuItem1); var jsonObj = $midmenuItem1.data("jsonObj"); selectedItemsInMidMenu[jsonObj.id] = $midmenuItem1; countTopButtonMapFn(jsonObj); selected_midmenu_id = $midmenuItem1.attr("id"); $currentMidmenuItem = $midmenuItem1; } function unclickItemInMultipleSelectionMidmenu($midmenuItem1, id) { delete selectedItemsInMidMenu[id]; $midmenuItem1.find("#content").removeClass("selected"); var jsonObj = $midmenuItem1.data("jsonObj"); uncountTopButtonMapFn(jsonObj); } var countTopButtonMapFn = function() {}; var uncountTopButtonMapFn = function() {}; var grayoutTopButtonsFn = function() {}; var resetTopButtonMapFn = function() {}; function createMultipleSelectionSubContainer() { var $multipleSelectionSubContainer = $("
"); $("#midmenu_container").empty().append($multipleSelectionSubContainer); selectedItemsInMidMenu = {}; resetTopButtonMapFn(); $multipleSelectionSubContainer.selectable({ selecting: function(event, ui) { if(ui.selecting.id.indexOf("midmenuItem") != -1) { var $midmenuItem1 = $("#"+ui.selecting.id); if($midmenuItem1.find("#content").hasClass("inaction") == false) { //only items not in action are allowed to be selected clickItemInMultipleSelectionMidmenu($midmenuItem1); } else { //The item is in action. It can't be selected for another action, but its content still shows in right panel. clearRightPanel(); var toRightPanelFn = $midmenuItem1.data("toRightPanelFn"); toRightPanelFn($midmenuItem1); } } }, unselecting: function(event, ui) { if(ui.unselecting.id.indexOf("midmenuItem") != -1) { var $midmenuItem1 = $("#"+ui.unselecting.id); var id = $midmenuItem1.data("jsonObj").id; if(id in selectedItemsInMidMenu) { unclickItemInMultipleSelectionMidmenu($midmenuItem1, id); } } }, start: function(event, ui) { }, stop: function(event, ui) { grayoutTopButtonsFn(); } }); return $multipleSelectionSubContainer; } function getMidmenuId(jsonObj) { return "midmenuItem_" + jsonObj.id; } var autoCompleteDomains = []; function applyAutoCompleteToDomainField($field) { $field.autocomplete({ source: function(request, response) { $.ajax({ data: createURL("command=listDomains&keyword=" + request.term), dataType: "json", async: false, success: function(json) { autoCompleteDomains = json.listdomainsresponse.domain; var array1 = []; if(autoCompleteDomains != null && autoCompleteDomains.length > 0) { for(var i=0; i < autoCompleteDomains.length; i++) array1.push(fromdb(autoCompleteDomains[i].name)); } response(array1); } }); } }); } function applyAutoCompleteToDomainChildrenField($field, parentDomainId) { $field.autocomplete({ source: function(request, response) { var array1 = []; $.ajax({ data: createURL("command=listDomainChildren&id="+parentDomainId+"&isrecursive=true&keyword=" + request.term), dataType: "json", async: false, success: function(json) { autoCompleteDomains = json.listdomainchildrenresponse.domain; if(autoCompleteDomains != null && autoCompleteDomains.length > 0) { for(var i=0; i < autoCompleteDomains.length; i++) array1.push(fromdb(autoCompleteDomains[i].name)); } } }); $.ajax({ data: createURL("command=listDomains&id="+parentDomainId+"&keyword=" + request.term), dataType: "json", async: false, success: function(json) { var items = json.listdomainsresponse.domain; if(items != null && items.length > 0) { autoCompleteDomains.push(items[0]); array1.push(fromdb(items[0].name)); } } }); response(array1); } }); } //var lastSearchType; var currentCommandString; var searchParams; function listMidMenuItems2(commandString, getSearchParamsFn, jsonResponse1, jsonResponse2, toMidmenuFn, toRightPanelFn, getMidmenuIdFn, isMultipleSelectionInMidMenu, page) { $("#midmenu_container").hide(); $("#midmenu_spinning_wheel").show(); var params = { "commandString": commandString, "getSearchParamsFn": getSearchParamsFn, "jsonResponse1": jsonResponse1, "jsonResponse2": jsonResponse2, "toMidmenuFn": toMidmenuFn, "toRightPanelFn": toRightPanelFn, "getMidmenuIdFn": getMidmenuIdFn, "isMultipleSelectionInMidMenu": isMultipleSelectionInMidMenu, "page": page } $("#middle_menu_pagination").data("params", params); (page > 1)? $("#midmenu_prevbutton").show(): $("#midmenu_prevbutton").hide(); searchParams = getSearchParamsFn(); var count = 0; $.ajax({ cache: false, data: createURL("command="+commandString+searchParams+"&pagesize="+midmenuItemCount+"&page="+page), dataType: "json", async: false, success: function(json) { var $container; if(isMultipleSelectionInMidMenu != true) $container = $("#midmenu_container").empty(); else $container = createMultipleSelectionSubContainer(); var items = json[jsonResponse1][jsonResponse2]; if(items != null && items.length > 0) { (items.length == midmenuItemCount)? $("#midmenu_nextbutton").show(): $("#midmenu_nextbutton").hide(); for(var i=0; i 0) $infoContainer.find("#info").text(errorMsg); else $infoContainer.find("#info").text(g_dictionary["label.failed"]); $thisDialog.find("#spinning_wheel").hide(); $infoContainer.show(); } function parseXMLHttpResponse(XMLHttpResponse) { if(isValidJsonString(XMLHttpResponse.responseText) == false) { return ""; } //var json = jQuery.parseJSON(XMLHttpResponse.responseText); var json = JSON.parse(XMLHttpResponse.responseText); if (json != null) { var property; for(property in json) {} var errorObj = json[property]; return fromdb(errorObj.errortext); } else { return ""; } } function isValidJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } function showLeftNavigationBasedOnRole() { if (isAdmin()) { $("#leftmenu_domain, #leftmenu_account, #leftmenu_configuration, #leftmenu_system, #leftmenu_alert_container, #launch_test").show(); } else if(isDomainAdmin()){ $("#leftmenu_domain, #leftmenu_account").show(); } else{ //isUser() == true } if(getDirectAttachSecurityGroupsEnabled() == "true") { $("#leftmenu_security_group_container").show(); } else { $("#leftmenu_security_group_container").hide(); } if (isAdmin() || (getUserPublicTemplateEnabled() == "true")) { $("#leftmenu_submenu_community_template_container, #leftmenu_submenu_community_iso_container").show(); } else { $("#leftmenu_submenu_community_template_container, #leftmenu_submenu_community_iso_container").hide(); } } function drawBarChart($capacity, percentused) { //percentused == "0.01%" (having % inside) if(percentused == null) { $capacity.find("#percentused").text(""); $capacity.find("#bar_chart").removeClass().addClass("db_barbox low").css("width", 0); return; } $capacity.find("#percentused").text(percentused); var percentusedFloat; if(percentused.indexOf("%") != -1) { percentused = percentused.replace("%", ""); percentusedFloat = parseFloat(percentused); percentusedFloat = percentusedFloat * 0.01; //because % is removed. percentusedFloat == 0.0001 } else { percentusedFloat = parseFloat(percentused); } if (percentusedFloat <= 0.6) $capacity.find("#bar_chart").removeClass().addClass("db_barbox low").css("width", percentused); else if (percentusedFloat > 0.6 && percentusedFloat <= 0.8 ) $capacity.find("#bar_chart").removeClass().addClass("db_barbox mid").css("width", percentused); else if (percentusedFloat > 0.8 ) $capacity.find("#bar_chart").removeClass().addClass("db_barbox high").css("width", percentused); } var $readonlyFields, $editFields; function cancelEditMode($tab) { if($editFields != null) $editFields.hide(); if($readonlyFields != null) $readonlyFields.show(); $tab.find("#save_button, #cancel_button").hide(); } function showAfterActionInfoOnTop(isSuccessful, afterActionInfo) { var $afterActionInfoContainer = $("#right_panel_content #after_action_info_container_on_top"); if(isSuccessful) $afterActionInfoContainer.removeClass("errorbox"); else $afterActionInfoContainer.addClass("errorbox"); $afterActionInfoContainer.find("#after_action_info").text(afterActionInfo); $afterActionInfoContainer.show(); } function ipFindNetworkServiceByName(pName, networkObj) { if(networkObj == null) return null; if(networkObj.service != null) { for(var i=0; i 0) { var disconnected = new Date(); disconnected.setISO8601(dateValue); var showDate; if(g_timezoneoffset != null) showDate = disconnected.getTimePlusTimezoneOffset(g_timezoneoffset); else showDate = disconnected.format("m/d/Y H:i:s"); if(htmlMarkup == null) dateField.text(showDate); else dateField.html(htmlMarkup + showDate); } } function initResizable(resizeElement, alsoResizeElement) { var alsoResizeUi_originalHeight; $("#"+resizeElement).resizable({ handles: 'e, w', autoHide: true, //containment: ".grid_header" , alsoResize: "."+alsoResizeElement }); } var sortBy = ""; var parseFunction = function() {} var sortingOrder = "asc"; function sortArrayAlphabetically(a, b) { if(a[sortBy] == null || b[sortBy] == null) return 0; var A = a[sortBy].toLowerCase(); var B = b[sortBy].toLowerCase(); if(sortingOrder == "asc") { if (A < B) return -1; if (A > B) return 1; } else { if (A < B) return 1; if (A > B) return -1; } return 0; } function sortArrayAlphabeticallyParse(a, b) { if(a[sortBy] == null || b[sortBy] == null) return 0; var A = parseFunction(a[sortBy]).toLowerCase(); var B = parseFunction(b[sortBy]).toLowerCase(); if(sortingOrder == "asc") { if (A < B) return -1; if (A > B) return 1; } else { if (A < B) return 1; if (A > B) return -1; } return 0; } function sortArrayNumerically(a, b) { if(a[sortBy] == null || b[sortBy] == null) return 0; var A = parseInt(a[sortBy]); var B = parseInt(b[sortBy]); if(sortingOrder == "asc") { if (A < B) return -1; if (A > B) return 1; } else { if (A < B) return 1; if (A > B) return -1; } return 0; } function sortArrayNumericallyParse(a, b) { if(a[sortBy] == null || b[sortBy] == null) return 0; var A = parseFunction(parseInt(a[sortBy])); var B = parseFunction(parseInt(b[sortBy])); if(sortingOrder == "asc") { if (A < B) return -1; if (A > B) return 1; } else { if (A < B) return 1; if (A > B) return -1; } return 0; } function sortArrayByDate(a, b) { if(a[sortBy] == null || b[sortBy] == null) return 0; var A = convertMilliseconds(a[sortBy]); var B = convertMilliseconds(b[sortBy]); if(sortingOrder == "asc") { if (A < B) return -1; if (A > B) return 1; } else { if (A < B) return 1; if (A > B) return -1; } return 0; } function convertMilliseconds(string) { if (string != null && string.length > 0) { var date1 = new Date(); date1.setISO8601(string); return date1.getTime(); } else { return null; } } // Validation functions function showError(isValid, field, errMsgField, errMsg) { if(isValid) { errMsgField.text("").hide(); field.addClass("text").removeClass("error_text"); } else { errMsgField.text(errMsg).show(); field.removeClass("text").addClass("error_text"); } } function showError2(isValid, field, errMsgField, errMsg, appendErrMsg) { if(isValid) { errMsgField.text("").hide(); field.addClass("text2").removeClass("error_text2"); } else { if(appendErrMsg) //append text errMsgField.text(errMsgField.text()+errMsg).show(); else //reset text errMsgField.text(errMsg).show(); field.removeClass("text2").addClass("error_text2"); } } function showErrorInDropdown(isValid, field, errMsgField, errMsg, appendErrMsg) { if(isValid) { errMsgField.text("").hide(); field.addClass("select").removeClass("error_select"); } else { if(appendErrMsg) //append text errMsgField.text(errMsgField.text()+errMsg).show(); else //reset text errMsgField.text(errMsg).show(); field.removeClass("select").addClass("error_select"); } } function validateDropDownBox(label, field, errMsgField, appendErrMsg) { var isValid = true; var errMsg = ""; var value = field.val(); if (value == null || value.length == 0) { //errMsg = label + " is a required value. "; errMsg = g_dictionary["label.required"]; isValid = false; } showErrorInDropdown(isValid, field, errMsgField, errMsg, appendErrMsg); return isValid; } function validateInteger(label, field, errMsgField, min, max, isOptional) { return validateNumber(label, field, errMsgField, min, max, isOptional, "integer"); } function validateNumber(label, field, errMsgField, min, max, isOptional, type) { var isValid = true; var errMsg = ""; var value = field.val(); if (value != null && value.length != 0) { if(isNaN(value)) { //errMsg = label + " must be a number"; errMsg = g_dictionary["label.invalid.number"]; isValid = false; } else { if(type == "integer" && (value % 1) != 0) { //errMsg = label + " must be an integer"; errMsg = g_dictionary["label.invalid.integer"]; isValid = false; } if (min != null && value < min) { //errMsg = label + " must be a value greater than or equal to " + min; errMsg = g_dictionary["label.minimum"] + ": " + min; isValid = false; } if (max != null && value > max) { //errMsg = label + " must be a value less than or equal to " + max; errMsg = g_dictionary["label.maximum"] + ": " + max; isValid = false; } } } else if(isOptional!=true){ //required field //errMsg = label + " is a required value. "; errMsg = g_dictionary["label.required"]; isValid = false; } showError(isValid, field, errMsgField, errMsg); return isValid; } function validateString(label, field, errMsgField, isOptional, maxLength) { var isValid = true; var errMsg = ""; var value = field.val(); if (isOptional!=true && (value == null || value.length == 0)) { //required field //errMsg = label + " is a required value. "; errMsg = g_dictionary["label.required"]; isValid = false; } else if (value!=null && value.length >= maxLength) { //errMsg = label + " must be less than " + maxLength + " characters"; errMsg = g_dictionary["label.maximum"] + ": " + max + " " + g_dictionary["label.character"]; isValid = false; } else if(value!=null && value.indexOf('"')!=-1) { //errMsg = "Double quotes are not allowed"; errMsg = g_dictionary["label.double.quotes.are.not.allowed"]; isValid = false; } showError(isValid, field, errMsgField, errMsg); return isValid; } function validateEmail(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var value = field.val(); if(value!=null && value.length>0) { myregexp = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; var isMatch = myregexp.test(value); if(!isMatch) { errMsg = g_dictionary["label.example"] + ": xxxxxxx@hotmail.com"; isValid = false; } } showError(isValid, field, errMsgField, errMsg); return isValid; } function validateIp(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var value = field.val(); if(value!=null && value.length>0) { myregexp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; var isMatch = myregexp.test(value); if(!isMatch) { //errMsg = label + " should be like 75.52.126.11"; errMsg = g_dictionary["label.example"] + ": 75.52.126.11"; isValid = false; } } showError(isValid, field, errMsgField, errMsg); return isValid; } function validateCIDR(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var value = field.val(); if(value!=null && value.length>0) { myregexp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/; var isMatch = myregexp.test(value); if(!isMatch) { //errMsg = label + " should be like 10.1.1.0/24"; errMsg = g_dictionary["label.example"] + ": 10.1.1.0/24"; isValid = false; } } showError(isValid, field, errMsgField, errMsg); return isValid; } function validateCIDRList(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var cidrList = field.val(); var array1 = cidrList.split(","); for(var i=0; i < array1.length; i++) { var value = array1[i]; if(value!=null && value.length>0) { myregexp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$/; var isMatch = myregexp.test(value); if(!isMatch) { isValid = false; } } } if(isValid == false) errMsg = g_dictionary["label.example"] + ": 10.1.1.0/24,10.1.1.1/24,10.1.1.2/24"; showError(isValid, field, errMsgField, errMsg); return isValid; } /* function validateFilename(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var value = field.val(); if(value!=null && value.length>0) { myregexp = /[^a-zA-Z0-9_\-\.]/; var isMatch = myregexp.test(value); if(isMatch) { errMsg = "Only alphanumeric, dot, dashes and underscore characters allowed"; isValid = false; } } showError(isValid, field, errMsgField, errMsg); return isValid; } */ function validatePath(label, field, errMsgField, isOptional) { if(validateString(label, field, errMsgField, isOptional) == false) return; var isValid = true; var errMsg = ""; var value = field.val(); if(value!=null && value.length>0) { myregexp = /^\//; var isMatch = myregexp.test(value); if(!isMatch) { errMsg = label + " should be like /aaa/bbb/ccc"; isValid = false; } } showError(isValid, field, errMsgField, errMsg); return isValid; } function cleanErrMsg(field, errMsgField) { showError(true, field, errMsgField); } // setter function setGridRowsTotal(field, gridRowsTotal) { if(gridRowsTotal==null) { field.text(""); return; } if(gridRowsTotal==1) field.text(gridRowsTotal + " item"); else field.text(gridRowsTotal + " items"); } function changeGridRowsTotal(field, difference) { var t = field.text(); var oldTotal = 0; if(t.length>0 && t.indexOf(" item")!=-1) { var s = t.substring(0, t.indexOf(" item")); if(!isNaN(s)) oldTotal = parseInt(s); } var newTotal = oldTotal + difference; setGridRowsTotal(field, newTotal); } // others function trim(val) { if(val == null) return null; return val.replace(/^\s*/, "").replace(/\s*$/, ""); } function noNull(val) { if(val == null) return ""; else return val; } // Prevent cross-site-script(XSS) attack. // used right before adding user input to the DOM tree. e.g. DOM_element.html(fromdb(user_input)); function sanitizeXSS(val) { if(val == null || typeof(val) != "string") return val; val = val.replace(//g, ">"); //replace > whose unicode is \u003e return unescape(val); } var midMenuFirstRowLength = 26; var midMenuSecondRowLength = 33; function getVmName(p_vmName, p_vmDisplayname) { if(p_vmDisplayname == null) return fromdb(p_vmName); var vmName = null; if (p_vmDisplayname != p_vmName) { vmName = fromdb(p_vmName) + " (" + fromdb(p_vmDisplayname) + ")"; } else { vmName = fromdb(p_vmName); } return vmName; } // FUNCTION: Handles AJAX error callbacks. You can pass in an optional function to // handle errors that are not already handled by this method. function handleError(XMLHttpResponse, handleErrorCallback) { // User Not authenticated if (XMLHttpResponse.status == ERROR_ACCESS_DENIED_DUE_TO_UNAUTHORIZED) { $("#dialog_session_expired").dialog("open"); } else if (XMLHttpResponse.status == ERROR_INTERNET_NAME_NOT_RESOLVED) { $("#dialog_error_internet_not_resolved").dialog("open"); } else if (XMLHttpResponse.status == ERROR_INTERNET_CANNOT_CONNECT) { $("#dialog_error_management_server_not_accessible").dialog("open"); } else if (XMLHttpResponse.status == ERROR_VMOPS_ACCOUNT_ERROR && handleErrorCallback != undefined) { handleErrorCallback(); } else if (handleErrorCallback != undefined) { handleErrorCallback(); } else { var errorMsg = parseXMLHttpResponse(XMLHttpResponse); $("#dialog_error").text(fromdb(errorMsg)).dialog("open"); } } // FUNCTION: Adds a Dialog to the list of active Dialogs so that // when you shift from one tab to another, we clean out the dialogs var activeDialogs = new Array(); function activateDialog(dialog, addToActive) { if (addToActive == undefined || addToActive) { activeDialogs[activeDialogs.length] = dialog; } //bind Enter-Key-pressing event handler to the dialog dialog.keypress(function(event) { if(event.keyCode == keycode_Enter) { $('[aria-labelledby$='+dialog.attr("id")+']').find(":button:first").click(); return false; //event.preventDefault() + event.stopPropagation() } }); } function removeDialogs() { for (var i = 0; i < activeDialogs.length; i++) { activeDialogs[i].remove(); } activeDialogs = new Array(); } function convertBytes(bytes) { if (bytes < 1024 * 1024) { return (bytes / 1024).toFixed(2) + " KB"; } else if (bytes < 1024 * 1024 * 1024) { return (bytes / 1024 / 1024).toFixed(2) + " MB"; } else if (bytes < 1024 * 1024 * 1024 * 1024) { return (bytes / 1024 / 1024 / 1024).toFixed(2) + " GB"; } else { return (bytes / 1024 / 1024 / 1024 / 1024).toFixed(2) + " TB"; } } function convertHz(hz) { if (hz == null) return ""; if (hz < 1000) { return hz + " MHZ"; } else { return (hz / 1000).toFixed(2) + " GHZ"; } } function toDayOfMonthDesp(dayOfMonth) { return "Day "+dayOfMonth +" of Month"; } function toDayOfWeekDesp(dayOfWeek) { if (dayOfWeek == "1") return "Sunday"; else if (dayOfWeek == "2") return "Monday"; else if (dayOfWeek == "3") return "Tuesday"; else if (dayOfWeek == "4") return "Wednesday"; else if (dayOfWeek == "5") return "Thursday" else if (dayOfWeek == "6") return "Friday"; else if (dayOfWeek == "7") return "Saturday"; } function toBooleanText(booleanValue) { if(booleanValue == true || booleanValue == "true") return "Yes"; else if(booleanValue == false ||booleanValue == "false") return "No"; } function toBooleanValue(booleanText) { if(booleanText == "Yes") return "true"; else if(booleanText == "No") return "false"; } function toNetworkType(usevirtualnetwork) { if(usevirtualnetwork == true || usevirtualnetwork == "true") return "Public"; else return "Direct"; } var roleTypeUser = "0"; var roleTypeAdmin = "1"; var roleTypeDomainAdmin = "2"; function toRole(type) { if (type == roleTypeUser) { return "User"; } else if (type == roleTypeAdmin) { return "Admin"; } else if (type == roleTypeDomainAdmin) { return "Domain-Admin"; } } function toAlertType(alertCode) { switch (alertCode) { case 0 : return "Capacity Threshold - Memory"; case 1 : return "Capacity Threshold - CPU"; case 2 : return "Capacity Threshold - Storage Used"; case 3 : return "Capacity Threshold - Storage Allocated"; case 4 : return "Capacity Threshold - Public IP"; case 5 : return "Capacity Threshold - Private IP"; case 6 : return "Monitoring - Host"; case 7 : return "Monitoring - VM"; case 8 : return "Monitoring - Domain Router"; case 9 : return "Monitoring - Console Proxy"; case 10 : return "Monitoring - Routing Host"; case 11 : return "Monitoring - Storage"; case 12 : return "Monitoring - Usage Server"; case 13 : return "Monitoring - Management Server"; case 14 : return "Migration - Domain Router"; case 15 : return "Migration - Console Proxy"; case 16 : return "Migration - User VM"; case 17 : return "VLAN"; case 18 : return "Monitoring - Secondary Storage VM"; } } // Timezones var timezones = new Object(); timezones['Etc/GMT+12']='[UTC-12:00] GMT-12:00'; timezones['Etc/GMT+11']='[UTC-11:00] GMT-11:00'; timezones['Pacific/Samoa']='[UTC-11:00] Samoa Standard Time'; timezones['Pacific/Honolulu']='[UTC-10:00] Hawaii Standard Time'; timezones['US/Alaska']='[UTC-09:00] Alaska Standard Time'; timezones['America/Los_Angeles']='[UTC-08:00] Pacific Standard Time'; timezones['Mexico/BajaNorte']='[UTC-08:00] Baja California'; timezones['US/Arizona']='[UTC-07:00] Arizona'; timezones['US/Mountain']='[UTC-07:00] Mountain Standard Time'; timezones['America/Chihuahua']='[UTC-07:00] Chihuahua, La Paz'; timezones['America/Chicago']='[UTC-06:00] Central Standard Time'; timezones['America/Costa_Rica']='[UTC-06:00] Central America'; timezones['America/Mexico_City']='[UTC-06:00] Mexico City, Monterrey'; timezones['Canada/Saskatchewan']='[UTC-06:00] Saskatchewan'; timezones['America/Bogota']='[UTC-05:00] Bogota, Lima'; timezones['America/New_York']='[UTC-05:00] Eastern Standard Time'; timezones['America/Caracas']='[UTC-04:00] Venezuela Time'; timezones['America/Asuncion']='[UTC-04:00] Paraguay Time'; timezones['America/Cuiaba']='[UTC-04:00] Amazon Time'; timezones['America/Halifax']='[UTC-04:00] Atlantic Standard Time'; timezones['America/La_Paz']='[UTC-04:00] Bolivia Time'; timezones['America/Santiago']='[UTC-04:00] Chile Time'; timezones['America/St_Johns']='[UTC-03:30] Newfoundland Standard Time'; timezones['America/Araguaina']='[UTC-03:00] Brasilia Time'; timezones['America/Argentina/Buenos_Aires']='[UTC-03:00] Argentine Time'; timezones['America/Cayenne']='[UTC-03:00] French Guiana Time'; timezones['America/Godthab']='[UTC-03:00] Greenland Time'; timezones['America/Montevideo']='[UTC-03:00] Uruguay Time]'; timezones['Etc/GMT+2']='[UTC-02:00] GMT-02:00'; timezones['Atlantic/Azores']='[UTC-01:00] Azores Time'; timezones['Atlantic/Cape_Verde']='[UTC-01:00] Cape Verde Time'; timezones['Africa/Casablanca']='[UTC] Casablanca'; timezones['Etc/UTC']='[UTC] Coordinated Universal Time'; timezones['Atlantic/Reykjavik']='[UTC] Reykjavik'; timezones['Europe/London']='[UTC] Western European Time'; timezones['CET']='[UTC+01:00] Central European Time'; timezones['Europe/Bucharest']='[UTC+02:00] Eastern European Time'; timezones['Africa/Johannesburg']='[UTC+02:00] South Africa Standard Time'; timezones['Asia/Beirut']='[UTC+02:00] Beirut'; timezones['Africa/Cairo']='[UTC+02:00] Cairo'; timezones['Asia/Jerusalem']='[UTC+02:00] Israel Standard Time'; timezones['Europe/Minsk']='[UTC+02:00] Minsk'; timezones['Europe/Moscow']='[UTC+03:00] Moscow Standard Time'; timezones['Africa/Nairobi']='[UTC+03:00] Eastern African Time'; timezones['Asia/Karachi']='[UTC+05:00] Pakistan Time'; timezones['Asia/Kolkata']='[UTC+05:30] India Standard Time'; timezones['Asia/Bangkok']='[UTC+05:30] Indochina Time'; timezones['Asia/Shanghai']='[UTC+08:00] China Standard Time'; timezones['Asia/Kuala_Lumpur']='[UTC+08:00] Malaysia Time'; timezones['Australia/Perth']='[UTC+08:00] Western Standard Time (Australia)'; timezones['Asia/Taipei']='[UTC+08:00] Taiwan'; timezones['Asia/Tokyo']='[UTC+09:00] Japan Standard Time'; timezones['Asia/Seoul']='[UTC+09:00] Korea Standard Time'; timezones['Australia/Adelaide']='[UTC+09:30] Central Standard Time (South Australia)'; timezones['Australia/Darwin']='[UTC+09:30] Central Standard Time (Northern Territory)'; timezones['Australia/Brisbane']='[UTC+10:00] Eastern Standard Time (Queensland)'; timezones['Australia/Canberra']='[UTC+10:00] Eastern Standard Time (New South Wales)'; timezones['Pacific/Guam']='[UTC+10:00] Chamorro Standard Time'; timezones['Pacific/Auckland']='[UTC+12:00] New Zealand Standard Time';