function MenuOfGrids(mediator, containerId, id, button, onChangeFunc) {
    this.mediator = mediator;
    this.containerId = containerId;
    this.button = button;
    this.onChangeFunc = onChangeFunc;
    this.GRID_MENU_ID = id;
    this.menu = null;

    /**
    * Sets a json data - list of grids
    *
    * Example: { gridList: [{ id: "Custom_A", name: "Custom Grid AnnReturn >= 50", selected: true }, 
    *                       { id: "C2_Stocks", name: "Stocks", selected: false }] }
    *
    * @method jsonData
    * @param json object
    */
    this.setJsonDescription = function(value) {
        this.jsonListDescription = value;
    },

    /**
    * Returns jsonListDescription property
    *
    * @method getJsonDescription
    */
    this.getJsonDescription = function(value) {
        return this.jsonListDescription;
    },

    /**
    *
    *
    * @method createMenu 
    */
     this.createMenu = function() {
         var container = YAHOO.util.Dom.get(this.containerId);
         var menu = YAHOO.util.Dom.get(this.GRID_MENU_ID);
         if (YAHOO.lang.isObject(menu)) {
             YAHOO.util.Event.purgeElement(menu, true);
             menu.parentNode.removeChild(menu);
         }

         this.menu = new YAHOO.widget.Menu(this.GRID_MENU_ID);
         //this.menu.GROUP_TITLE_TAG_NAME = "H6";
         this.menu.render(container);
         return this.menu;
     },

     this.addGridSet = function(jsonListDescription) {
         var newGroupNumber = this.menu.getItemGroups().length;
         this.menu.setItemGroupTitle(jsonListDescription.menuTitle, newGroupNumber);

         var gridListArray = jsonListDescription.gridList;
         for (var i = 0; i < gridListArray.length; i++) {
             var menuItemObject = {};
             menuItemObject.id = gridListArray[i].id;
             menuItemObject.text = gridListArray[i].name;
             var valueObject = gridListArray[i];
             valueObject.mediator = this.mediator;
             menuItemObject.value = valueObject;
             menuItemObject.onclick = { fn: this.onChangeFunc };
             var menuItem = this.menu.addItem(menuItemObject, newGroupNumber);
             if (gridListArray[i].selected) {
                 this.button.set("selectedMenuItem", menuItem);
                 this.menu.activeItem = menuItem;
             }
         }
     },

     this.createMenuGroup = function(jsonListDescription) {
         this.menu.clearContent();
         var gridSets = jsonListDescription.setofsets;
         for (var i = 0; i < gridSets.length; i++) {
             this.addGridSet(gridSets[i]);
         }
         this.menu.render();
     },

     this.findGridItem = function(gridId) {
         var items = this.menu.getItems();
         for (var i = 0; i < items.length; i++) {
             if (items[i].value.id == gridId)
             {
             return items[i];
             }
         }
         return null;
     },
     
     this.setActiveGridItem = function(gridId) {
         var item = this.findGridItem(gridId);
         if (item)
         {
           this.menu.activeItem = item;
         }
     }

}
