
var xOp8 = xUA.indexOf('opera 8');

// var max = 10;

//function oalert(m) {
//	if(!max) return;
//	--max;
//	if(xOp8) alert(m);
//}

function dxImageLoaded(e) {
	if(!(e=xGetElementById(e))) return false;
	var minHeight = 100;
	if(!xDef(e.complete)) {
		if(xHeight(e) >= minHeight)
			return true;
		else
			return false;
	}
	if(!e.complete) {
		return false;
	}
	else if(xDef(e.naturalWidth) && e.naturalWidth == 0) {
		return false;
	}
	else {
		if(xHeight(e) >= minHeight)
			return true;
		else
			return false;
	}
}

function dxUnsnap(e) {
	if(!(e=xGetElementById(e))) return false;
	if(e.style && xDef(e.style.position)) {
		e.style.position = 'absolute';
		return true;
	}
	return false;
}

function dxResnap(e) {
	if(!(e=xGetElementById(e))) return false;
	if(e.style && xDef(e.style.position)) {
		e.style.position = 'static';
		return true;
	}
	return false;
}

var haveImage = false;
var animate = true;
var linkIsDefault = true;
var lastUpdate = void 0;



function dxToggleTextNav() {
	if( !haveImage )
		return;

	lastUpdate = void 0;

	if( animate ) {
		animate = false;
		dxResnap('crux');
	} else {
		animate = true;
		dxUnsnap('crux');
	}

	update();
}
	

{
	var center = function(e) {
		return new Array(
			(xClientWidth()-xWidth(e)) >> 1,
			(xClientHeight()-xHeight(e)) >> 1
		);
	};

	var recenter = function(e) {
		if( dxUnsnap(e) ) {
			var minTop = 5;
			var minLeft = 0;
			for(var i = 0; i < 4; ++i) {
				var c = center(e);
				if( c[0] < minLeft )
					c[0] = minLeft;
				if( c[1] < minTop )
					c[1] = minTop;
				xMoveTo(e,c[0],c[1],500);
			}
		}
	};

	var getTicks = function(d) {
		// Returns a number of milliseconds since the top
		// of the hour.  Add 3 600 000 to advance it by an hour.
		// pass d = new Date();
		return (d.getUTCMinutes() * 60000) +
			(d.getUTCSeconds() * 1000) + d.getUTCMilliseconds();
	};

	var diffTicks = function(earlier,later) {
		if( !xDef(earlier) )
			return -1;

		var e2 = getTicks(earlier);
		var l2 = getTicks(later);
		var dif = l2 - e2;

		if(dif < 0) {
			l2 += 3600000;
			dif = l2 - e2;
			if(dif < 0)
				return -1;
		}

		return dif;
	};


	var update = function() {
		var now = new Date();
		var elapsed = diffTicks(lastUpdate, now);

		var updateInterval = 400;

		if( (elapsed < (updateInterval-100)) && (elapsed >= 0) ) {
			return false;
		}
		//else {
		//}

		// Is the image there?
		// haveImage = ( xHeight('navimage') < 100 ) ? false : true;
		//if( Image.complete ) {
		//	haveImage = xGetElementById('navimage').complete;
		//}
		var haveImageNow = dxImageLoaded('navimage');

		if( haveImageNow != haveImage ) {
			if(haveImageNow)
				animate = true;
		}
		haveImage = haveImageNow;

		// If the image isn't loaded, undisplay it
		if( !haveImage ) {
			xHide('navimage');
			dxUnsnap('navimage');
		}
		else {
			dxResnap('navimage');
			xShow('navimage');
		}

		// If the image isn't displayed, we're in non-animate
		if( !haveImage )
			animate = false;

		/* modes:
			haveImage	animate
			0			0		Text visible, link "Text Navigation" => #textNavigation, retext invisible.
			0			1		Pre-empted (if !haveImage, animate = false
			1			0		Text visible, link "Hide Text Navigation" => #top, retext visible.
			1			1		Text not visible, link "Text Navigation" => #textNavigation, retext visible.
		*/

		var textDisplay = !animate;
		var linkDefault = (haveImage && animate) || (!haveImage && !animate);
		var retextDisplay = haveImage;

		xDisplay('text', (textDisplay ? 'block' : 'none'));
		xDisplay('retext', (retextDisplay ? 'block' : 'none'));

		if( linkDefault != linkIsDefault ) {
			var link = xGetElementById('textNavLink');
			var ilink = xGetElementById('imageNavLink');

			if( link ) {
				if( linkDefault ) {
					link.innerHTML = "Text Navigation";
					link.href = "#textNavigation";
					if( ilink ) ilink.href = "#textNavigation";
				} else {
					link.innerHTML = "Hide Text Navigation";
					link.href = "#top";
					if( ilink ) ilink.href = "#top";
				}
			}
			linkIsDefault = linkDefault;
		}

		if(animate)
			recenter('crux');

		lastUpdate = now;
		window.setTimeout("update()",updateInterval);
	};

	window.onload=function() {
		update();
	};

	window.onresize			= update;
	window.onmousemove		= update;
	window.onfocus			= update;
	window.onblur			= update;
}
