function SiteMenu(activeMenu){
    this.element=$('siteMenu');
    this.menuItems=[];
    this.activeMenu=activeMenu;
    this.menuActive=false;
    this.menuItemTimeout=null;
    this.menuTimeout=null;
    this.init();
    SiteMenu.instance=this;
 };
 
 Object.extend(SiteMenu.prototype,{
        init:function(){
            if(this.element){
                var menuItems=this.element.getElementsByTagName('li'),menuItem,i=0;
                while((menuItem=menuItems[++i])){
                    Element.extend(menuItem);
                    menuItem.observe('click',this.onClick.bind(this,i));
                    menuItem.observe('mouseover',this.onMouseover.bind(this,i));
                    menuItem.subMenu=new SubMenu(i,menuItem.offsetLeft);
                    this.menuItems[i]=menuItem;
                };
                    var header=$('header');
                    if(header){
                        header.observe('mouseover',this.cancelMouseout.bind(this));
                        header.observe('mouseout',this.onMouseout.bind(this,this.activeMenu));
                    }
                     Event.observe(window,'unload',this.cleanUp.bind(this));
            }
        },
        positionSubMenus:function(){
            var i=0,menuItem;
            while((menuItem=this.menuItems[++i])){
                if(menuItem.subMenu.element){
                    menuItem.subMenu.position();
                }
            }
        },
        cleanUp:function(){
            this.menuActive=false;
            this.menuItems=null;
            this.element=null;
        },
        onClick:function(i){
            clearTimeout(this.menuItemTimeout);
            this.menuActive=true;
            this.handleMouseover(i);
        },
        onMouseover:function(i,e){
            clearTimeout(this.menuItemTimeout);
            if(i!=this.activeMenu){
                var timeOut=250;
                if(this.menuActive){
                    var target=e.target||e.srcElement;
                    if(target.nodeType==3){
                        target=target.parentNode;
                    }
                    
                    timeOut=target.nodeName=='A'?50:100;
                };
                this.menuItemTimeout=setTimeout(this.onClick.bind(this,i),timeOut);
            }
        },
        onMouseout:function(i){
            clearTimeout(this.menuTimeout);
            clearTimeout(this.menuItemTimeout);
            this.menuTimeout=setTimeout(this.handleMouseout.bind(this,i),5000);
        },
        cancelMouseout:function(){
            clearTimeout(this.menuTimeout);
        },
        handleMouseover:function(i){
            var menu;
            if(this.menuActive&&this.menuItems&&i!=this.activeMenu){
                if((menu=this.menuItems[this.activeMenu])){
                    menu.removeClassName('active');
                    if(menu.subMenu.element){
                        Element.extend(menu.subMenu.element);      
                        menu.subMenu.handleMouseout();
                        menu.subMenu.element.removeClassName('active');
                    }
                    if((menu=this.menuItems[this.activeMenu+1])){
                        menu.removeClassName('activeNeighbor');
                    }
                }
                this.activeMenu=i;
                if((menu=this.menuItems[this.activeMenu])){
                    menu.addClassName('active');
                    if(menu.subMenu.element){
                        Element.extend(menu.subMenu.element); 
                        menu.subMenu.element.addClassName('active');
                    }
                
                    if((menu=this.menuItems[this.activeMenu+1])){
                        menu.addClassName('activeNeighbor');
                    }
                }
            }
        },
        handleMouseout:function(i){
            this.handleMouseover(i);
            this.menuActive=false;
        }
 });

 
 function SubMenu(id,offset){
    this.element=$('groupNav'+id);
    this.menu=null;
    this.offset=offset;
    this.width=0;
    this.menuItems=[];
    this.activeMenu=-1;
    this.menuActive=false;
    this.menuTimeout=null;
    this.menuItemTimeout=null;
    this.init();
 };
 
 Object.extend(SubMenu.prototype,{
    init:function(){
        if(this.element){
            Element.extend(this.element);
            var lastitem,menuitem,menusubitem,i=0;
            if((this.menu=this.element.down('ul'))){
                Element.extend(this.menu);
                menuitem=this.menu.down('li');
                Element.extend(menuitem);       
                if(menuitem){                                  
                    do{
                        Element.extend(menuitem);
                        lastitem=menuitem;
                        if((menusubitem=menuitem.down('div'))){
                            Element.extend(menusubitem); 
                            menuitem.className+='subitems';
                            menuitem.observe('click',this.onClick.bind(this,i));
                            menuitem.observe('mouseover',this.onMouseover.bind(this,i));
                            this.menuItems[i++]=menusubitem;
                        }else{ 
                            menuitem.observe('mouseover',this.handleMouseover.bind(this,-1));
                        }
                    }
                    while((menuitem=menuitem.next('li')));
                    
                    
                    this.width=lastitem.offsetLeft;this.position();
                }
            }
            this.element.observe('mouseover',this.cancelMouseout.bind(this));
            this.element.observe('mouseout',this.onMouseout.bind(this));
            menuitem=null;
            menusubitem=null;
            Event.observe(window,'unload',this.cleanUp.bind(this));
        }
    },
    cleanUp:function(){
        this.menuActive=false;
        this.menuItems=null;
        this.menu=null;
        this.element=null;
    },
    position:function(){
        if(this.width){
            Element.extend(this.element);
            var maxLeft=this.element.parentNode.offsetWidth-10,searchbox=$('searchbox');
            if(searchbox){
                maxLeft=searchbox.offsetLeft-10;
            }
            var offset=this.offset-Math.floor(this.width/2);
            offset+=65;
            if(offset+this.width>maxLeft){
                offset=maxLeft-this.width;
            }
            if(offset<0){
                offset=0;
            }
            this.element.style.left=offset+'px';
            
            var ul = this.element.down('ul');
            Element.extend(ul);
            //ul.style.width = this.width + "px";
        }
    },
    onClick:function(i){
        clearTimeout(this.menuItemTimeout);
        this.menuActive=true;
        this.handleMouseover(i);
    },
    onMouseover:function(i){
        clearTimeout(this.menuItemTimeout);
        if(this.menuActive){
            this.handleMouseover(i);
        }
        else if(i!=this.activeMenu){
            this.menuItemTimeout=setTimeout(this.onClick.bind(this,i),50);
        }
    },
    onMouseout:function(i){
        clearTimeout(this.menuTimeout);
        clearTimeout(this.menuItemTimeout);
        this.menuTimeout=setTimeout(this.handleMouseout.bind(this),1000);
    },
    cancelMouseout:function(){
        clearTimeout(this.menuTimeout);
    },
    handleMouseover:function(i){
        if(this.menuItems&&i!=this.activeMenu){
                var menu=this.menuItems[this.activeMenu];   
                if(menu){
                    menu.style.display='none';
                }
                
                this.activeMenu=i;
                if((menu=this.menuItems[this.activeMenu])){
                    menu.style.left=menu.parentNode.offsetLeft+'px';
                    menu.style.display='block';
                }
        }
    },
    handleMouseout:function(){
        this.handleMouseover(-1);
        this.menuActive=false;
    }
 }); 
