var submenuDelay = 2000; // ms

var lastDisplayedObj = null;
var delayedShowObj = null;

var submenuDelayFlag = 0;

var menuTimerId = 0;
var menuTimerDelay = 0;

function resetFlags() {
	submenuDelayFlag = 0;
}

function timerClear() {
	if ( menuTimerId > 0 ) {
		clearTimeout( menuTimerId );
	}
	menuTimerId = 0;
	menuTimerDelay = 0;
	delayedShowObj = null;
}

function showObjDelayed() {
	if ( lastDisplayedObj ) {
		lastDisplayedObj.style.display = 'none';
		lastDisplayedObj = delayedShowObj;
		lastDisplayedObj.style.display = 'block';
		delayedShowObj = null;
		timerClear();
	}
}

function timerSet( showObj, delay ) {
	// alert( "Timer set: " + showObj.id + ", " + delay );
	timerClear();
	delayedShowObj = showObj;
	menuTimerDelay = delay;
	menuTimerId = setTimeout( showObjDelayed, delay );
}

function timerReset() {
	if ( menuTimerId > 0 ) {
		clearTimeout( menuTimerId );
	}
	if ( menuTimerDelay > 0 && delayedShowObj ) {
		menuTimerId = setTimeout( showObjDelayed, menuTimerDelay );
	}
	else {
		menuTimerId = 0;
		delayedShowObj = null;
	}
}

// Menus, when scrolled over kill any delayed actions.
function showMenu( menuName ) {
	if ( lastDisplayedObj ) {
		lastDisplayedObj.style.display = 'none';
	}
	timerClear();
	resetFlags();
	submenuDelayFlag = 1;
	lastDisplayedObj = document.getElementById( menuName );
	if ( lastDisplayedObj ) {
		lastDisplayedObj.style.display = 'block';
	}
}

var d_idx = [ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' ];

function resetAllDetail( pageName ) {
	var obj = document.getElementById( pageName + "-main" );
	var i = 0; 
	if ( obj ) {
		obj.style.display = 'block';
		obj = document.getElementById( pageName + d_idx[i] );
		while ( obj && i < 26 ) {
			obj.style.display = 'none';
			i++;
			obj = document.getElementById( pageName + d_idx[i] );
		}
	}
}
// Pages will delay appearing by 2000 ms if the previous item scrolled over was a menu.
// They will also delay if the last item scrolled over had a detail screen.
function showPage( pageName ) {
	var obj = document.getElementById( pageName );
	if ( ! obj ) { return; } // Don't do anything if we can't find the item to display
	resetAllDetail( pageName );
	if ( submenuDelayFlag ) {
		timerSet( obj, submenuDelay );
		resetFlags();
	}
	else {
		timerClear();
		if ( lastDisplayedObj ) {
			lastDisplayedObj.style.display = 'none';
		}
		lastDisplayedObj = obj;
		lastDisplayedObj.style.display = 'block';
	}
}

// When an item with detail is scrolled over, there will be a delay
function showDetail( detailName ) {
	var obj = document.getElementById( detailName );
	if ( ! obj ) { return; } // Don't do anything if we can't find the item to display
	// Any timers are null and void at this point...
	resetFlags();
	timerClear();
	var parentId = obj.parentNode.id;
	obj = document.getElementById( parentId + "-main" );
	var i = 0;
	while ( obj && i < 26 ) {
		if ( obj.id == detailName ) {
			obj.style.display = 'block';
		}
		else {
			obj.style.display = 'none';
		}
		obj = document.getElementById( parentId + d_idx[i] );
		i++;
	}
}
