﻿
/*
TODO: Fix subItemsMinHeight, subItemsMinWidth: Note: if MinWidth is empty use root width as the minimun.
TODO: Replace subItemsMinHeight, subItemsMinWidth to popOutMin[Width/Height]

*/
Type.registerNamespace('eTag');

eTag.MenuItem = function() {
    eTag.MenuItem.initializeBase(this);
    this._menu=null;
    this._parent=null;
    this._parentItem=null;
    this._id=null;
    this._cssClass=null;
    this._hoverCssClass=null;
    this._activeCssClass=null;
    this._tag=null;
    this._text=null;
    this._visible=null;
    this._persist=false;
    this._items=null;
    this._itemType=0;//1=group,2=item
    this._elementId=null;
    this._element=null;
    this._subItems=null;
    this._itemsCssClass=null;
    this._itemsWithIcons=false;
    this._leftImageUrl=null;
    this._leftImageWidth=null;
    this._rightImageUrl=null;
    this._rightImageWidth=null;
    
    this._checked=false;
    this._enabled=null;
    this._iconUrl=null;
    this._navigateUrl=null;
    this._target='_self';
    this._popOutImageUrl=null;
    this._radioCheck=false;
    this._toolTip=null;
    this._subItemsMinHeight=null;
    this._subItemsMinWidth=null;
    
    
    this._clickDelegate=Function.createDelegate(this, this._click);
    this._mouseOverDelegate=Function.createDelegate(this, this._mouseOver);
    this._mouseOutDelegate=Function.createDelegate(this, this._mouseOut);
    
    
    this._container=null;
        this._scrollTop=null;
        this._itemsCtn=null;
        this._iiw=0;
        this._itw=0;
        this._ipow=0;
        this._iw=0;
            this._iconsCtn=null;
            this._textCtn=null;
            this._popOutCtn=null;
        
    
    
}
eTag.MenuItem.prototype = {
    _mouseOver: function(sender,e){
        this._hideSiblingItems();
        if(this._parentItem){
            this._parentItem._activate();
        }
        this.get_element().className=this.get_hoverCssClass();
        if(this._popOutCtn) this._popOutCtn.style.backgroundImage="url('" + this._menu.get_popOutHoverImageUrl() + "')";  
        if(!this._menu._expandOnClick) this.showItems();
        this.raiseEvent('MouseOver',{args:sender}); 
    }
    ,_hideSiblingItems: function(){
        var il = null;
        if(this._itemType==3) il=this._menu.get_items().get_items();
        else il = this._parentItem.get_items().get_items();
        
        for(var i = 0; i < il.length; i++){
            if(this!=il[i]) il[i]._hideItems();
        }
    }
    ,_activate: function(){
        this.get_element().className=this.get_activeCssClass();
        
        if(this._popOutCtn) this._popOutCtn.style.backgroundImage="url('" + this._menu.get_popOutActiveImageUrl() + "')";
        
        //_hideItems
        this.showItems()
        if(this._parentItem) this._parentItem._activate();
    }
    ,_mouseOut: function(sender,e){
        this.get_element().className=this.get_cssClass();
        if(this._popOutCtn) this._popOutCtn.style.backgroundImage="url('" + this._menu.get_popOutImageUrl() + "')";
        this.raiseEvent('MouseOut',{args:sender}); 
    }
    ,_click: function(sender,e){
        this.raiseEvent('Click',{args:sender}); 
        if(this._navigateUrl!=null && this._navigateUrl!=''){
            eTag.$w.navigateToUrl(this._navigateUrl,this._target,null,null)
        }
    }
    ,get_rootItem: function(){
        if(this._parentItem) return this._parentItem.get_rootItem();
        else return this;
    }
    ,get_menu: function(){return this._menu}
    ,hasChildren: function(){return this.get_items().get_items().length > 0;}
    ,isChild: function(item){
        var il = this.get_items().get_items();
        for(var i = 0; i < il.length; i++){
            if(item==il[i]) return true;
            if(il[i].isChild(item)) return true;
        }
        return false;
    }
    ,$doc: function(){
        if(this._menu) return this._menu.$doc();
        return null;
    }
    ,showItems: function(){
        if(!this.hasChildren()) return;
        eTag.$d.setVisible(this._getContainer(),true);
        
        //render items.
        this._renderItems();
        var ori=this._menu._orientation;
        
        switch(this._itemType){
            case 1: // group
                break;
            case 2: // item
                var b = eTag.$d.getBounds(this.get_element(),false,this.$doc());
                var p = {x:b.right,y:b.y};
                eTag.$d.setPosition(this._getContainer(),p,true);
                break;
            case 3: // root
                var b = eTag.$d.getBounds(this.get_element(),false,this.$doc());
                var p = {x:(ori==0?b.x:b.right),y:(ori==0?b.bottom:b.y)};
                eTag.$d.setPosition(this._getContainer(),p,true);
                //if(this._menu._orientation==0)
                break;
        }
        
    }
    ,_hideItems: function(){
        if(this._itemType==1) return;
        eTag.$d.setVisible(this._getContainer(),false);
        var il = this.get_items().get_items();
        for(var i = 0; i < il.length; i++) il[i]._hideItems();
    }
    ,_renderItems: function(){
        if(!this.hasChildren()) return;
        var il = this.get_items().get_items();
        for(var i = 0; i < il.length; i++) il[i].render();
        for(var i = 0; i < il.length; i++){
            eTag.$d.setVisible(il[i]._iconCtn,this._itemsWithIcons);
            eTag.$d.setInnerWidth(il[i]._element,this._iw);
        }
        var _c=this._getContainer();
        if(_c.clientWidth!=_c.scrollWidth) eTag.$d.setInnerWidth(_c,_c.scrollWidth);
        if(_c.clientHeight!=_c.scrollHeight) eTag.$d.setInnerHeight(_c,_c.scrollHeight);
    }
    ,refresh: function(){
        this._element.className=this.get_cssClass();
    }
    ,render: function(){
        if(!this._element){
            if(this._elementId!=null) this._element=$get(this._elementId);
            else if (this._element==null){
                this._element=this.$doc().createElement('DIV');
                this._element.setAttribute('id',this.get_guid() + 'item');
                eTag.$d.setProperties(this._element.style,{overflow:'hidden',whiteSpace:'nowrap', width:'150px'});   
                this._element.className=this.get_cssClass();
                
                switch(this._itemType){
                    case 1: // group
                        if(this._text) this._element.innerHTML=this._text;
                        break;
                    case 2: // item
                        //render icon.
                        this._renderIcon();
                        
                        // render text.
                        this._renderText();
                        
                        //_popOutCtn
                        if(this.hasChildren()){
                            this._popOutCtn=this.$doc().createElement('DIV');
                            this._popOutCtn.setAttribute('id',this.get_guid() + '_popOutCtn');  
                            eTag.$d.setProperties(this._popOutCtn.style,{overflow:'hidden',cssFloat:'right',styleFloat:'right'});  
                            this._popOutCtn.className=this._menu._popOutCssClass;
                            this._element.appendChild(this._popOutCtn);
                            this._popOutCtn.style.backgroundImage="url('" + this._menu.get_popOutImageUrl() + "')";   
                        }
                        
                        break;
                    case 3: // root item
                        break;
                }
                this._parentItem._getItemsCtn().appendChild(this._element);
                
                
                if(this._itemType==1) this._renderItems();
                // get icon container width
                if(this._parentItem._iiw==0) this._parentItem._iiw=eTag.$d.getAbsoluteWidth(this._iconCtn);
                
                // get text container width
                var itw=eTag.$d.getAbsoluteWidth(this._textCtn);
                this._parentItem._itw=this._parentItem._itw>itw?this._parentItem._itw:itw;

                // get Popout container width
                if(this._popOutCtn && this._parentItem._ipow==0){
                    var pow=eTag.$d.getAbsoluteWidth(this._popOutCtn);
                    this._parentItem._ipow=this._parentItem._ipow>pow?this._parentItem._ipow:pow;
                }

                var temp_iw = (!this._iconUrl?0:this._parentItem._iiw) + this._parentItem._itw + this._parentItem._ipow;
                if(temp_iw>this._parentItem._iw) this._parentItem._iw=temp_iw;
                
            } 
            
            eTag.$d.addHandler(this._element, (eTag.$b.ie?"mouseenter":"mouseover"), this._mouseOverDelegate);
            eTag.$d.addHandler(this._element, (eTag.$b.ie?"mouseleave":"mouseout"), this._mouseOutDelegate);
                
            if(this._itemType!=1){
                eTag.$d.addHandler(this._element, 'click', this._clickDelegate);
            }
        }
        return this._element;
    }
    ,get_element: function(){return this._element}



    ,_getContainer: function(){
        if(!this._container) this._iniContainer();
        return this._container;
    }
    ,_getItemsCtn: function(){
        if(!this._container) this._iniContainer();
        return this._itemsCtn;
    }
    ,_iniContainer: function(){
        if(!this._container){
            this._container=this.$doc().createElement('DIV');
            this._container.setAttribute('id',this.get_guid() + '_container');  
            this._container.className=this.get_itemsCssClass();
            
            if(this._itemType==1){
                eTag.$d.setProperties(this._container.style,{overflow:'hidden'});
                this._parentItem._getContainer().appendChild(this._container);
            }else{
                eTag.$d.setProperties(this._container.style,{position:'absolute',overflow:'hidden'});
                this.$doc().body.appendChild(this._container);
            }
             
//            //Top Scroller
//            this._scrollTop=this.$doc().createElement('DIV');
//            this._scrollTop.setAttribute('id',this.get_guid() + '_scrollTop');  
//            this._container.appendChild(this._scrollTop);
            //Items
            this._itemsCtn=this.$doc().createElement('DIV');
            this._itemsCtn.setAttribute('id',this.get_guid() + '_itemsCtn');  
            this._container.appendChild(this._itemsCtn);

//            //Bottom Scroller
//            this._scrollBottom=this.$doc().createElement('DIV');
//            this._scrollBottom.setAttribute('id',this.get_guid() + '_scrollBottom');  
//            this._container.appendChild(this._scrollBottom);
                        

            eTag.$d.addHandler(this._container, (eTag.$b.ie?"mouseenter":"mouseover"), this._mouseOverDelegate);
            eTag.$d.addHandler(this._container, (eTag.$b.ie?"mouseleave":"mouseout"), this._mouseOutDelegate);
        }
    }
    ,get_parent: function(){return this._parent;}
    ,get_parentItem:function(){return this._parentItem}
    ,set_id: function(value){this._id=value;}
    ,get_id: function(){return this._id;}
    ,get_cssClass: function(){
        if(!this._cssClass){
            var _m=this.get_menu();
            switch(this._itemType){
                case 1: return _m.get_groupCssClass();
                case 2: return _m.get_itemCssClass();
                case 3: return _m.get_rootCssClass();
            }
        }
        return this._cssClass;
    }
    ,set_cssClass: function(value){this._cssClass=value}
    ,get_hoverCssClass: function(){
        if(!this._hoverCssClass){
            var _m=this.get_menu();
            switch(this._itemType){
                case 1: return _m.get_groupHoverCssClass();
                case 2: return _m.get_itemHoverCssClass();
                case 3: return _m.get_rootHoverCssClass();
            }
        }
        return this._hoverCssClass;
    }
    ,set_hoverCssClass: function(value){this._hoverCssClass=value}
    
    ,get_itemsCssClass: function(){
        if(!this._itemsCssClass){
            var _m=this.get_menu();
            switch(this._itemType){
                case 1: return _m.get_groupItemsCssClass();
                case 2:
                case 3: return _m.get_subItemsCssClass();
                
            }
        }
        return this._itemsCssClass;
    }
    ,set_activeCssClass: function(value){this._activeCssClass=value}
    ,get_activeCssClass: function(){
        if(!this._activeCssClass){
            var _m=this.get_menu();
            switch(this._itemType){
                case 1: return _m._groupActiveCssClass;
                case 2: return _m._itemActiveCssClass;
                case 3: return _m._rootActiveCssClass;
            }
        }
        return this._activeCssClass;
    }
    ,set_activeCssClass: function(value){this._activeCssClass=value}
    
    
    ,get_tag: function(){return this._tag}
    ,set_tag: function(value){this._tag=value}
    ,get_text: function(){return this._text}
    ,set_text: function(value){this._text=value}
    ,get_visible: function(){return this._visible}
    ,set_visible: function(value){this._visible=value}
    ,get_persist: function(){return this._persist}
    ,set_persist: function(value){this._persist=value}
    ,get_itemType: function(){return this._itemType;}
    ,get_elementId: function(){return this._elementId}
    ,set_elementId: function(value){this._elementId=value}
    
    ,get_items: function(){
        if(!this._items){
            this._items=new eTag.MenuItemList();
            this._items._parentItem=this;
            this._items._menu=this._menu;
            this._items.add_Event('ItemAdded',this._menu._itemAddedDelegate);
        }
        return this._items
    }
    ,get_checked: function(){return this._checked}
    ,set_checked: function(value){this._checked=value}
    ,get_enabled: function(){return this._enabled}
    ,set_enabled: function(value){this._enabled=value}
    ,_renderText: function(){
        if(!this._textCtn){
            this._textCtn=this.$doc().createElement('DIV');
            this._textCtn.setAttribute('id',this.get_guid() + '_textCtn'); 
            eTag.$d.setProperties(this._textCtn.style,{overflow:'hidden',cssFloat:'left',styleFloat:'left', whiteSpace:'nowrap'});  
            this._textCtn.className=this._menu._textCssClass;
            this._element.appendChild(this._textCtn);
        }



        if(this._text) this._textCtn.innerHTML=this._text;
    }
    ,_renderIcon: function(){
        //_iconCtn
        if(!this._iconCtn){
            this._iconCtn=this.$doc().createElement('DIV');
            this._iconCtn.setAttribute('id',this.get_guid() + '_iconCtn');
            eTag.$d.setProperties(this._iconCtn.style,{overflow:'hidden',cssFloat:'left',styleFloat:'left'});
            this._iconCtn.className=this._menu._iconCssClass;
            this._element.appendChild(this._iconCtn);
        }
                   
        if(!this._iconUrl) return;
        var url=eTag.$w.isUrl(this._iconUrl)?this._iconUrl:(this._menu.get_imagesBaseUrl() + this._iconUrl);
        this._iconCtn.style.backgroundImage="url('" + url + "')";
        this._parentItem._itemsWithIcons=true;
        
    }
    ,get_iconUrl: function(){return this._iconUrl}
    ,set_iconUrl: function(value){this._iconUrl=value}
    ,get_navigateUrl: function(){return this._navigateUrl}
    ,set_navigateUrl: function(value){this._navigateUrl=value}
    ,get_popOutImageUrl: function(){return this._popOutImageUrl}
    ,set_popOutImageUrl: function(value){this._popOutImageUrl=value}
    ,get_radioCheck: function(){return this._radioCheck}
    ,set_radioCheck: function(value){this._radioCheck=value}
    ,get_toolTip: function(){return this._toolTip}
    ,set_toolTip: function(value){this._toolTip=value}
    ,get_subItemsMinHeight: function(){
        if(eTag.$v.isEmpty(this._subItemsMinHeight)) return this.get_menu().get_subItemsMinHeight();
        return this._subItemsMinHeight;
    }
    ,set_subItemsMinHeight: function(value){this._subItemsMinHeight=value}
    ,get_subItemsMinWidth: function(){
        if(eTag.$v.isEmpty(this._subItemsMinWidth)) return this.get_menu().get_subItemsMinWidth();
        return this._subItemsMinWidth;
    }
    ,set_subItemsMinWidth: function(value){this._subItemsMinWidth=value}
    
    ,get_leftImageUrl: function(){return this._leftImageUrl}
    ,set_leftImageUrl: function(value){this._leftImageUrl=value}
    ,get_leftImageWidth: function(){return this._leftImageWidth}
    ,set_leftImageWidth: function(value){this._leftImageWidth=value}
    ,get_rightImageUrl: function(){return this._rightImageUrl}
    ,set_rightImageUrl: function(value){this._rightImageUrl=value}
    ,get_rightImageWidth: function(){return this._rightImageWidth}
    ,set_rightImageWidth: function(value){this._rightImageWidth=value}
    
    ,get_target: function(){return this._target}
    ,set_target: function(value){this._target=value}
    
    
    ,set_serilizedValues: function(value){
        this._itemType=value[0];
        this._id=value[1];
        this.get_items().set_serilizedValues(value[2]);
        this._cssClass=value[3];
        this._tag=value[4];
        this._text=value[5];
        this._visible=value[6];
        this._persist=value[7];
        this._hoverCssClass=value[8];
        this._elementId=value[9];
        this._itemsCssClass=value[10];
        this._activeCssClass=value[11];
        
        this._leftImageUrl=value[12];
        this._leftImageWidth=value[13];
        this._rightImageUrl=value[14];
        this._rightImageWidth=value[15];
        
        this._checked=value[16];
        this._enabled=value[17];
        this._iconUrl=value[18];
        this._navigateUrl=value[19];
        this._popOutImageUrl=value[20];
        this._radioCheck=value[21];
        this._toolTip=value[22];
        this._target=value[23];
        this._subItemsMinHeight=value[24];
        this._subItemsMinWidth=value[25];
    }
    ,get_serilizedValues: function(){
        return [
                this._itemType
                ,this._id
                ,this.get_items().get_serilizedValues()
                ,this._cssClass
                ,this._tag
                ,this._text
                ,this._visible
                ,this._persist
                ,this._hoverCssClass
                ,this._elementId
                ,this._itemsCssClass
                ,this._activeCssClass
                ,this._leftImageUrl
                ,this._leftImageWidth
                ,this._rightImageUrl
                ,this._rightImageWidth
                ,this._checked
                ,this._enabled
                ,this._iconUrl
                ,this._navigateUrl
                ,this._popOutImageUrl
                ,this._radioCheck
                ,this._toolTip
                ,this._target
                ,this._subItemsMinHeight
                ,this._subItemsMinWidth 
                ];
    }
    ,dispose: function(){
        eTag.MenuItem.callBaseMethod(this, 'dispose');
        if(this._element!=null){
            eTag.$d.removeHandler(this._element, 'click', this._clickDelegate);
            eTag.$d.removeHandler(this._element, (eTag.$b.ie?"mouseenter":"mouseover"), this._mouseOverDelegate);
            eTag.$d.removeHandler(this._element, (eTag.$b.ie?"mouseleave":"mouseout"), this._mouseOutDelegate);
            this._element=null;
        }
        this._doc=null;
    }
}
eTag.MenuItem.registerClass('eTag.MenuItem', eTag.BaseObject);










