﻿var GBG = {
    Init:function(){
        //Add all the necessary event handlers        
        //find all the menu categories (by looking for li's)
        var menuCats = new Array();
        if($('MainMenu').firstChild){
            var li = $('MainMenu').firstChild;
            if(li.tagName == 'LI'){
                menuCats.push(li);
            }
            while(li.nextSibling){
                li = li.nextSibling;
                if(li.tagName == 'LI'){
                    menuCats.push(li);
                }
            }
            //now find the head and cooresponding submenu in each cat
            for(var i = 0; i < menuCats.length; i++){
                var head, sub;
                if(menuCats[i].firstChild){
                    head = menuCats[i].firstChild;
                    while(head.tagName != 'A' && head.nextSibling){
                        head = head.nextSibling;
                    }
                    sub = menuCats[i].firstChild;
                    while(sub.tagName != 'UL' && sub.nextSibling){
                        sub = sub.nextSibling;
                    }
                    //add the events
                    //if we found a sub, then do the regular work.  else, call the close immediately at the head.
                    if(sub.tagName == 'UL'){
                        addEvent(head, 'mouseover', GBG.MainMenu.MouseEnterHead);
                        addEvent(head, 'mouseout', GBG.MainMenu.MouseLeaveHead);
                        addEvent(sub, 'mouseover', GBG.MainMenu.MouseEnterSub);
                        addEvent(sub, 'mouseout', GBG.MainMenu.MouseLeaveSub);
                    }else{
                        addEvent(head, 'mouseover', GBG.MainMenu.CloseMenu);
                    }
                }
            }
        }
    },
    
    MainMenu:{
        CloseDelay:500,
        OpenMenu:null,
        CloseTimeout:null,
        
        MouseEnterHead:function(e){
            var target;
            if(e.target){
                target = e.target;
            }else if(e.srcElement){
                target = e.srcElement;
            }
            while(target.tagName != 'A' && target.parentNode){
                target = target.parentNode;
            }
            //if there is an open window we need to clear any close timeout.
            //if the menu the user is opening is not the currently open window, immediately close the open one
            var doOpen = false;
            if(GBG.MainMenu.OpenMenu != null){
                window.clearTimeout(GBG.MainMenu.CloseTimeout);
                if(GBG.MainMenu.OpenMenu != target){
                    GBG.MainMenu.CloseMenu();
                    doOpen = true;
                }
            }else{
                doOpen = true;
            }
            if(doOpen == true){
                var subMenu;
                if(target.nextSibling){
                    subMenu = target.nextSibling;
                    while(subMenu.tagName != 'UL' && subMenu.nextSibling){
                        subMenu = subMenu.nextSibling;
                    }
                    var pos = DHL.findPos(target);
                    var height;
                    height = target.offsetHeight;
                    var newTopPos = pos[1] + height;
                    subMenu.style.top = newTopPos + 'px';
                    subMenu.style.left = pos[0] + 'px';
                    target.className = 'hover';
                    subMenu.style.display = 'block';
                    GBG.MainMenu.OpenMenu = target;
                }
            }
        },
        
        MouseLeaveHead:function(e){
            var target;
            if(e.target){
                target = e.target;
            }else if(e.srcElement){
                target = e.srcElement;
            }
            while(target.tagName != 'A' && target.parentNode){
                target = target.parentNode;
            }
            GBG.MainMenu.CloseTimeout = window.setTimeout(GBG.MainMenu.CloseMenu, GBG.MainMenu.CloseDelay);
        },
        
        MouseEnterSub:function(e){
            var target;
            if(e.target){
                target = e.target;
            }else if(e.srcElement){
                target = e.srcElement;
            }
            while(target.tagName != 'UL' && target.parentNode){
                target = target.parentNode;
            }
            window.clearTimeout(GBG.MainMenu.CloseTimeout);            
        },
        
        MouseLeaveSub:function(e){
            var target;
            if(e.target){
                target = e.target;
            }else if(e.srcElement){
                target = e.srcElement;
            }
            while(target.tagName != 'UL' && target.parentNode){
                target = target.parentNode;
            }
            GBG.MainMenu.CloseTimeout = window.setTimeout(GBG.MainMenu.CloseMenu, GBG.MainMenu.CloseDelay);
        },
        
        CloseMenu:function(){
            window.clearTimeout(GBG.MainMenu.CloseTimeout);
            if(GBG.MainMenu.OpenMenu != null){
                var target = GBG.MainMenu.OpenMenu;
                var subMenu;
                if(target.nextSibling){
                    subMenu = target.nextSibling;
                    while(subMenu.tagName != 'UL' && subMenu.nextSibling){
                        subMenu = subMenu.nextSibling;
                    }
                    target.className = '';
                    subMenu.style.display = '';
                    GBG.MainMenu.OpenMenu = null;
                }
            }
        }
    }
};

var DHL = {
    findPos:function(obj){
	    var curleft = curtop = 0;
	    if (obj.offsetParent) {
		    curleft = obj.offsetLeft
		    curtop = obj.offsetTop
		    while (obj = obj.offsetParent) {
			    curleft += obj.offsetLeft
			    curtop += obj.offsetTop
		    }
	    }
	    return [curleft, curtop];
    },
    
    doActiveX:function(){        
        if (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1)
        {
            var o = document.getElementsByTagName("embed");
            DHL.rewriteInnerHTML(o);
            o = document.getElementsByTagName("object");
            DHL.rewriteInnerHTML(o);
            o = document.getElementsByTagName("applet");
            DHL.rewriteInnerHTML(o);
        }
    },
    
    rewriteInnerHTML:function(o){
        for (var i = 0; i < o.length; i++ )
        {
            var p = o[i].parentNode;
            var h = p.innerHTML;
            p.removeChild(o[i]);
            p.innerHTML = h;
        }
    }
};

function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

function $(elementID){
    return document.getElementById(elementID);
};

addEvent(window, 'load', GBG.Init);