if ( typeof WDOT == 'undefined' ) {
	WDOT = {};
}

WDOT.Hubs = {
	currentPageBase : String,
	
	init : function()
	{
		if (jQuery('div.content-hubs-body').length) {
			with (WDOT.Hubs) {
				Menu.init();
				Tabs.init();
				jQuery(window).load(Articles.init);
				var hash = window.location.hash;
				if (hash && hash.indexOf("#?") != 0) {
					var url = hash.split('#')[1];
					var hashParts = url.split('?');
					var query = '';
					url = hashParts[0];
					if (hashParts.length > 1) {
						query = hashParts[1];
						query += '&'
					}
					query += 'ajax=1';
					var tabBtn = Tabs.tabBtns.filter('[href*=' + unescape(url) + ']');
					if (tabBtn.length) {
						Tabs.loadExternalPage(url+'?'+query);
						Tabs.activateTabBtn(tabBtn);
					} else {
					    currentPageBase = url;
					}
				}
			}
		}
	},
	
	reinitialize : function()
	{
		with (WDOT.Hubs) {
			Articles.init();
		}
	},
	
	Menu : {
		mainNav : Object,
	    menuItems : Object,
	    subMenus : Object,
	    tertiaryMenus : Object,
		btnShowHide : Object,
		canShowHideNav : Boolean = true,
		hasSeenOpenMenu : Boolean = false,
		
		/*
	     * Activate menu behaviors.
	     */
		init : function()
		{
			with (WDOT.Hubs.Menu) {
				mainNav = jQuery('div.mainNav');
				btnShowHide = jQuery('div.mainNav>div.inner>div.showHide>a');
				
			    mainNav.find('ul>li').not('.current').children('ul').hide();
			    mainNav.find('ul>li.current>ul').show();
			    mainNav.find('ul>li.current>ul>li.current>a').removeClass('secondary1_text').addClass('primary1_text');

				if (!hasSeenOpenMenu) {
					hasSeenOpenMenu = readCookie('wdot_hubs_has_seen_menu');
					if (hasSeenOpenMenu) {
						btnShowHide.addClass('show');
						mainNav.css('left',-225);
					} else {
						setTimeout(closeSideMenu,3000);
						createCookie('wdot_hubs_has_seen_menu', 'true', 365);
					}
				}

				btnShowHide.click(onBtnShowHideClick);
			}
		},
		
		closeSideMenu : function()
		{
			WDOT.Hubs.Menu.canShowHideNav = false;
			WDOT.Hubs.Menu.btnShowHide.addClass('show');
			WDOT.Hubs.Menu.closeCurrentSubMenu();
			WDOT.Hubs.Menu.mainNav.animate({
				'left': -225
			}, {
				'duration': 200,
				'complete': WDOT.Hubs.Menu.onMenuShowHideComplete
			});
		},
		
		onBtnShowHideClick : function(e)
		{
			var self = jQuery(this);
			var left = parseInt(WDOT.Hubs.Menu.mainNav.css('left'));
			if (left == 0 && WDOT.Hubs.Menu.canShowHideNav) {
				WDOT.Hubs.Menu.closeSideMenu();
			} else if (WDOT.Hubs.Menu.canShowHideNav) {
				WDOT.Hubs.Menu.canShowHideNav = false;
				self.removeClass('show');
				WDOT.Hubs.Menu.mainNav.animate({
					'left': 0
				}, {
					'duration': 200,
					'complete': WDOT.Hubs.Menu.onMenuShowHideComplete
				});
			}
			return false;
		},
							
	    closeSubMenus : function(item)
	    {
		    jQuery(item).parents('li').eq(0).siblings('li').not('.current').children('ul').slideUp();
	    },
		
		closeCurrentSubMenu : function()
		{
			WDOT.Hubs.Menu.mainNav.find('ul>li>ul:visible').slideUp();
		},
		
		onMenuShowHideComplete : function()
		{
			WDOT.Hubs.Menu.canShowHideNav = true;
		}
	},
	
	Tabs : {
		
		tabBtnsContainer : Object,
		tabBtns : Object,
		
		init : function()
		{
			with (WDOT.Hubs.Tabs) {
				jQuery(window).load(
					function() {
						jQuery.address.externalChange(WDOT.Hubs.Tabs.onAddressChange);
					}
				);
				tabBtnsContainer = jQuery('#hubs-tabs');
				tabBtns = tabBtnsContainer.find('li>a');
				tabBtns.unbind('click').click(onTabBtnClick);
				tabBtns.hover(onTabBtnOver,onTabBtnOut);
				tabBtns.each(
					function() {
						var self = jQuery(this);
						var href = self.attr('href');
						if ( self.hasClass('current') ) {
							self.removeClass('current');
							activateTabBtn(self);
						}
						if ( typeof href != 'undefined' && href.indexOf('/') == 0 ) {
							href = '#'+href;
							self.attr('href',href);
						}
					}
				);
			}
		},
		
		deactivateTabBtns : function()
		{
			WDOT.Hubs.Tabs.tabBtns.removeClass('reverse_text').removeClass('secondary1_bg');
		},
		
		activateTabBtn : function(jqTabBtn)
		{
		    if (jqTabBtn.length) {
			    WDOT.Hubs.Tabs.deactivateTabBtns();
			    jqTabBtn.css('color','').addClass('reverse_text').addClass('secondary1_bg');
			}
		}, 
		
		onTabBtnClick : function(e)
		{
			var self = jQuery(this);
			var href = self.attr('href').split('#')[1];
			var query = '';

			WDOT.Hubs.Tabs.activateTabBtn(self);
			
			if (typeof href != 'undefined') {
				if (href.indexOf('/') == 0) {
					// External resource
					if ( href.indexOf('?') == -1 ) query +=  '?';
					query += 'ajax=1';
					WDOT.Hubs.Tabs.loadExternalPage(href+query);
				}
			}
			
			jQuery.address.value(href);
			
			return false;
		},
		
		onTabBtnOver : function(e)
		{
			var self = jQuery(this);
			var color = self.children('span.tabNum').css('color');
			jQuery(this).css('color',color);
		},
		
		onTabBtnOut : function(e)
		{
			jQuery(this).css('color','');
		},
		
		onAddressChange : function(address)
		{
			var Tabs = WDOT.Hubs.Tabs;
			var basePage = window.location.pathname;
			var hash = window.location.hash;
			var query = window.location.search.substring(1);
			var hashQuery = '';
				
			if (hash != '' && hash.indexOf("#?") != 0) {
				hashParts = hash.split('?');
				url = hashParts[0].substring(1);
				if (hashParts.length > 1) {
					hashQuery = hashParts[1];
					hashQuery += '&'
				}
				hashQuery += 'ajax=1';
				var tabBtn = Tabs.tabBtns.filter('[href*=' + unescape(url) + ']');
				if (tabBtn.length && url.indexOf('/') == 0) {
					Tabs.loadExternalPage(url+'?'+hashQuery);
					Tabs.activateTabBtn(tabBtn);
				}
			} else {
				// Do not try to highlight buttons in sitecore preview
				if ( basePage != '/' ) {
					var tabBtn = Tabs.tabBtns.filter('[href*=' + basePage + ']');
					Tabs.activateTabBtn(tabBtn);
				}
				if ( query ) {
					hashQuery = query + '&'
				}
				hashQuery += 'ajax=1';
				Tabs.loadExternalPage(basePage+'?'+hashQuery);
			}
		},
		
		loadExternalPage : function(url)
		{
		    var newPage = url.split('?')[0];
		    if (newPage != WDOT.Hubs.currentPageBase) {
			    var content = jQuery('#content');
			    var contentHeight = content.height();
			    content.css({
				    'min-height': contentHeight,
				    'background': 'transparent url(/images/ajax-loader.gif) no-repeat center 200px'
			    });
			    content.find('div.page').fadeOut(400,
				    function() {
					    jQuery.get(url, null, WDOT.Hubs.Tabs.onNewPageDataLoaded, 'html');
					    WDOT.Hubs.currentPageBase = newPage;
				    }
			    );
			}
		},
		
		onNewPageDataLoaded : function(data, textStatus, xhr)
		{
			var container = jQuery('#content');
			var currentPage = container.find('div.page');
			if (currentPage.length = 1) {
				container.find('div.page').remove();
			}
			container.append(data);
			WDOT.Hubs.reinitialize();
			var nextPage = container.find('div.page');
			nextPage.hide().fadeIn(function() {
			    if (HubDirectories != null) {
			        HubDirectories.reinitialize();
			    }
			});
			container.css({
				'min-height': '',
				'background': ''
			});
		}
		
	},
	
	Articles : {
		init : function()
		{
			// sidebar first
			var sideArticles = jQuery("div.sidebar .hubs-featured-articles .hubs-featured-article");
			var mainArticles = jQuery("div.main .hubs-featured-articles .hubs-featured-article");
			
			if (sideArticles.length) {
				var sideArticlesEven = sideArticles.filter(':even');
				sideArticlesEven.removeClass("secondary1_bg").addClass("secondary2_bg");
				sideArticlesEven.find('a.hubs-featured-article-more').removeClass("secondary2_bg").addClass("secondary1_bg");
			}
			
			if (mainArticles.length) {
				// then main to set up slightly unusual alternating colors
				mainArticles.each(function(index){
					var row = Math.floor(index / 2);
					if ((row % 2) != (index % 2)) {
						jQuery(this).removeClass("secondary1_bg").addClass("secondary2_bg");
						jQuery("a.hubs-featured-article-more", this).removeClass("secondary2_bg").addClass("secondary1_bg");
					}
				});
				// odd divs need to have a .last added, to remove whitespace on the right
				mainArticles.filter(':odd').addClass("last");
				
				//also need to equalize height of side-by-side articles in the main column
				mainArticles.filter(':even').each(function (index) {
					var left = jQuery(this);
					var right = jQuery(this).next();
					var leftHeight = left.height();
					var rightHeight = right.height();
					var height = leftHeight > rightHeight ? leftHeight : rightHeight;
					left.height(height);
					right.height(height);
				});
			}

		}
	}
}


/*
 * Utility class that abstracts history behavior.
 * All changes to page state that should interact with the browser history should happen
 * via the WDOT.Address.stateParam() method.
 */
WDOT.Address = {
	/*
	 * gets or sets a state var
	 * set : void stateParam(String name, String value)
	 * get : String stateParam(String name)
	 */ 
	stateParam: function(name, value){
		try {
			if (typeof name != 'undefined') {
				if (typeof value == 'undefined') {
					return jQuery.address.parameter(name);
				}
				else {
					jQuery.address.strict(false);
					jQuery.address.parameter(name, value);
					jQuery.address.strict(true);
				}
			}
			return null;
		} catch (error) {
			console.log(error);
		}
	}
}

jQuery(WDOT.Hubs.init);