eTag.Menu = function() {
    eTag.Menu.initializeBase(this);
    this._elementId=null;
    this._items=null;
    this._cssClass=null;
    this._height=null;
    this._itemHoverCssClass=null;
    this._rootHoverCssClass=null;
    this._itemCssClass=null;
    this._orientation=0;//0=Horizontal,1=Vertical
    this._popOutImageUrl=null;
    this._rootCssClass=null;
    this._visible=null;
    this._width=null;
    this._groupCssClass=null;
    this._groupHoverCssClass=null;
    this._groupItemsCssClass=null;
    this._subItemsCssClass=null;
    this._expandOnClick=false;
    this._activeMenuItem=null;
    this._autoHideDelay=1000;
    this._autoHideTimerId=null;
    this._iconCssClass=null;
    this._textCssClass=null;
    this._itemActiveCssClass=null;
    this._rootActiveCssClass=null;
    this._groupActiveCssClass=null;
    this._popOutCssClass=null;
    this._imagesBaseUrl=null;
    this._popOutImageUrl=null;
    this._popOutHoverImageUrl=null;
    this._popOutActiveImageUrl=null;
    this._itemClickDelegate=Function.createDelegate(this, this._itemClick);
    this._itemMouseOverDelegate=Function.createDelegate(this, this._itemMouseOver);
    this._itemMouseOutDelegate=Function.createDelegate(this, this._itemMouseOut);
    this._clickDelegate=Function.createDelegate(this, this._click);
    
    this._itemAddedDelegate=Function.createDelegate(this, this._itemAdded);
    this._doc=null;
    
//              var mouseOver=$.browser.msie?"mouseenter":"mouseover";
//          var mouseOut=$.browser.msie?"mouseleave":"mouseout";
          

}
eTag.Menu.prototype = {
    _click: function(sender,e){
        if(this._activeMenuItem){
            this._activeMenuItem.get_rootItem()._hideItems();
            this._activeMenuItem.get_rootItem().refresh();
         }
    }
    ,_itemAdded: function(sender,e){
        e.item.add_Event('Click',this._itemClickDelegate);
        e.item.add_Event('MouseOver',this._itemMouseOverDelegate);
        e.item.add_Event('MouseOut',this._itemMouseOutDelegate);
        this.raiseEvent('ItemAdded',e); 
    }
    ,_itemMouseOver: function(sender,e){
        this.raiseEvent('ItemMouseOver',e);
        this._activeMenuItem=sender;
        if(this._autoHideTimerId){
            clearTimeout(this._autoHideTimerId);
            this._autoHideTimerId=null;
        }
    }
    ,_itemMouseOut: function(sender,e){
        this.raiseEvent('ItemMouseOut',e);
        if(this._autoHideDelay > 0){
            if(this._autoHideTimerId){
                clearTimeout(this._autoHideTimerId);
                this._autoHideTimerId=null;
            }
            this._autoHideTimerId = setTimeout(this._clickDelegate,this._autoHideDelay);
        }
    }
    ,_itemClick: function(sender,e){
        this.raiseEvent('ItemClick',e); 
    }
    ,$doc: function(){
        if(!this._doc){
            this._doc=eTag.$d.getDocument(this.get_element());
            eTag.$d.addHandler(this._doc,'click',this._clickDelegate);
        }
        return this._doc;
    }
    ,get_element: function(){
        if(!this._element) this._element=$get(this._elementId);
        return this._element;
    }
    ,get_elementId: function(){return this._elementId;}
    ,set_elementId: function(value){this._elementId=value;}
    ,get_items: function(){
        if(!this._items){
            this._items=new eTag.MenuItemList();
            this._items._parent=this;
            this._items._menu=this;
            this._items.add_Event('ItemAdded',this._itemAddedDelegate);
        }
        return this._items;
    }
    ,get_cssClass: function(){return this._cssClass;}
    ,set_cssClass: function(value){this._cssClass=value;}
    ,get_height: function(){return this._height;}
    ,set_height: function(value){this._height=value;}
    ,get_itemHoverCssClass: function(){return this._itemHoverCssClass;}
    ,set_itemHoverCssClass: function(value){this._itemHoverCssClass=value;}
    ,get_rootHoverCssClass: function(){return this._rootHoverCssClass;}
    ,set_rootHoverCssClass: function(value){this._rootHoverCssClass=value;}
    ,get_itemCssClass: function(){return this._itemCssClass;}
    ,set_itemCssClass: function(value){this._itemCssClass=value;}
    ,get_orientation: function(){return this._orientation;}
    ,set_orientation: function(value){this._orientation=value;}
    ,get_popOutImageUrl: function(){return this._popOutImageUrl;}
    ,set_popOutImageUrl: function(value){this._popOutImageUrl=value;}
    ,get_rootCssClass: function(){return this._rootCssClass;}
    ,set_rootCssClass: function(value){this._rootCssClass=value;}
    ,get_visible: function(){return this._visible;}
    ,set_visible: function(value){this._visible=value;}
    ,get_width: function(){return this._width;}
    ,set_width: function(value){this._width=value;}
    ,get_groupCssClass: function(){return this._groupCssClass}
    ,set_groupCssClass: function(value){this._groupCssClass=value}
    ,get_groupHoverCssClass: function(){return this._groupHoverCssClass}
    ,set_groupHoverCssClass: function(value){this._groupHoverCssClass=value}
    ,get_groupItemsCssClass: function(){return this._groupItemsCssClass}
    ,set_groupItemsCssClass: function(value){this._groupItemsCssClass=value}
    ,get_subItemsCssClass: function(){return this._subItemsCssClass}
    ,set_subItemsCssClass: function(value){this._subItemsCssClass=value}
    ,get_subItemsMinHeight: function(){return this._subItemsMinHeight}
    ,set_subItemsMinHeight: function(value){this._subItemsMinHeight=value}
    ,get_subItemsMinWidth: function(){return this._subItemsMinWidth;}
    ,set_subItemsMinWidth: function(value){this._subItemsMinWidth=value}
    ,get_expandOnClick: function(){return this._expandOnClick}
    ,set_expandOnClick: function(value){this._expandOnClick=value}
    ,get_collapseOnMouseOut: function(){return this._collapseOnMouseOut}
    ,set_collapseOnMouseOut: function(value){this._collapseOnMouseOut=value}
    ,get_autoHideDelay: function(){return this._autoHideDelay}
    ,set_autoHideDelay: function(value){this._autoHideDelay=value}
    ,get_itemActiveCssClass: function(){return this._itemActiveCssClass}
    ,set_itemActiveCssClass: function(value){this._itemActiveCssClass=value}
    ,get_rootActiveCssClass: function(){return this._rootActiveCssClass}
    ,set_rootActiveCssClass: function(value){this._rootActiveCssClass=value}
    ,get_groupActiveCssClass: function(){return this._groupActiveCssClass}
    ,set_groupActiveCssClass: function(value){this._groupActiveCssClass=value}
    ,get_imagesBaseUrl: function(){if(!this._imagesBaseUrl) return '';return this._imagesBaseUrl}
    ,set_imagesBaseUrl: function(value){this._imagesBaseUrl=value}
    ,get_popOutCssClass: function(){return this._popOutCssClass}
    ,set_popOutCssClass: function(value){this._popOutCssClass=value}

    ,get_popOutImageUrl: function(){
        var burl=!this._imagesBaseUrl?'':this._imagesBaseUrl;
        if(this._popOutImageUrl.indexOf(".axd") == -1) return burl+this._popOutImageUrl;
        return this._popOutImageUrl
    }
    ,set_popOutImageUrl: function(value){this._popOutImageUrl=value}
    
    ,get_popOutHoverImageUrl: function(){
        if(!this._popOutHoverImageUrl) return this.get_popOutImageUrl();
        var burl=!this._imagesBaseUrl?'':this._imagesBaseUrl;
        if(this._popOutHoverImageUrl.indexOf(".axd") == -1) return burl+this._popOutHoverImageUrl;
        return this._popOutHoverImageUrl
    }
    ,set_popOutHoverImageUrl: function(value){this._popOutHoverImageUrl=value}
    
    ,get_popOutActiveImageUrl: function(){
        if(!this._popOutActiveImageUrl) return this.get_popOutHoverImageUrl();
        var burl=!this._imagesBaseUrl?'':this._imagesBaseUrl;
        if(this._popOutActiveImageUrl.indexOf(".axd") == -1) return burl+this._popOutActiveImageUrl;
        return this._popOutActiveImageUrl
    }
    ,set_popOutActiveImageUrl: function(value){this._popOutActiveImageUrl=value}
    

    ,get_iconCssClass: function(){return this._iconCssClass}
    ,set_iconCssClass: function(value){this._iconCssClass=value}
    ,get_textCssClass: function(){return this._textCssClass}
    ,set_textCssClass: function(value){this._textCssClass=value}

   
    ,set_serilizedValues: function(value){
        this.get_items().set_serilizedValues(value[0]);
        // items
            var il = this.get_items().get_items();
            for(var i = 0; i < il.length; i++){
                il[i].render();
            }
        
        this._cssClass=value[1];
        this._height=value[2];
        this._itemHoverCssClass=value[3];
        this._rootHoverCssClass=value[4];
        this._itemCssClass=value[5];
        this._orientation=value[6];
        this._popOutImageUrl=value[7];
        this._rootCssClass=value[8];
        this._visible=value[9];
        this._width=value[10];
        this._groupCssClass=value[11];
        this._groupHoverCssClass=value[12];
        this._groupItemsCssClass=value[13];
        this._subItemsCssClass=value[14];
        this._expandOnClick=value[15];
        this._collapseOnMouseOut=value[16];
        this._subItemsMinHeight=value[17];
        this._subItemsMinWidth=value[18];
        this._autoHideDelay=value[19];
        this._itemActiveCssClass=value[20];
        this._rootActiveCssClass=value[21];
        this._groupActiveCssClass=value[22];
        this._imagesBaseUrl=value[23];
        this._popOutCssClass=value[24];
        this._popOutImageUrl=value[25];
        this._popOutHoverImageUrl=value[26];
        this._popOutActiveImageUrl=value[27];
        this._iconCssClass=value[28];
        this._textCssClass=value[29];
    }
    ,get_serilizedValues: function(){
        return [
            this.get_items().get_serilizedValues()
            ,this._cssClass
            ,this._height
            ,this._itemHoverCssClass
            ,this._rootHoverCssClass
            ,this._itemCssClass
            ,this._orientation
            ,this._popOutImageUrl
            ,this._rootCssClass
            ,this._visible
            ,this._width
            ,this._groupCssClass
            ,this._groupHoverCssClass
            ,this._groupItemsCssClass
            ,this._subItemsCssClass
            ,this._expandOnClick
            ,this._collapseOnMouseOut
            ,this._subItemsMinHeight
            ,this._subItemsMinWidth
            ,this._autoHideDelay
            ,this._itemActiveCssClass
            ,this._rootActiveCssClass
            ,this._groupActiveCssClass
            ,this._imagesBaseUrl
            ,this._popOutCssClass
            ,this._popOutImageUrl
            ,this._popOutHoverImageUrl
            ,this._popOutActiveImageUrl
        ];
    }
    ,dispose: function(){
        eTag.Menu.callBaseMethod(this, 'dispose');
    }
}
eTag.Menu.registerClass('eTag.Menu', eTag.Component);




