function Mediator() {
    this.setWidgets = function(gridController, instrumentSelector, systemNameInput, gridsMenuController, gridsMenuButton, saveGridButton, deleteGridButton, deleteDialog, columnShowHideDialog) {
        this.gridController = gridController;
        this.instrumentSelector = instrumentSelector;
        this.systemNameInput = systemNameInput;
        this.gridsMenuController = gridsMenuController;
        this.gridsMenuButton = gridsMenuButton;
        this.saveGridButton = saveGridButton;
        this.deleteGridButton = deleteGridButton;
        this.deleteDialog = deleteDialog;
        this.columnShowHideDialog = columnShowHideDialog;
        this.gridsMenuButton.on("selectedMenuItemChange", this.onSelectedMenuItemChange, this, true);
    },

    this.selectedMenuItemChange = function(button, menuItem) {
        button.set("label", ("<span class=\"yui-button-label\">" + menuItem.cfg.getProperty("text") + "</span>"));
        this.widgetChanged(globals.GRIDS_MENU_ITEM, menuItem);
    },

    this.onSelectedMenuItemChange = function(event,o) {
        var menuItem = event.newValue;
        this.selectedMenuItemChange(this.gridsMenuButton, menuItem);
    },

    this.widgetChanged = function(id, widget) {
        switch (id) {
            case globals.SORT_GRID:
            case globals.SEARCH_BY_NAME:
            case globals.GRID_CONTROLLER:
            case globals.INSTRUMET_SELECTOR:
                this.changeMenuButtonLabel();
                break;
            case globals.GRIDS_MENU_ITEM:
                this.deleteButtonEnabled(widget);
                this.clearSearchByName();
                break;
        }
    },

    this.changeMenuButtonLabel = function() {
        var menu = this.gridsMenuButton.getMenu();
        var activeItem = menu.activeItem;
        if (activeItem) {
            var label = activeItem.cfg.getProperty("text");
            // Change css class of button
            this.gridsMenuButton.set("label", "<span class=\"modifiedGrid\">" + label + "</span>");
            this.deleteButtonEnabled(activeItem);
        }
    },

   this.deleteButtonEnabled = function(menuItem) {
       this.deleteGridButton.set('disabled', menuItem.value.isStandardGrid, true);
       if (menuItem.value.isStandardGrid) {
           YAHOO.util.Event.removeListener(globals.DELETE_GRID_BUTTON, "click", this.deleteDialog.show);
       }
       else {
           YAHOO.util.Event.addListener(globals.DELETE_GRID_BUTTON, "click", this.deleteDialog.show, this.deleteDialog, true);
       }
   },

   this.clearSearchByName = function() {
       var searchByNameInputField = YAHOO.util.Dom.get(globals.SEARCH_BY_NAME);
       if (searchByNameInputField) {
           searchByNameInputField.value = '';
       }
   },

   this.fillSearchByName = function(value) {
       var searchByNameInputField = YAHOO.util.Dom.get(globals.SEARCH_BY_NAME);
       if (searchByNameInputField) {
           searchByNameInputField.value = value;
       }
   },

   this.setPageState = function(pageState) {
       this.fillSearchByName(pageState.systemNameFiltervalue);
       this.gridsMenuController.setActiveGridItem(pageState.gridDescr.id);
       if (pageState.gridDescr.modified) {
           this.changeMenuButtonLabel();
       }
       else {
           var menuItem = this.gridsMenuController.findGridItem(pageState.gridDescr.id);
           this.selectedMenuItemChange(this.gridsMenuButton, menuItem);
       }
   },

   this.backfire = function(backFire) {
       if (backFire.filter.column.toLowerCase() == "systemname") {
           this.fillSearchByName(backFire.filter.value);
       }
       this.gridsMenuController.setActiveGridItem(backFire.gridId);
       this.changeMenuButtonLabel();
   },

   this.showWaitingForDataState = function() {
       YAHOO.util.Dom.addClass(YAHOO.util.Dom.get(globals.DATA_TABLE_CONTAINER), globals.WAIT_FOR_DATA_CLASS_NAME);
       this.gridController.dataTable.showTableMessage();
   },

   this.hideWaitingForDataState = function() {
       YAHOO.util.Dom.removeClass(YAHOO.util.Dom.get(globals.DATA_TABLE_CONTAINER), globals.WAIT_FOR_DATA_CLASS_NAME);
       if (this.gridController.dataTable) {
           this.gridController.dataTable.hideTableMessage();
       }
   },

   this.setActiveGridMenuItem = function(gridId) {
       this.gridsMenuController.setActiveGridItem(gridId);
   }
   
  
}