/**
 *
 * SugarCRM Community Edition is a customer relationship management program developed by
 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
 *
 * SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
 * Copyright (C) 2011 - 2018 SalesAgility Ltd.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by the
 * Free Software Foundation with the addition of the following permission added
 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 *
 * 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 Affero General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License along with
 * this program; if not, see http://www.gnu.org/licenses or write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301 USA.
 *
 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
 * these Appropriate Legal Notices must retain the display of the "Powered by
 * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
 * reasonably feasible for technical reasons, the Appropriate Legal Notices must
 * display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
 */



initMySugar = function () {
  SUGAR.mySugar = function () {
    var originalLayout = null;
    var configureDashletId = null;
    var currentDashlet = null;
    var leftColumnInnerHTML = null;
    var leftColObj = null;
    var maxCount;
    var warningLang;

    var closeDashletsDialogTimer = null;

    var activeTab = activePage;
    var current_user = current_user_id;

    var module = moduleName;

    var charts = {};

    if (module == 'Dashboard') {
      cookiePageIndex = current_user + "_activeDashboardPage";
    }
    else {
      cookiePageIndex = current_user + "_activePage";
    }

    var homepage_dd;

    return {

      // get the current dashlet layout
      getLayout: function (asString) {
        columns = [];
        for (je = 0; je < 3; je++) {
          dashlets = document.getElementById('col_' + activeTab + '_' + je);

          if (dashlets != null) {
            dashletIds = [];
            for (wp = 0; wp < dashlets.childNodes.length; wp++) {
              if (typeof dashlets.childNodes[wp].id != 'undefined' && dashlets.childNodes[wp].id.match(/dashlet_[\w-]*/)) {
                dashletIds.push(dashlets.childNodes[wp].id.replace(/dashlet_/, ''));
              }
            }
            if (asString)
              columns[je] = dashletIds.join(',');
            else
              columns[je] = dashletIds;
          }
        }

        if (asString) return columns.join('|');
        else return columns;
      },

      // called when dashlet is picked up
      onDrag: function (e, id) {
        originalLayout = SUGAR.mySugar.getLayout(true);
      },

      // called when dashlet is dropped
      onDrop: function (e, id) {
        newLayout = SUGAR.mySugar.getLayout(true);
        if (originalLayout != newLayout) { // only save if the layout has changed
          SUGAR.mySugar.saveLayout(newLayout);
          // TODO: Investigate JS error from this
          SUGAR.mySugar.sugarCharts.loadSugarCharts(); // called safely because there is a check to be sure the array exists
        }
        // Show new dashlet position
        $('.dashletcontainer').find('.dashletPanel').css('display', 'block');
        // hide placeholder
        $('.dashletcontainer').find('div').each(function (e, v) {

          if ($(v).html() == '' && typeof $(v).attr('id') === 'undefined' && typeof $(v).attr('class') === 'undefined') {
            $(this).css('display', 'none');
          }
        });
      },

      // save the layout of the dashlet
      saveLayout: function (order) {
        ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_SAVING_LAYOUT'));
        var success = function (data) {
          ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_SAVED_LAYOUT'));
          window.setTimeout('ajaxStatus.hideStatus()', 2000);
        };

        YAHOO.util.Connect.asyncRequest('POST', 'index.php?' + SUGAR.util.paramsToUrl({
            'module': module,
            'action': 'DynamicAction',
            'DynamicAction': 'saveLayout',
            'selectedPage': activeTab,
            'to_pdf': 1
          }), {
          success: success,
          failure: success
        }, SUGAR.util.paramsToUrl({
          'layout': order
        }));
      },


      uncoverPage: function (id) {
        if (!SUGAR.isIE) {
          document.getElementById('dlg_c').style.display = 'none';
        }
        configureDlg.hide();
        if (document.getElementById('dashletType') == null) {
          dashletType = '';
        } else {
          dashletType = document.getElementById('dashletType').value;
        }
        SUGAR.mySugar.retrieveDashlet(SUGAR.mySugar.configureDashletId, dashletType);
      },

      // call to configure a Dashlet
      configureDashlet: function (id) {
        var dashletId = id;
        ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING'));
        configureDlg = new YAHOO.widget.SimpleDialog("dlg", {
          visible: false,
          effect: [{effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5}],
          fixedcenter: false,
          modal: true,
          draggable: false,
          x: 0,
          zIndex: 11
        });


        configureDlg.hideEvent.subscribe(function () {
          $('#dlg').removeClass('SuiteP-configureDashlet');
        });

        fillInConfigureDiv = function (data) {
          ajaxStatus.hideStatus();
          try {
            SUGAR.util.globalEval(data.responseText);
          }
          catch (e) {
            result = [];
            result['header'] = 'error';
            result['body'] = 'There was an error handling this request.';
          }
          configureDlg.setHeader(result['header']);
          configureDlg.setBody(result['body']);
          var listeners = new YAHOO.util.KeyListener(document, {keys: 27}, {
            fn: function () {
              this.hide();
            }, scope: configureDlg, correctScope: true
          });
          configureDlg.cfg.queueProperty("keylisteners", listeners);

          configureDlg.render(document.body);
          configureDlg.show();
          $('#dlg').addClass('SuiteP-configureDashlet');
          configureDlg.configFixedCenter(null, false);
          SUGAR.util.evalScript(result['body']);


          // animate to position
          $('html, body').animate({
            scrollTop: newTop
          });
          $('#dlg').animate({
            top: (newTop) + 'px'
          });

        };

        SUGAR.mySugar.configureDashletId = id; // save the id of the dashlet being configured
        var cObj = YAHOO.util.Connect.asyncRequest('GET', 'index.php?to_pdf=1&module=' + module + '&action=DynamicAction&DynamicAction=configureDashlet&id=' + id,
          {success: fillInConfigureDiv, failure: fillInConfigureDiv}, null);


      },


      /** returns dashlets contents
       * if url is defined, dashlet will be retrieve with it, otherwise use default url
       *
       * @param string id id of the dashlet to refresh
       * @param string url url to be used
       * @param function callback callback function after refresh
       * @param bool dynamic does the script load dynamic javascript, set to true if you user needs to refresh the dashlet after load
       */
      retrieveDashlet: function (id, url, callback, dynamic, pageReload, pageTabElement) {
        var _pageReload = typeof pageReload == 'undefined' ? false : pageReload;
        var _pageTabElement = typeof pageTabElement == 'undefined' || pageTabElement.length == 0 ? false : pageTabElement;
        if (!_pageTabElement && SUGAR.mySugar.currentDashlet && $('#' + SUGAR.mySugar.currentDashlet.id).closest('.tab-pane').length > 0) {
          _pageTabElement = $('#' + SUGAR.mySugar.currentDashlet.id).closest('.tab-pane');
        }

        ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING'));

        if (!url) {
          url = 'index.php?action=DynamicAction&DynamicAction=displayDashlet&session_commit=1&module=' + module + '&to_pdf=1&id=' + id;
          is_chart_dashlet = false;
        }
        else if (url == 'predefined_chart') {
          url = 'index.php?action=DynamicAction&DynamicAction=displayDashlet&session_commit=1&module=' + module + '&to_pdf=1&id=' + id;
          scriptUrl = 'index.php?action=DynamicAction&DynamicAction=getPredefinedChartScript&session_commit=1&module=' + module + '&to_pdf=1&id=' + id;
          is_chart_dashlet = true;
        }


        if (dynamic) {
          url += '&dynamic=true';
        }
        SUGAR.mySugar.currentDashlet = document.getElementById('dashlet_entire_' + id);
        $.ajax({"method": "GET", "url": url}).done(function (data, textStatus, jqXHR) {
          var updateDashlet = null;
          if ($(data).find('#dashlet_entire_' + id).length == 0) {
            // Suite7 & SuiteR
            updateDashlet = $(data).find('.bd-center').html();
          } else {
            // SuiteP
            updateDashlet = $(data).find('#dashlet_entire_' + id + ' .bd-center').html();
          }


          $('#dashlet_entire_' + id)
            .find('.bd-center')
            .html(updateDashlet);

          ajaxStatus.hideStatus();
        });

        $('#dashlet_header_' + SUGAR.mySugar.configureDashletId).load(url + ' #dashlet_header_' + SUGAR.mySugar.configureDashletId);

        return false;
      },

      // for the display columns widget
      setChooser: function () {
        var displayColumnsDef = [];
        var hideTabsDef = [];

        var left_td = document.getElementById('display_tabs_td');
        var right_td = document.getElementById('hide_tabs_td');

        var displayTabs = left_td.getElementsByTagName('select')[0];
        var hideTabs = right_td.getElementsByTagName('select')[0];

        for (i = 0; i < displayTabs.options.length; i++) {
          displayColumnsDef.push(displayTabs.options[i].value);
        }

        if (typeof hideTabs != 'undefined') {
          for (i = 0; i < hideTabs.options.length; i++) {
            hideTabsDef.push(hideTabs.options[i].value);
          }
        }

        document.getElementById('displayColumnsDef').value = displayColumnsDef.join('|');
        document.getElementById('hideTabsDef').value = hideTabsDef.join('|');
      },

      deleteDashlet: function (id) {
        if (confirm(SUGAR.language.get('app_strings', 'LBL_REMOVE_DASHLET_CONFIRM'))) {
          ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_REMOVING_DASHLET'));

          del = function () {
            var success = function (data) {
              dashlet = document.getElementById('dashlet_' + id);
              dashlet.parentNode.removeChild(dashlet);
              ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_REMOVED_DASHLET'));
              window.setTimeout('ajaxStatus.hideStatus()', 2000);
            };


            var cObj = YAHOO.util.Connect.asyncRequest('GET', 'index.php?to_pdf=1&module=' + module + '&action=DynamicAction&DynamicAction=deleteDashlet&activePage=' + activeTab + '&id=' + id,
              {success: success, failure: success}, null);
          };

          var anim = new YAHOO.util.Anim('dashlet_entire_' + id, {height: {to: 1}}, .5);
          anim.onComplete.subscribe(del);
          document.getElementById('dashlet_entire_' + id).style.overflow = 'hidden';
          anim.animate();

          return false;
        }
        return false;
      },


      addDashlet: function (id, type, type_module, pageNum, pageTabElement) {

        var _pageNum = typeof pageNum == 'undefined' ? false : pageNum;
        var _pageTabElement = typeof pageTabElement == 'undefined' ? false : pageTabElement;

        ajaxStatus.hideStatus();
        columns = SUGAR.mySugar.getLayout();

        var num_dashlets = columns[0].length;
        if (typeof columns[1] == undefined) {
          num_dashlets = num_dashlets + columns[1].length;
        }

        if ((num_dashlets) >= SUGAR.mySugar.maxCount) {
          alert(SUGAR.language.get('app_strings', 'LBL_MAX_DASHLETS_REACHED'));
          return;
        }
        ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_ADDING_DASHLET'));

        $.ajax({
          "method": "POST",
          "url": "index.php?module=" + module + "&action=DynamicAction&DynamicAction=addDashlet&activeTab=" + activeTab + "&id=" + id + "&to_pdf=1",
          "data": {
            'type': type,
            'type_module': type_module
          }
        }).done(function (dashlet_id) {
          colZero = document.getElementById('col_' + activeTab + '_0');
          newDashlet = document.createElement('li'); // build the list item
          newDashlet.id = 'dashlet_' + dashlet_id;
          newDashlet.className = 'noBullet active';
          // hide it first, but append to getRegion
          newDashlet.innerHTML = '<div style="position: absolute; top: -1000px; overflow: hidden;" id="dashlet_entire_' + dashlet_id + '"></div>';

          colZero.insertBefore(newDashlet, colZero.firstChild); // insert it into the first column

          var url = null;
          if (type == 'module' || type == 'web') {
            url = null;
            type = 'module';
          }
          else if (type == 'predefined_chart') {
            url = 'predefined_chart';
            type = 'predefined_chart';
          }
          else if (type == 'chart') {
            url = 'chart';
            type = 'chart';
          }

          var _pageReload = typeof pageReload == 'undefined' ? false : pageReload;
          var _pageTabElement = typeof pageTabElement == 'undefined' || pageTabElement.length == 0 ? false : pageTabElement;
          if (!_pageTabElement && SUGAR.mySugar.currentDashlet && $('#' + SUGAR.mySugar.currentDashlet.id).closest('.tab-pane').length > 0) {
            _pageTabElement = $('#' + SUGAR.mySugar.currentDashlet.id).closest('.tab-pane');
          }

          ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING'));

          if (url == null) {
            url = 'index.php?action=DynamicAction&DynamicAction=displayDashlet&session_commit=1&module=' + module + '&to_pdf=1&id=' + dashlet_id;
            is_chart_dashlet = false;
          }
          else if (url == 'predefined_chart') {
            url = 'index.php?action=DynamicAction&DynamicAction=displayDashlet&session_commit=1&module=' + module + '&to_pdf=1&id=' + dashlet_id;
            scriptUrl = 'index.php?action=DynamicAction&DynamicAction=getPredefinedChartScript&session_commit=1&module=' + module + '&to_pdf=1&id=' + dashlet_id;
            is_chart_dashlet = true;
          }


          if (typeof dynamic !== "undefined") {
            url += '&dynamic=true';
          }

          SUGAR.mySugar.currentDashlet = document.getElementById('dashlet_entire_' + dashlet_id);

          $.when($.ajax({"method": "GET", "url": url})).then(function (data, textStatus, jqXHR) {
            ajaxStatus.hideStatus();
            dashletEntire = document.getElementById('dashlet_entire_' + dashlet_id);
            dd = new ygDDList('dashlet_' + dashlet_id); // make it draggable
            dd.setHandleElId('dashlet_header_' + dashlet_id);
            // Bug #47097 : Dashlets not displayed after moving them
            // add new property to save real id of dashlet, it needs to have ability reload dashlet by id
            dd.dashletID = dashlet_id;
            // dd.onMouseDown = SUGAR.mySugar.onDrag;
            // dd.onDragDrop = SUGAR.mySugar.onDrop;

            ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_ADDED_DASHLET'));
            dashletRegion = YAHOO.util.Dom.getRegion(dashletEntire);
            dashletEntire.style.position = 'relative';
            dashletEntire.style.height = '1px';
            dashletEntire.style.top = '0px';
            dashletEntire.className = 'dashletPanel';


            var anim = new YAHOO.util.Anim('dashlet_entire_' + dashlet_id, {height: {to: dashletRegion.bottom - dashletRegion.top}}, .5);
            anim.onComplete.subscribe(function () {
              document.getElementById('dashlet_entire_' + dashlet_id).style.height = '100%';
            });
            anim.animate();

            newLayout = SUGAR.mySugar.getLayout(true);
            SUGAR.mySugar.saveLayout(newLayout);
            retrievePage(activePage);
          });
        });

        return false;
      },

      retrieveCurrentPage: function (pageNum) {
        if (typeof pageNum == 'undefined' && $('ul.nav.nav-tabs.nav-dashboard li.active a').length > 0) {
          var pageNum = parseInt($('ul.nav.nav-tabs.nav-dashboard li.active a').first().attr('id').substring(3));
        }
        else {
          pageNum = 0;
        }
        retrievePage(pageNum);
      },

      showDashletsDialog: function () {
        columns = SUGAR.mySugar.getLayout();

        if (this.closeDashletsDialogTimer != null) {
          window.clearTimeout(this.closeDashletsDialogTimer);
        }

        var num_dashlets = 0;
        var i = 0;
        for (i = 0; i < 3; i++) {
          if (typeof columns[i] != "undefined") {
            num_dashlets = num_dashlets + columns[i].length;
          }
        }

        if ((num_dashlets) >= SUGAR.mySugar.maxCount) {
          alert(SUGAR.language.get('app_strings', 'LBL_MAX_DASHLETS_REACHED'));
          return;
        }
        ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_LOADING'));

        var success = function (data) {
          SUGAR.util.globalEval(data.responseText);

          if ($('*[id=dashletsList]').length > 1) {
            dashletsListDiv = $('*[id=dashletsList].modal-body');
          }
          else {
            dashletsListDiv = $('#dashletsList');
          }

          dashletsListDiv.html(response['html']);

          $('#dashletsList').html(response['html']);


          document.getElementById('dashletsDialog_c').style.display = '';
          SUGAR.mySugar.dashletsDialog.show();

          SUGAR.util.globalEval(response['script']);
          ajaxStatus.hideStatus();
        };

        var cObj = YAHOO.util.Connect.asyncRequest('GET', 'index.php?to_pdf=true&module=' + module + '&action=DynamicAction&DynamicAction=dashletsDialog', {
          success: success,
          failure: success
        });
        return false;
      },

      closeDashletsDialog: function () {
        SUGAR.mySugar.dashletsDialog.hide();
        if (this.closeDashletsDialogTimer != null) {
          window.clearTimeout(this.closeDashletsDialogTimer);
        }
        this.closeDashletsDialogTimer = window.setTimeout("document.getElementById('dashletsDialog_c').style.display = 'none';", 2000);
      },

      toggleDashletCategories: function (category) {
        document.getElementById('search_string').value = '';
        document.getElementById('searchResults').innerHTML = '';

        var moduleTab = document.getElementById('moduleCategory');
        var moduleTabAnchor = document.getElementById('moduleCategoryAnchor');
        var moduleListDiv = document.getElementById('moduleDashlets');

        var chartTab = document.getElementById('chartCategory');
        var chartTabAnchor = document.getElementById('chartCategoryAnchor');
        var chartListDiv = document.getElementById('chartDashlets');

        var toolsTab = document.getElementById('toolsCategory');
        var toolsTabAnchor = document.getElementById('toolsCategoryAnchor');
        var toolsListDiv = document.getElementById('toolsDashlets');

        var webTab = document.getElementById('webCategory');
        var webTabAnchor = document.getElementById('webCategoryAnchor');
        var webListDiv = document.getElementById('webDashlets');

        switch (category) {
          case 'module':
            moduleTab.className = 'active';
            moduleTabAnchor.className = 'current';
            moduleListDiv.style.display = '';

            chartTab.className = '';
            chartTabAnchor.className = '';
            chartListDiv.style.display = 'none';

            toolsTab.className = '';
            toolsTabAnchor.className = '';
            toolsListDiv.style.display = 'none';

            webTab.className = '';
            webTabAnchor.className = '';
            webListDiv.style.display = 'none';

            break;
          case 'chart':
            moduleTab.className = '';
            moduleTabAnchor.className = '';
            moduleListDiv.style.display = 'none';

            chartTab.className = 'active';
            chartTabAnchor.className = 'current';
            chartListDiv.style.display = '';

            toolsTab.className = '';
            toolsTabAnchor.className = '';
            toolsListDiv.style.display = 'none';

            webTab.className = '';
            webTabAnchor.className = '';
            webListDiv.style.display = 'none';

            break;
          case 'tools':
            moduleTab.className = '';
            moduleTabAnchor.className = '';
            moduleListDiv.style.display = 'none';

            chartTab.className = '';
            chartTabAnchor.className = '';
            chartListDiv.style.display = 'none';

            toolsTab.className = 'active';
            toolsTabAnchor.className = 'current';
            toolsListDiv.style.display = '';

            webTab.className = '';
            webTabAnchor.className = '';
            webListDiv.style.display = 'none';

            break;
          case 'web':
            moduleTab.className = '';
            moduleTabAnchor.className = '';
            moduleListDiv.style.display = 'none';

            chartTab.className = '';
            chartTabAnchor.className = '';
            chartListDiv.style.display = 'none';

            toolsTab.className = '';
            toolsTabAnchor.className = '';
            toolsListDiv.style.display = 'none';

            webTab.className = 'active';
            webTabAnchor.className = 'current';
            webListDiv.style.display = '';

            break;
          default:
            break;
        }

        document.getElementById('search_category').value = category;
      },


      searchDashlets: function (searchStr, searchCategory) {
        var moduleTab = document.getElementById('moduleCategory');
        var moduleTabAnchor = document.getElementById('moduleCategoryAnchor');
        var moduleListDiv = document.getElementById('moduleDashlets');

        var chartTab = document.getElementById('chartCategory');
        var chartTabAnchor = document.getElementById('chartCategoryAnchor');
        var chartListDiv = document.getElementById('chartDashlets');

        var toolsTab = document.getElementById('toolsCategory');
        var toolsTabAnchor = document.getElementById('toolsCategoryAnchor');
        var toolsListDiv = document.getElementById('toolsDashlets');

        if (moduleTab != null && chartTab != null && toolsTab != null) {
          moduleListDiv.style.display = 'none';
          chartListDiv.style.display = 'none';
          toolsListDiv.style.display = 'none';

        }
        // dashboards case, where there are no tabs
        else {
          chartListDiv.style.display = 'none';
        }

        var searchResultsDiv = document.getElementById('searchResults');
        searchResultsDiv.style.display = '';

        var success = function (data) {
          SUGAR.util.globalEval(data.responseText);

          searchResultsDiv.innerHTML = response['html'];
        };

        var cObj = YAHOO.util.Connect.asyncRequest('GET', 'index.php?to_pdf=true&module=' + module + '&action=DynamicAction&DynamicAction=searchDashlets&search=' + searchStr + '&category=' + searchCategory, {
          success: success,
          failure: success
        });
        return false;
      },

      collapseList: function (chartList) {
        document.getElementById(chartList + 'List').style.display = 'none';
        document.getElementById(chartList + 'ExpCol').innerHTML = '<a href="javascript:void(0)" onClick="javascript:SUGAR.mySugar.expandList(\'' + chartList + '\');"><img border="0" src="' + SUGAR.themes.image_server + 'index.php?entryPoint=getImage&themeName=' + SUGAR.themes.theme_name + '&imageName=advanced_search.gif" align="absmiddle" />';
      },

      expandList: function (chartList) {
        document.getElementById(chartList + 'List').style.display = '';
        document.getElementById(chartList + 'ExpCol').innerHTML = '<a href="javascript:void(0)" onClick="javascript:SUGAR.mySugar.collapseList(\'' + chartList + '\');"><img border="0" src="' + SUGAR.themes.image_server + 'index.php?entryPoint=getImage&themeName=' + SUGAR.themes.theme_name + '&imageName=basic_search.gif" align="absmiddle" />';
      },

      collapseReportList: function (reportChartList) {
        document.getElementById(reportChartList + 'ReportsChartDashletsList').style.display = 'none';
        document.getElementById(reportChartList + 'ExpCol').innerHTML = '<a href="javascript:void(0)" onClick="javascript:SUGAR.mySugar.expandReportList(\'' + reportChartList + '\');"><img border="0" src="' + SUGAR.themes.image_server + 'index.php?entryPoint=getImage&themeName=' + SUGAR.themes.theme_name + '&imageName=ProjectPlus.gif" align="absmiddle" />';
      },

      expandReportList: function (reportChartList) {
        document.getElementById(reportChartList + 'ReportsChartDashletsList').style.display = '';
        document.getElementById(reportChartList + 'ExpCol').innerHTML = '<a href="javascript:void(0)" onClick="javascript:SUGAR.mySugar.collapseReportList(\'' + reportChartList + '\');"><img border="0" src="' + SUGAR.themes.image_server + 'index.php?entryPoint=getImage&themeName=' + SUGAR.themes.theme_name + '&imageName=ProjectMinus.gif" align="absmiddle" />';
      },

      clearSearch: function () {
        document.getElementById('search_string').value = '';

        var moduleTab = document.getElementById('moduleCategory');
        var moduleTabAnchor = document.getElementById('moduleCategoryAnchor');
        var moduleListDiv = document.getElementById('moduleDashlets');

        document.getElementById('searchResults').innerHTML = '';
        if (moduleTab != null) {
          SUGAR.mySugar.toggleDashletCategories('module');
        }
        else {
          document.getElementById('searchResults').style.display = 'none';
          document.getElementById('chartDashlets').style.display = '';
        }
      },

      doneAddDashlets: function () {
        SUGAR.mySugar.dashletsDialog.hide();
        return false;
      },


      refreshPageForAnalytics: function () {
        window.location.reload();
        return false;
      },


      renderDashletsDialog: function () {
        var minHeight = 120;
        var maxHeight = 520;
        var minMargin = 16;

        // adjust dialog height according to current page height
        var pageHeight = document.documentElement.clientHeight;
        var height = Math.min(maxHeight, pageHeight - minMargin * 2);
        height = Math.max(height, minHeight);

        SUGAR.mySugar.dashletsDialog = new YAHOO.widget.Dialog("dashletsDialog",
          {
            width: "480px",
            height: height + "px",
            fixedcenter: true,
            draggable: false,
            visible: false,
            // effect:[{effect:YAHOO.widget.ContainerEffect.SLIDETOP, duration:0.5},{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.5}],
            modal: true,
            close: false
          });

        var listeners = new YAHOO.util.KeyListener(document, {keys: 27}, {
          fn: function () {
            SUGAR.mySugar.closeDashletsDialog();
          }
        });
        SUGAR.mySugar.dashletsDialog.cfg.queueProperty("keylisteners", listeners);

        document.getElementById('dashletsDialog').style.display = '';
        SUGAR.mySugar.dashletsDialog.render();
        document.getElementById('dashletsDialog_c').style.display = 'none';
      }
    };
  }();
};