/*********************** eTag.MenuItemList ***************************************************/

eTag.MenuItemList = function() {
    eTag.MenuItemList.initializeBase(this);
    this._menu=null;
    this._parentItem=null;
}

eTag.MenuItemList.prototype = {
    get_menu: function(){return this._menu}
    ,get_parentItem:function(){return this._parentItem}
    ,clone: function(){
        var o=new eTag.MenuItemList();
            o.set_serilizedValues(this.get_serilizedValues());
        return o;
    }
    ,set_serilizedValues: function(value){
        var i;
        if(this._items){
            var bcache=[];
            for(i = 0; i < this._items.length; i++){
                var item=this._items[i];
                if(!item.get_persist()) Array.add(bcache,item);
            }
            for(i = 0; i < bcache.length; i++){
                bcache[i].dispose();
            }
            bcache=null;
        }
        for(i = 0; i < value.length; i++){
          var item=this.getItemByID(value[i][1]);
          if(!item) item = new eTag.MenuItem();
            item._parentItem=this._parentItem;
            item._menu=this._menu;
            item.set_serilizedValues(value[i]);
            this.add(item);
        }
    }
    ,get_serilizedValues: function(){
        var a=[];
        for(var i = 0; i < this.get_items().length; i++){
            Array.add(a,this.get_items()[i].get_serilizedValues());
        }
        return a;
    }
    ,add: function(item){
        eTag.MenuItemList.callBaseMethod(this, 'add', [item]);
        item._menu.raiseEvent('ItemAdded',item);
    }
    ,dispose: function(){
        eTag.MenuItemList.callBaseMethod(this, 'dispose');
    }
}
eTag.MenuItemList.registerClass('eTag.MenuItemList', eTag.BaseList);




if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();


if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();