Ext.onReady(function() {
	// Setup some styles for the content-container
	Ext.fly('content-container').setStyle({'height': '420px', 'overflow': 'hidden'});
	
	// Setup some styles for the menu-container
	var subMenus = Ext.DomQuery.select('#menu-container div.menu');
	for (var i = 0; i < subMenus.length; i++) {
		Ext.fly(subMenus[i]).setStyle({'position': 'absolute', 'visibility': 'hidden'});
	}
	
	// Setup listeners for the menu system
	var mainMenuLinks = Ext.DomQuery.select('#menu-container div.link a');
	for (var i = 0; i < mainMenuLinks.length; i++) {
		var link = Ext.fly(mainMenuLinks[i]);
		link.addListener('click', loadContent, this, {stopEvent: true});
	}
	
	var subMenuLinks = Ext.DomQuery.select('#menu-container div.menu a');
	for (var i = 0; i < subMenuLinks.length; i++) {
		var link = Ext.fly(subMenuLinks[i]);
		link.addListener('click', scrollContent, this, {stopEvent: true});
	}
	
	// Setup the disclaimer slide out
	var disclaimerButton = Ext.get('disclaimer-button');
	var disclaimerLayer = Ext.get('disclaimer-layer');
	if (disclaimerButton && disclaimerLayer) {
		disclaimerLayer.moveTo(disclaimerButton.getLeft() - disclaimerLayer.getWidth(), disclaimerButton.getTop() + 7);
		
		disclaimerButton.addListener('mouseover', function() {
			disclaimerLayer.slideIn('r');
		});
		disclaimerButton.addListener('mouseout', function() {
			disclaimerLayer.slideOut('r');
		});
	}
});

function loadContent(e, t, o) {
	var url = t.href.replace('http://' + location.host + '/', '');
	var contentContainer = Ext.get('content-container');
	var loadingMask = Ext.get('loading-mask');
	
	loadingMask.moveTo(contentContainer.getLeft() - 10, contentContainer.getTop());
	loadingMask.show();
	
	// Clear the Shadowbox cache
	Shadowbox.clearCache();
	
	contentContainer.load({
		url: '/assets/scripts/loader.php',
		params: {'page': '/' + url},
		method: 'post',
		scripts: true,
		scope: this,
		callback: function() {
			// Blur the target link
			t.blur();
			
			// Fade out the loading mask
			loadingMask.fadeOut.defer(250, loadingMask);
			
			// Setup the sliding divs
			var nodes = Ext.DomQuery.select('#content-container > div');
			for (var i = 0; i < nodes.length; i++) {
				var node = Ext.fly(nodes[i]);
				node.setStyle({'background-color': '#fff', 'position': 'absolute', 'width': '930px', 'visibility': 'hidden', 'z-index': '100'});
			}
			
			var firstNode = Ext.get(Ext.DomQuery.selectNode('#content-container > div:first-child'));
			if (firstNode) {
				firstNode.setStyle({visibility: 'visible'});
				firstNode.addClass('activeNode');
			}
				
			// Slide out the active menu and slide in the target menu
			var target = Ext.get(t);
			var outMenu = Ext.get(Ext.DomQuery.selectNode('#menu-container div.activeMenu'));
			var inMenu = Ext.get(Ext.DomQuery.selectNode('div.menu', Ext.get(target.parent().parent()).dom.id));
			
			if (outMenu != inMenu) {
				// Slide out the active menu
				if (outMenu) {
					outMenu.removeClass('activeMenu');
					outMenu.slideOut('l', {easing: 'easeNone'});
				}
				
				// Slide in the target menu
				if (inMenu && target.parent() != inMenu) {
					inMenu.addClass('activeMenu');
					inMenu.moveTo(target.getRight() + 20, target.getTop());
					inMenu.slideIn('l', {easing: 'easeOut'});
				}
			}
			
			// Set the target links class
			var outTarget = Ext.get(Ext.DomQuery.selectNode('#menu-container div.link a.activeLink'));
			var inTarget = Ext.get(t);
			
			// Set the target links class
			if (outTarget) {
				outTarget.removeClass('activeLink');
			}
			
			if (inTarget) {
				inTarget.addClass('activeLink');
			}
			
			// Remove the active link class from the active menu
			var activeLink = Ext.get(Ext.DomQuery.selectNode('#menu-container div.activeMenu a.activeLink'))
			if (activeLink) {
				activeLink.removeClass('activeLink');
			}
			
			// Reinitialize Shadowbox
			Shadowbox.setup();
			
			// Track this request for analytics
			pageTracker._trackPageview(url);
		}
	});
}

function scrollContent(e, t, o) {
	// Blur the target link
	t.blur();
	
	var targetLink = t.href.replace('http://' + location.host + '/', '').replace('/', '_').replace('.php', '');
	
	var outNode = Ext.get(Ext.DomQuery.selectNode('#content-container > div.activeNode'));
	var inNode = Ext.get('_' + targetLink);
	
	if (outNode && inNode && outNode != inNode) {
		// Hide any flash elements before the slide
		hideFlash();
	
		// Slide out the active node
		outNode.removeClass('activeNode');
		outNode.setStyle({'z-index': '100'});
		outNode.slideOut('l', {easing: 'easeNone'});
		
		// Slide in the target node
		inNode.addClass('activeNode');
		inNode.setStyle({'z-index': '1000'});
		inNode.slideIn('r', {block: true, easing: 'easeNone', callback: showFlash});
		
		// Set the target links class
		var outTarget = Ext.get(Ext.DomQuery.selectNode('#menu-container div.activeMenu a.activeLink'));
		var inTarget = Ext.get(t);
		
		if (outTarget) {
			outTarget.removeClass('activeLink');
		}
		if (inTarget) {
			inTarget.addClass('activeLink');
		}
	}
}

function hideFlash() {
	var nodes = Ext.DomQuery.select('#content-container embed');
	for (var i = 0; i < nodes.length; i++) {
		var node = Ext.fly(nodes[i]);
		node.parent().setStyle({'background-position': '0 0', 'background-repeat': 'no-repeat'});
		node.setStyle({'visibility': 'hidden'});
	}
}

function showFlash() {
	var nodes = Ext.DomQuery.select('#content-container > div.activeNode embed');
	for (var i = 0; i < nodes.length; i++) {
		var node = Ext.fly(nodes[i]);
		node.setStyle({'visibility': 'visible'});
		node.parent().setStyle.defer(10, node.parent(), [{'background-position': '-1000px 0px'}]);
	}
}

function fireClick(t) {
	if (Ext.isIE) {
		var eventObj = document.createEventObject();
		Ext.get(t).dom.fireEvent('onclick', eventObj);
	} else {
		var eventObj = document.createEvent('MouseEvents');
		eventObj.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
		Ext.get(t).dom.dispatchEvent(eventObj);
	}
}