var CG86 = {
    init : function(){
        CG86.Menu.init();
    },
    
    Menu : {
        
        init : function(){
            CG86.Menu.Top.init();
            CG86.Menu.Subnav.init();
            var allMenus = YAHOO.util.Dom.getElementsByClassName  ('listMenuItem', 'a' , 'nav')
            for(i=0;i<allMenus.length;i++){
                allMenus[i].style.display = 'block';
            }
        },
        
        Top : {
            _openElement    : null, 
            _timerID        : null,
            
            init : function() {

                // Dans un premier temps, on parcours tout les elements a[class:listMenuItem] qui correspondent au menu de niveau 1
                // Pour tout ces elements, on leur affecte un écouteur pour qu'ils ouvrent le bloc div[class:submenu] sur leur click
                YAHOO.util.Dom.getElementsByClassName  ('listMenuItem', 'a' , 'nav' , function(){
                    YAHOO.util.Event.on(this, 'click', function(){ 
                        aElt = YAHOO.util.Dom.getElementsByClassName('submenu', 'div', this.parentNode);
                        if(aElt[0]) {
                            this.href= 'javascript:void(0);';
                            CG86.Menu.Top.evtLstOpen(aElt[0]);
                        }
                    });
                    YAHOO.util.Event.on(this, 'focus', function(){ 
                        aElt = YAHOO.util.Dom.getElementsByClassName('submenu', 'div', this.parentNode);
                        if(aElt[0]) {
                            this.href= 'javascript:void(0);';
                            CG86.Menu.Top.evtLstOpen(aElt[0]);
                        }
                    });
                }) ;
                YAHOO.util.Event.addListener('searchString','focus',function() {
                    CG86.Menu.Top.close();
                }) ;
                CG86.Menu.Top.SubmenuItem.init();

            },

            evtLstOpen :  function(elt) {
                // On ferme tous les sous menus qui étaient ouverts
                YAHOO.util.Dom.getElementsByClassName('submenu', 'div', 'nav', function(){ CG86.Menu.Top.close(this) })

                if(elt != null && elt != undefined) {
                    
                    CG86.Menu.Top._openElement = elt;

                    // Écouteurs sur les differents événements :
                    YAHOO.util.Event.on(elt.parentNode, 'mouseover',function(){ CG86.Menu.Top.open(elt)});
                    YAHOO.util.Event.on(elt,            'focus',    function(){ CG86.Menu.Top.open(elt)});
                    YAHOO.util.Event.on(elt,            'mouseout',    function(){ CG86.Menu.Top.evtLstClose(elt)});
                    YAHOO.util.Event.on(elt,            'blur',        function(){ CG86.Menu.Top.close(elt)});
                    CG86.Menu.Top.open();
                }
            }, 

            evtLstClose :  function(elt){
                if(elt != null && elt != undefined){
                    CG86.Menu.Top._timerID = setTimeout("CG86.Menu.Top.close()", 2000);
                }
            }, 

            closeOnBlurEvt : function(event){

                if(CG86.Menu.Top._openElement != null){
                    
                    try{
                        x = window.event ? window.event.clientX : event.pageX;
                        y = window.event ? window.event.clientY : event.pageY;
                        y += YAHOO.util.Dom.getDocumentScrollTop();

                        var oRegion            = YAHOO.util.Region.getRegion(CG86.Menu.Top._openElement);
                        var oRegionParent    = YAHOO.util.Region.getRegion(CG86.Menu.Top._openElement.parentNode);
                        
                        if(!(x >= oRegion.left && x <= oRegion.right && y >= oRegion.top && y <= oRegion.bottom) && 
                                !(x >= oRegionParent.left && x <= oRegionParent.right && y >= oRegionParent.top && y <= oRegionParent.bottom)){
                            
                            for(i=0;i<document.getElementsByTagName('select').length;i++){
                                if(document.getElementsByTagName('select').item(i) != null && 
                                        document.getElementsByTagName('select').item(i) != undefined && 
                                        document.getElementsByTagName('select').item(i).style.visibility == 'hidden'){

                                    document.getElementsByTagName('select').item(i).style.visibility='visible';
                                }
                            }
                            for(i=0;i<document.getElementsByTagName('object').length;i++){
                                if(document.getElementsByTagName('object').item(i) != null && 
                                    document.getElementsByTagName('object').item(i) != undefined && 
                                    document.getElementsByTagName('object').item(i).style.visibility == 'hidden'){
                                    
                                    document.getElementsByTagName('object').item(i).style.visibility = 'visible';
                                }
                            }
                            for(i=0;i<document.getElementsByTagName('embed').length;i++){
                                if(document.getElementsByTagName('embed').item(i) != null && 
                                        document.getElementsByTagName('embed').item(i) != undefined && 
                                        document.getElementsByTagName('embed').item(i).style.visibility == 'hidden'){

                                    document.getElementsByTagName('embed').item(i).style.visibility='visible';
                                }
                            }
                            if(document.getElementById('nomTerritoire')){
                            	document.getElementById('nomTerritoire').style.visibility='visible';
                            }
                            if(document.getElementById('tpl_accueilUne')){
                            	document.getElementById('tpl_accueilUne').style.visibility='visible';
                            }
                            CG86.Menu.Top.close();
                        }

                    }catch(ex){alert('closeOnBlurEvt : ex = ' + ex.message);}
                }
            },
            
            open :  function(elt) {
                try{
                    if(!elt) elt = CG86.Menu.Top._openElement;
                    if(elt != null && elt != undefined) {
                        // Un timer est en cours, on le supprime
                        if(CG86.Menu.Top._timerID != null){
                            clearTimeout(CG86.Menu.Top._timerID);
                            CG86.Menu.Top._timerID = null;
                        }
                        // Li de niveau 1
                        YAHOO.util.Dom.addClass(elt.parentNode, 'menuItemON');
                        // Element
                        YAHOO.util.Dom.addClass(elt, 'current');
                        YAHOO.util.Event.on(document, 'click', CG86.Menu.Top.closeOnBlurEvt);
                        for(i=0;i<document.getElementsByTagName('select').length;i++){
                            document.getElementsByTagName('select').item(i).style.visibility='hidden';
                        }
                        for(i=0;i<document.getElementsByTagName('object').length;i++){
                            document.getElementsByTagName('object').item(i).style.visibility='hidden';
                        }
                        for(i=0;i<document.getElementsByTagName('embed').length;i++){
                            document.getElementsByTagName('embed').item(i).style.visibility='hidden';
                        }
                        if(document.getElementById('nomTerritoire')){
                        	document.getElementById('nomTerritoire').style.visibility='hidden';
                        }
                        if(document.getElementById('tpl_accueilUne')){
                        	document.getElementById('tpl_accueilUne').style.visibility='hidden';
                        }
                    }
                }catch(ex){
                    alert('Exception throw in CG86.Menu.Top.open() : ' + ex); 
                }
            },

            close :  function(elt){
                try{
                    if(!elt) elt = CG86.Menu.Top._openElement;
                    if(elt != null && elt != undefined){

                        // Li de niveau 1
                        YAHOO.util.Dom.removeClass(elt.parentNode, 'menuItemON');
                        // Element
                        YAHOO.util.Dom.removeClass(elt, 'current');
                        YAHOO.util.Event.purgeElement(elt);
                        YAHOO.util.Event.purgeElement(elt.parentNode);
                        YAHOO.util.Event.removeListener(document, CG86.Menu.Top.closeOnBlurEvt);
                        CG86.Menu.Top._openElement    = null;

                        if(navigator.appName != 'Opera'){
                            for(i=0;i<document.getElementsByTagName('select').length;i++){
                                if(document.getElementsByTagName('select').item(i) != null && 
                                   document.getElementsByTagName('select').item(i) != undefined && 
                                   document.getElementsByTagName('select').item(i).style.visibility == 'hidden') {
                                       document.getElementsByTagName('select').item(i).style.visibility='visible';
                                }
                            }
                            for(i=0;i<document.getElementsByTagName('object').length;i++){
                                if(document.getElementsByTagName('object').item(i) != null && 
                                   document.getElementsByTagName('object').item(i) != undefined && 
                                   document.getElementsByTagName('object').item(i).style.visibility == 'hidden') {
                                       document.getElementsByTagName('object').item(i).style.visibility = 'visible';
                                }
                            }
                            for(i=0;i<document.getElementsByTagName('embed').length;i++){
                                if(document.getElementsByTagName('embed').item(i) != null && 
                                   document.getElementsByTagName('embed').item(i) != undefined && 
                                   document.getElementsByTagName('embed').item(i).style.visibility == 'hidden') {
                                       document.getElementsByTagName('embed').item(i).style.visibility = 'visible';
                                }
                            }
                            if(document.getElementById('nomTerritoire')){
                            	if(document.getElementById('nomTerritoire').style.visibility == 'hidden'){
                            		document.getElementById('nomTerritoire').style.visibility = 'visible';
                                }
                            }
                            if(document.getElementById('tpl_accueilUne')){
                            	if(document.getElementById('tpl_accueilUne').style.visibility == 'hidden'){
                            		document.getElementById('tpl_accueilUne').style.visibility = 'visible';
                                }
                            }

                        }
                    }
                }catch(ex){
                    alert('Exception throw in CG86.Menu.Top.close() : ' + ex); 
                } 
            },
            
            SubmenuItem : {
                
                init : function(){
                    // On récupère tous les elements div qui ont la class css div[class:submenuItem] a partir de l'élément root 'nav'
                    YAHOO.util.Dom.getElementsByClassName('submenuItem', 'div', 'nav', function(){
                        // Hack IE6 pour le rollover des elements
                        YAHOO.util.Event.on(this, 'mouseover', function(){
                            YAHOO.util.Dom.addClass(this, 'sfhover');
                        });
                        // Hack IE6 pour le rollout des elements
                        YAHOO.util.Event.on(this, 'mouseout', function(){
                            YAHOO.util.Dom.removeClass(this, 'sfhover');
                        });
                    });
                }
            }
        }, 
        
        
        Subnav : {
            
            _aUL : null,
            
            init : function(){
                if(document.getElementById('subnav')){
                    // Initialisation de la collection d'éléments UL du menu
                    CG86.Menu.Subnav._aUL = document.getElementById('subnav').getElementsByTagName('UL');
                
                    // On referme tous les elements qui ne doivent pas être ouverts : ul[class:] 
                    /*for(i=0; i< CG86.Menu.Subnav._aUL.length; i++){
                        if(!(YAHOO.util.Dom.hasClass(CG86.Menu.Subnav._aUL[i], 'open') 
                                || YAHOO.util.Dom.hasClass(CG86.Menu.Subnav._aUL[i], 'root'))){
                            
                            CG86.Menu.Subnav.close(CG86.Menu.Subnav._aUL[i]);
                        }
                    }*/
                    YAHOO.util.Dom.getElementsByClassName('toogle', 'a', 'subnav', function() {
                        this.href = '#null';
                        YAHOO.util.Event.on(this, 'click', function(){
                            node = this.parentNode.getElementsByTagName('UL')[0];
                            if(YAHOO.util.Dom.hasClass(node, 'open')){
                                CG86.Menu.Subnav.close(node);    
                            }else{
                                CG86.Menu.Subnav.open(node);    
                            }
                        });
                    });                    
                }
            },

            open : function(node){
                node.className = 'open';
                //img = node.parentNode.getElementsByClassName('toogleImg')[0];
                img = YAHOO.util.Dom.getElementsByClassName('toogleImg', 'img', node.parentNode)[0];
                var reg = new RegExp("(Close)", "g");
                img.src = img.src.replace(reg, 'Open');

                img.alt = "";
            },
            
            close : function(node){
                // On ferme cet element + les elements enfants
                node.className    = 'close';
                img = YAHOO.util.Dom.getElementsByClassName('toogleImg', 'img', node.parentNode)[0];

                var reg = new RegExp("(Open)", "g");
                img.src = img.src.replace(reg, 'Close');
                img.alt = "";
                aUL = node.getElementsByTagName('UL');
                if(aUL.length > 0){
                    for(i=0; i<aUL.length; i++){
                        aUL[i].className = 'close';
                        CG86.Menu.Subnav.close(aUL[i]);
                    }
                }
            }
        }
        
    },

    Util : { }
}
YAHOO.util.Event.on(window, 'load', CG86.init);
