/*
** Scroller by Mike Vierow @ Hane Chow, Inc.
** Negotiate available display space to place an html element. A rough, first attempt.
** 
** Requires: Prototype 
*/

	// From MS http://msdn.microsoft.com/en-us/library/ms537509(VS.85).aspx
	function getInternetExplorerVersion()
	// Returns the version of Internet Explorer or a -1
	// (indicating the use of another browser).
	{
		var rv = -1; // Return value assumes failure.
		if (navigator.appName == 'Microsoft Internet Explorer')
		{
			var ua = navigator.userAgent;
			var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
			if (re.exec(ua) != null)
				rv = parseFloat( RegExp.$1 );
		}
		return rv;
	}


	var ieversion = getInternetExplorerVersion();
	var lastpos = 0;
	var st;

	function fixnav () {
		var banner = $('banner');
		var nav = $('contentcolumn');
		var background = $('fixedbackground');

		if (nav && background) {
	
			if (document.viewport.getWidth() > background.getWidth()) {
	
				if (ieversion != 7) background.style.position = 'fixed';
	
				if (document.viewport.getHeight() > nav.getHeight() + banner.getHeight() && ieversion != 7 ) {
	
					var queue = Effect.Queues.get('scroller');
					queue.each(function(e) { e.cancel(); });
					clearTimeout(st);
	
					nav.style.left = 'auto';
					nav.style.top = 'auto';
					nav.style.position = 'fixed';
				} else {
					scrollnav();
				}
	
			} else {
				background.style.position = '';
				nav.style.left = '';
				nav.style.top = '';
				nav.style.position = '';
				scrollnav();
			}

		}
	}

	function scrollnav (delay) {
		var nav = $('contentcolumn');

		if (nav) {

			var navheight = nav.getHeight();
			var navdepth = nav.positionedOffset().top;
			var bannerheight = $('banner').getHeight();
			var viewheight = document.viewport.getHeight();
			var pagedepth = document.viewport.getScrollOffsets().top;
			var offsety = 0;
	
			if ( viewheight - bannerheight < navheight ) {
				if (pagedepth >= lastpos && nav.style.position == '') {
					if ( pagedepth + viewheight > navdepth + navheight ) {
						offsety = pagedepth + viewheight - navheight;
					}
				} else {
					if ( pagedepth + bannerheight < navdepth ) {
						offsety = pagedepth + bannerheight;
					} else {
						if (nav.style.position == 'fixed') {
							nav.style.top = pagedepth + bannerheight + 'px';
							nav.style.position = '';
						}
	
					}
				}
			} else {
				if ( nav.getStyle('position') == 'absolute')
					offsety = pagedepth + bannerheight;
			}
	
			lastpos = pagedepth;
	
			if (offsety) {
				nav.style.position = '';
	
				if (!delay) {
					nav.style.top = offsety + 'px';
				} else {
					var queue = Effect.Queues.get('scroller');
					queue.each(function(e) { e.cancel(); });
					clearTimeout(st);
					st = setTimeout(function () {
						new Effect.Morph(nav, { style: 'top: ' + offsety +'px;', duration: 0.25, queue: { scope: 'scroller', position: 'end', limit: 2 } });
					},delay);
	
				}
	
			}

		}
	}


	if (ieversion == -1 || ieversion > 6) {
		Event.observe(window, 'load', fixnav );
		Event.observe(window, 'resize', fixnav );
		Event.observe(window, 'scroll', function () { scrollnav(100) });
	}

