/**
 * Menu class, Create and manage menu panel
 * @Author Hamidreza Bidgoli
 */
(function(){
    BMS.Menu = {
        Model : {
            memberItems : [],
            container   : "memberContainer"
        },

        View : {
            showMenu : function(){
                $C._getMenuValues();
            }
        },

        Controller : {
           _getMenuValues : function(type){
              type=2;
               var query_string = "?c=ghandler&panel=menu&action=menubar&page=getmenubar&type="+type;
               var requestPath = BMS.Config.$basepath + query_string;
               YAHOO.util.Connect.asyncRequest('Get', requestPath, $C._callbackGetMenuValues);
           },

           _handleSuccess : function(response){
               var resLen = response.length;
               for(var i=0; i < resLen; i++){
                   var memberItem = {
                                     "link"    : response[i].SMU_LINK,
                                     "id"      : response[i].SMU_ID,
                                     "title"   : response[i].SMU_TITLE,
                                     "type"    : response[i].SMU_TYPE,
                                     "submenu" : response[i].submenu
                                    }
                   $M.memberItems.push(memberItem);
               }
               $C._createMemberMenu();
           },

           _handleFailure : function(o){

           },

           _callbackGetMenuValues : {
               success: function(o){$C._handleSuccess(YAHOO.lang.JSON.parse(o.responseText))},
               failure: function(o){$C._handleFailure(o)} 
           },

           _createMemberMenu : function(){
               var memberItems = $M.memberItems;
               var memLen = memberItems.length;
               var fragment = document.createDocumentFragment();
               for(var i=0; i<memLen; i++){
                   var li = $ce("li");
                   YAHOO.util.Dom.addClass(li, "yuimenuitem");
                   var a = $ce("a");
                   YAHOO.util.Dom.addClass(a, "yuimenuitemlabel");
                   a.href = $C._getRealUrl(memberItems[i].link);
                   var title = $ct(memberItems[i].title);
                   a.appendChild(title);
                   li.appendChild(a);
                   fragment.appendChild(li);
               }
               $get($M.container).appendChild(fragment);
               $C._createSubMembers();
           },

           _createSubMembers : function(){
                /*
                     Initialize and render the Menu when its elements are ready
                     to be scripted.
                */
                YAHOO.util.Event.onContentReady("mainMenu", function () {

                    /*
                         Instantiate a Menu:  The first argument passed to the
                         constructor is the id of the element in the page
                         representing the Menu; the second is an object literal
                         of configuration properties.
                    */
                    var oMenu = new YAHOO.widget.Menu("mainMenu", {
                                                            position: "static",
                                                            hidedelay:  750,
                                                            lazyload: true,
                                                            submenualignment : ["tr","tl"],
                                                            effect: {
                                                                effect: YAHOO.widget.ContainerEffect.FADE,
                                                                duration: 0.25
                                                            }});


                    /*
                         Define an array of object literals, each containing
                         the data necessary to create a submenu.
                    */

                    var aSubmenuData = $C._getSubMemberItems();

                    // Subscribe to the Menu instance's "beforeRender" event
                    oMenu.subscribe("beforeRender", function () {
                        if (this.getRoot() == this){
                            for(var i=0; i<aSubmenuData.length; i++){
                                if(aSubmenuData[i].itemdata.length > 0){
                                    this.getItem(i).cfg.setProperty("submenu", aSubmenuData[i]);
                                }
                            }
                        }
                    });

                    /*
                         Call the "render" method with no arguments since the
                         markup for this Menu instance is already exists in the page.
                    */
                    oMenu.render();
                });
           },

           _getSubMemberItems : function(){
                var memberItems = $M.memberItems;
                var memLen = memberItems.length;
                var subMembers = [];
                for(var i=0; i<memLen; i++){
                    if(memberItems[i].submenu != "null"){
                        var submenu  = YAHOO.lang.JSON.parse(memberItems[i].submenu);
                        var item = {
                                    id : memberItems[i].title,
                                    itemdata : (function(){
                                                  var itemdata = [];
                                                  subLen = submenu.length;
                                                  for(var j=0; j<subLen; j++){
                                                      var value = {text: submenu[j].SMU_TITLE, url: $C._getRealUrl(submenu[j].SMU_LINK)};
                                                      itemdata.push(value);
                                                  }
                                                  return itemdata;
                                                })()
                                    };
                    }
                    else{
                        var item = {
                                    id : memberItems[i].title,
                                    itemdata : []
                                    };
                    }
                    subMembers.push(item);
                }
                return subMembers;
                /*
                var subMembers =  [?
                            {
                                id: "communication",
                                itemdata: [
                                    { text: "360", url: "http://360.yahoo.com" },
                                    { text: "Alerts", url: "http://alerts.yahoo.com" },
                                    { text: "Avatars", url: "http://avatars.yahoo.com" },
                                    { text: "Groups", url: "http://groups.yahoo.com " },
                                    { text: "Internet Access", url: "http://promo.yahoo.com/broadband" },
                                    {
                                        text: "PIM",
                                        submenu: {
                                                    id: "pim",
                                                    itemdata: [
                                                        { text: "Yahoo! Mail", url: "http://mail.yahoo.com" },
                                                        { text: "Yahoo! Address Book", url: "http://addressbook.yahoo.com" },
                                                        { text: "Yahoo! Calendar",  url: "http://calendar.yahoo.com" },
                                                        { text: "Yahoo! Notepad", url: "http://notepad.yahoo.com" }
                                                    ]
                                                }

                                    },
                                    { text: "Member Directory", url: "http://members.yahoo.com" },
                                    { text: "Messenger", url: "http://messenger.yahoo.com" },
                                    { text: "Mobile", url: "http://mobile.yahoo.com" },
                                    { text: "Flickr Photo Sharing", url: "http://www.flickr.com" },
                                ]
                            }*/
            },

            _getRealUrl : function(url){
                var condition = url.substr(0, 1);
                switch(condition){
                   case "#":
                       url = "#";
                       break

                   case "@":
                       url = url.substr(1, url.length);
                       break;

                   default:
                       url = BMS.Config.$basepath + "?" + url;
                       break;
               }
               return url;
            }
        }
    }
    var $THIS = BMS.Menu;
    var $M    = $THIS.Model;
    var $V    = $THIS.View;
    var $C    = $THIS.Controller;
    YAHOO.util.Event.onAvailable($M.container,function(){
        $V.showMenu();
    });
})();
