SmartNav.isSupported = function() {
	var ua = navigator.userAgent;
	var ver = navigator.appVersion;
	var dom = Boolean(document.getElementById);
	var mac = ua.indexOf("Mac") != -1;
	var ns4 = Boolean(document.layers);
	var ie4 = document.all && !dom;
	var op6 = document.opera && parseFloat(ver) < 7;
	return dom && !mac && !ns4 && !ie4 && !op6;
}
SmartNav.cssNS4 = function() {
	if(document.layers)
		document.write('<link href="smartnav/styles/ns4.css" rel="stylesheet" type="text/css">');
}
function SmartNav(container, animationSpeed, animationAccel) {
	if( !SmartNav.isSupported() ) return false; // don't do anything in non-DOM browsers
	var headers = []; // store headers here
	var currentIndex = -1;
	var animationInProgress = false;

	this.Unload = function Unload() {
		for(var i = 0; i < headers.length; i++) headers[i] = null;
		headers = null;
	}
	this.AddNav = function AddNav(header, navItems) {
		var index = headers.length;
		headers[index] = header;
		if(navItems) {
			navItems.className = "navItems";
			var expanded = false;
			var isAnimating = false;
			var expandedHeight = navItems.offsetHeight;
			header.onclick = function ToggleNav(e, fromForceHide) {
				if(!isAnimating && (!animationInProgress || fromForceHide)) {
					var points = [1, expandedHeight];
					if(expanded) points.reverse(); // animate the other way if already open
					var path = new Toolkit.Drawing.Curves.Line([ points[0] ], [ points[1] ]);
					var anim = new Toolkit.Drawing.Animation(path, animationSpeed, animationAccel);
					anim.onstart = function start(e) {
						isAnimating = true;
						animationInProgress = true;
						if(!expanded) {
							for(var i = 0; i < headers.length; i++) {
								if(i != index) headers[i].SmartNavForceHide();
							}
							navItems.style.display = "block";
							Toolkit.Styles.addClass(header, "expanded");
						} else {
							Toolkit.Styles.removeClass(header, "expanded");
						}
					}
					anim.onanimate = function animate(e) {
						if( !isNaN(e.coordinates[0]) )
							navItems.style.height = parseInt(e.coordinates[0]) + "px";
					}
					anim.onend = function end(e) {
						expanded = !expanded
						if(!expanded) navItems.style.display = "none";
						isAnimating = false;
						animationInProgress = false;
					}
					anim.start();
					return false;
				} else
					return true;
			}
			Toolkit.Styles.setStyle(navItems, "width: 100%; height: 1px; overflow: hidden; display: none;");
		} else { // No navItems
			var expanded = false;
			header.style.cursor = "pointer";
			header.onclick = function NoMenuClick(e, forceHide) {
				if(forceHide) {
					Toolkit.Styles.removeClass(this, "expanded-empty");
					expanded = false;
				} else {
					Toolkit.Styles.addClass(this, "expanded-empty");
					expanded = true;
					for(var i = 0; i < headers.length; i++) {
						if(i != index) headers[i].SmartNavForceHide();
					}
				}
				return true;
			}
		}
		header.SmartNavForceHide = function ForceHide() {
			if(!isAnimating && expanded) {
				this.onclick({}, true);
			}
		}
	}
	this.ShowPersistentNav = function ShowPersistentNav() {
		var links = container.getElementsByTagName("A");
		var node = null;
		var i = 0;
		while(node == null && i < links.length) {
			if(links[i] == location.href) node = links[i];
			i++;
		}
		if(node) { // we have a persistent link
			if( Toolkit.Styles.hasClass(node.parentNode, "navTitle") ) {
				node.parentNode.onclick();
			} else {
				node = Toolkit.DOM.getPreviousElement(node.parentNode.parentNode);
				node.onclick();
			}
		}
	}
	container.onselectstart = function noSelect(e) {
		if(!e) e = window.event;
		e.returnValue = false;
		e.preventDefault = true;
	}
	var arrowExpanded = new Image();
		arrowExpanded.src = "/smartnav/graphics/smartNav-arrow-expanded.gif";
	var arrowCollapsed = new Image();
		arrowCollapsed.src = "/smartnav/graphics/smartNav-arrow-collapsed.gif";
	var ploadDiv = document.createElement('div');
		ploadDiv.id = "SmartNavLoadCss";
		ploadDiv.innerHTML = '<img src="' + arrowExpanded.src + '"><img src="' + arrowCollapsed.src + '">';
		document.body.appendChild(ploadDiv);
		ploadDiv = null;
}
function InitSmartNav() {
	if( SmartNav.isSupported() ) {
		var cont = document.getElementById("Nav");
		var sections = Toolkit.DOM.getElementsByClassName("navSection", "div", cont);
		var title = Toolkit.DOM.getFirstChildElement(sections[0]), subnav;

		var Nav = new SmartNav(cont, 250, -1);
		for(var i = 0; i < sections.length; i++) {
			title = Toolkit.DOM.getFirstChildElement(sections[i]);
			subnav = Toolkit.DOM.getNextElement(title);
			Nav.AddNav(title, subnav);
		}
		Nav.ShowPersistentNav();
		window.onunload = Nav.Unload;
	}
}

// Add NS4 CSS if we need to
SmartNav.cssNS4();
