			var tree;
	
            // "load" handler for the window

            YAHOO.example.onWindowLoad = function(p_oEvent) {
    
                // Hides submenus of the root Menubar instance
                
                function hideSubmenus() {

                    if(oMenuBar.activeItem) {
                    
                        var oSubmenu = oMenuBar.activeItem.cfg.getProperty("submenu");

                        if(oSubmenu) {
                        
                            oSubmenu.hide();
                        
                        }
                    
                    }

                }    


                // Cancels the call to "hideSubmenus"

                function cancelTimer() {

                    if(nTimeoutId) {
    
                        window.clearTimeout(nTimeoutId);
    
                    }
                
                }
    
    
                // "mouseout" event handler for each submenu of the menubar
                
                function onSubmenuMouseOut(p_sType, p_aArguments, p_oMenu) {
    
                    cancelTimer();
    
                    nTimeoutId = window.setTimeout(hideSubmenus, 750);
                
                }
    
    
                // "mouseover" handler for each item in the menubar
    
                function onMenuBarItemMouseOver(p_sType, p_aArguments, p_oMenuItem) {
                
                    var oActiveItem = this.parent.activeItem;
                
                
                    // Hide any other submenus that might be visible
                
                    if(oActiveItem && oActiveItem != this) {
                
                        this.parent.clearActiveItem();
                
                    }
                
                
                    // Select and focus the current MenuItem instance
                
                    this.cfg.setProperty("selected", true);
                    this.focus();
                
                
                    // Show the submenu for this instance
                
                    var oSubmenu = this.cfg.getProperty("submenu");
                
                    if(oSubmenu) {
                
                        oSubmenu.show();
                
                    }
                
                }
            
    
                // "mouseout" handler for each item in the menubar
            
                function onMenuBarItemMouseOut(p_sType, p_aArguments, p_oMenuItem) {
                
                    this.cfg.setProperty("selected", false);
                
                
                    var oSubmenu = this.cfg.getProperty("submenu");
                
                    if(oSubmenu) {
                
                        var oDOMEvent = p_aArguments[0],
                            oRelatedTarget = YAHOO.util.Event.getRelatedTarget(oDOMEvent);
                
                        if(
                            !(
                                oRelatedTarget == oSubmenu.element || 
                                this._oDom.isAncestor(oSubmenu.element, oRelatedTarget)
                            )
                        ) {
                
                            oSubmenu.hide();
                
                        }
                
                    }
                
                }


                // "beforeshow" handler for each submenu of the menubar

                function onMenuBeforeShow(p_sType, p_sArgs) {

                    // Check if the menu has any items. If not, add them
                    
                    if(this.getItemGroups().length == 0) {

                        var aItemsData = this.itemsData,
                            nItems = aItemsData.length,
                            oItemData,
                            oItemConfig,
                            oSubmenu;


                        for(var i=0; i<nItems; i++) {

                            oItemData = aItemsData[i];

                            if(oItemData) {

                                oItemConfig = {};
    
                                if(oItemData.url) {
                                
                                    oItemConfig.url = oItemData.url;
                                
                                }
                                
    
                                if(oItemData.submenuItems) {
    
                                    oSubmenu = new YAHOO.widget.Menu(oItemData.submenuId);

                                    oSubmenu.itemsData = oItemData.submenuItems;

                                    oSubmenu.beforeShowEvent.subscribe(onMenuBeforeShow, oSubmenu, true);
                                    oSubmenu.mouseOverEvent.subscribe(cancelTimer);
                                    oSubmenu.mouseOutEvent.subscribe(onSubmenuMouseOut, oSubmenu, true);
    
                                    oItemConfig.submenu = oSubmenu;
                                
                                }
    
                                // Add the new YAHOO.widget.MenuItem instance to the Menu
    
                                this.addItem(new YAHOO.widget.MenuItem(oItemData.text, oItemConfig));

                            }

                        }


                        // Render the submenu into its parent MenuItem instance's element

                        this.render(this.parent.element);
                        
                    }
                
                }


                var nTimeoutId;


                /*
                     Use a JSON-formatted data structure to define the data for 
                     the submenus of the menubar
                */

                var oMenuData = {
                
                    "software": [ 
                        { text: "ArcView", url: "/software/arcview/" },
                        { text: "Bing/ Virtual Earth Maps", url: "/software/virtual_earth/index.html" },
                        { text: "Custom Software", url: "/software/custom/" },
                        { text: "Discover for Geologists", url: "/software/discover/" },
                        { text: "Map-In-A-Box", url: "/software/map_in_a_box/" },
						{ text: "MapInfo Professional", url: "/software/mapinfo/" },
						{ text: "MapMarker", submenuId: "pim", submenuItems: [
                                { text: "United States", url:"/software/mapmarker/" },
                                { text: "Canada", url:"/software/mapmarker/mapmarkerplus_canada.html" }
                            ]
                        },                                                           
                        { text: "MapXtreme", url: "/software/mapxtreme/" },
                        { text: "PCensus", url: "/software/pcensus/" },
                        { text: "Profile Analyst for Geoscience", url: "/software/discover/profileanalyst.html" },
                        { text: "Vertical Mapper", url: "/software/vertical_mapper/" }
                    ],

                    "demographics": [
                        
                        { text: "United States", submenuId: "demous", url:"/demographics/usa/", submenuItems: [
                                { text: "AGS", url:"/demographics/usa/ags/" },
                                { text: "ESRI", url:"/demographics/usa/esri/" },
                                { text: "Nielsen Claritas", url:"/demographics/usa/claritas/" },
                                { text: "STI: PopStats", url:"/demographics/usa/sti/" },
                                { text: "Treo Health", url:"/demographics/usa/treo/" },
                                { text: "US Census", url:"/demographics/usa/census/" }
                                                                                           
                                                              
                                
                            ]
                        }, 
                        { text: "Canada", submenuId: "democn", url:"/demographics/canada/", submenuItems: [
                                { text: "CAP Crime Index", url:"/demographics/canada/capindex/" },
                                { text: "Environics Analytics", url:"/demographics/canada/environics/" },
                                { text: "MapInfo/PBBI Canada", url:"/demographics/canada/mapinfo_data/" },
                                { text: "Statistics Canada Census", url:"/demographics/canada/census/" }
                                
                            ]
                        }
                    
                    ],

                    "maps": [
                   		 
                   		 { text: "United States", submenuId: "mapsus", url:"/maps_and_data/usa/", submenuItems: [
                                { text: "Business Points", url:"/maps_and_data/usa/businesspoints.html" },
                                { text: "Census Boundaries", url:"/maps_and_data/usa/boundaries.html" },
                                { text: "Geocoders", url:"/maps_and_data/usa/geocoding.html" },
                                { text: "Postal Data", url:"/maps_and_data/usa/postal.html" },
                                { text: "Street Maps", url:"/maps_and_data/usa/streetmaps.html" },
                                                             
                                                             
                                { text: "Telecom Data", url:"/maps_and_data/usa/telecom/" },
                                { text: "Traffic Data", url:"/maps_and_data/usa/trafficmetrix.html" }
                                
                            ]
                        }, 
                   		 { text: "Canada", submenuId: "mapscn", url:"/maps_and_data/canada/", submenuItems: [
                               	{ text: "Base Maps", url:"/maps_and_data/canada/signum.html" },
								 { text: "Business Points", url:"/maps_and_data/canada/businesspoints.html" },
                                { text: "Census Boundaries", url:"/maps_and_data/canada/postal.html" },
                                { text: "Geocoders", url:"/maps_and_data/canada/geocoding.html" },
                                { text: "Postal Data", url:"/maps_and_data/canada/postal.html#postalcodecoords" },
                                { text: "Street Maps", url:"/maps_and_data/canada/" },
                            
                                { text: "Telecom Data", url:"/maps_and_data/canada/telecom.html" },
                                { text: "Vehicle Data", url:"/demographics/canada/mapinfo_data/tvio.html" }
                                                                
                            ]
                        }, 
                        
                        
                        
                        { text: "World", url: "/maps_and_data/world/" }
                    
                    ],

                    "industry": [
                    
                    	{ text: "Education", url: "/industry/education.html" },
                   		{ text: "Financial Services", url: "/industry/banking.html" },
                        { text: "Franchising", url: "/industry/franchising.html" },
                        { text: "Insurance", url: "/industry/insurance.html" },
                        { text: "Mining and Exploration", url: "/software/discover/" },
                        { text: "Political", url: "/industry/politics.html" },
                        { text: "Real Estate", url: "/industry/realestate.html" },
                        { text: "Retail", url: "/industry/retail.html" }
                        
                        
                    
                    ],

                    "solutions": [
                    	{ text: "Location Analysis", url: "/solutions/" },
                        { text: "Custom Software", url: "/software/custom/"}
                        
                    
                    ],
                    
                    "support": [
                    	
                    	{ text: "Discover", submenuID: "discsupport", url: "/software/discover/", submenuItems: [
                    			{ text: "Training", url: "/software/discover/midiscovertraining.html" },
                    			{ text: "User Group", url: "www.linkedin.com/groups?home=&gid=2517981" }
                    			]
                    	},
                    	{ text: "PCensus", submenuID: "pcsupport", url: "/software/pcensus/support.html", submenuItems: [
                    		{ text: "User Forum", url: "/forums.tetrad.ca/"}
                    		]    
                    	}           		
                    	],
                    
                    
                    "company": [
                    
                        { text: "About Tetrad", url: "/company/" },
                        { text: "Events", url: "/company/events.html" },
                        { text: "In the News", url: "/company/inthenews.html" },
                        { text: "Partners", url: "/company/partners.html" },
                        { text: "Want to Talk?", url: "/demo/reqsend.html" }
                        
                         ]

                };



                // Initialize the root menubar

                var oMenuBar = new YAHOO.widget.MenuBar("productsandservices");


                // Initialize the submenus of the items in the root menubar

                var oSoftware = new YAHOO.widget.Menu("software"),
                    oDemographics = new YAHOO.widget.Menu("demographics"),
                    oMaps = new YAHOO.widget.Menu("maps"),
                    oIndustry = new YAHOO.widget.Menu("industry"),
                    oSolutions = new YAHOO.widget.Menu("solutions"),
                    oSupport = new YAHOO.widget.Menu ("support"),
                    oCompany = new YAHOO.widget.Menu("company");


                /*
                     Add a property ("itemsData") to each submenu that 
                     is reference to the data for its items.
                     This data will be used in the "beforeshow" handler to add
                     the items to each submenu before it is displayed.
                */

                oSoftware.itemsData = oMenuData["software"];
                oDemographics.itemsData = oMenuData["demographics"];
                oMaps.itemsData = oMenuData["maps"];
                oIndustry.itemsData = oMenuData["industry"];
                oSolutions.itemsData = oMenuData["solutions"];
                oSupport.itemsData = oMenuData["support"];
                oCompany.itemsData = oMenuData["company"];


                // Assign event handlers

                // Add a "mouseover" handler to the menubar

                oMenuBar.mouseOverEvent.subscribe(cancelTimer);


                // Add a "beforeshow" event handler to each submenu

                oSoftware.beforeShowEvent.subscribe(onMenuBeforeShow, oSoftware, true);
                oDemographics.beforeShowEvent.subscribe(onMenuBeforeShow, oDemographics, true);
                oMaps.beforeShowEvent.subscribe(onMenuBeforeShow, oMaps, true);
                oIndustry.beforeShowEvent.subscribe(onMenuBeforeShow, oIndustry, true);
                oSolutions.beforeShowEvent.subscribe(onMenuBeforeShow, oSolutions, true);
                oSupport.beforeShowEvent.subscribe(onMenuBeforeShow, oSupport, true);
                oCompany.beforeShowEvent.subscribe(onMenuBeforeShow, oCompany, true);


                // Add a "mouseover" event handler to each submenu

                oSoftware.mouseOverEvent.subscribe(cancelTimer);
                oDemographics.mouseOverEvent.subscribe(cancelTimer);
                oMaps.mouseOverEvent.subscribe(cancelTimer);
                oIndustry.mouseOverEvent.subscribe(cancelTimer);
                oSolutions.mouseOverEvent.subscribe(cancelTimer);
                oSupport.mouseOverEvent.subscribe(cancelTimer);
                oCompany.mouseOverEvent.subscribe(cancelTimer);


                // Add a "mouseout" event handler to each submenu

                oSoftware.mouseOutEvent.subscribe(onSubmenuMouseOut, oSoftware, true);
                oDemographics.mouseOutEvent.subscribe(onSubmenuMouseOut, oDemographics, true);
                oMaps.mouseOutEvent.subscribe(onSubmenuMouseOut, oMaps, true);
                oIndustry.mouseOutEvent.subscribe(onSubmenuMouseOut, oIndustry, true);
                oSolutions.mouseOutEvent.subscribe(onSubmenuMouseOut, oSolutions, true);
                oSupport.mouseOutEvent.subscribe(onSubmenuMouseOut, oSupport, true);
                oCompany.mouseOutEvent.subscribe(onSubmenuMouseOut, oCompany, true);


                // Add the submenus to the items in the menubar 

                oMenuBar.getItem(0).cfg.setProperty("submenu", oSoftware);
                oMenuBar.getItem(1).cfg.setProperty("submenu", oDemographics);
                oMenuBar.getItem(2).cfg.setProperty("submenu", oMaps);
                oMenuBar.getItem(3).cfg.setProperty("submenu", oSolutions);
                oMenuBar.getItem(4).cfg.setProperty("submenu", oIndustry);
                oMenuBar.getItem(5).cfg.setProperty("submenu", oSupport);
                oMenuBar.getItem(6).cfg.setProperty("submenu", oCompany);


                // Add a "click" handler to the document

                YAHOO.util.Event.addListener(document, "click", hideSubmenus);


                /*
                    Add a "mouseover" and "mouseout" event handler each item 
                    in the menubar 
                */               

                var aMenuBarItems = oMenuBar.getItemGroups()[0],
                    oMenuItem,
                    i = aMenuBarItems.length - 1;

                do {

                    oMenuItem = aMenuBarItems[i];

                    oMenuItem.mouseOverEvent.subscribe(onMenuBarItemMouseOver, oMenuItem, true);
                    oMenuItem.mouseOutEvent.subscribe(onMenuBarItemMouseOut, oMenuItem, true);
                
                }
                while(i--);


                // Render the menubar

                oMenuBar.render();

                // Initialize Tree Navigation
                InitTree();
            }

            YAHOO.util.Event.addListener(window, "load", YAHOO.example.onWindowLoad);

	



