/**
 * navigationhandler.js
 */

var currentNode = null;
var currentPage = -1;
var assessmentNode = "";
lastVisitedPage = -1;

function gotoBranch( branchId )
{

	var found = false;
	var node = null;
	
	for ( i = 0; i < parent.realms_navigation.courseStructure.length && !found; i++ )
	{
		if( parent.realms_navigation.courseStructure[ i ][ 0 ] == branchId )
		{
			found = true;
			node = parent.realms_navigation.courseStructure[ i ];
			
		}
		
	}

	if ( found )
	{
		currentNode = node;
		showPage( currentNode[ 0 ] );
	}
	

}

function showPage()
{

    var url = courseStructure[ currentPage ][ 0 ];
    var regexp = /\.xml/gi
    var baseURL = parent.location.href;
    baseURL = baseURL.substring( 0, baseURL.lastIndexOf( "/" )); 
    url = baseURL + '/content/' + url.replace( regexp, '.html' );
    parent.frames[ 'realms_content' ].location.href = url;

    setBreadcrumb();     

	// Enable/disable next/prev buttons as required
	if ( isInAssessment() && !isExpandedPool() )
	{
	
		if ( isQuestion() )
		{
			disableNext();
			disablePrevious();
		}
		
		if ( isResultPage() )
		{
			disablePrevious();
		}
	}
	else
	{
		if ( currentPage < courseStructure.length - 1 )
		{
			enableNext();
		}
		else 
		{
			disableNext();
		}
		
		if ( currentPage > 0 )
		{
			enablePrevious();			
		}
		else
		{
			disablePrevious();
		}
		
	}
	
}

function setBreadcrumb()
{

	var breadcrumbText = parent.findObject( "breadcrumb", false, window );
	
	if ( breadcrumbText != null )
	{
		if ( isInAssessment() && !isExpandedPool() )
		{
			breadcrumbText.innerHTML = courseStructure[ courseStructure[ currentPage ][ 8 ] ][ 1 ] + " Page " + ( currentAssessmentPage + 1 ).toString() + " of " + ( assessmentSection.length ).toString();
		}
		else
		{		
			if ( currentPage > -1 && courseStructure[ currentPage ][ 5 ] == "l" )
		    {	
				breadcrumbText.innerHTML = courseStructure[ courseStructure[ currentPage ][ 8 ] ][ 1 ] + " Page " + courseStructure[ currentPage ][ 6 ] + " of " + courseStructure[ currentPage ][ 7 ];
			}
			else
			{
				breadcrumbText.innerHTML = "";
			}			
		}
	}	
}

function jumpToPage( pageReference )
{

	var found = false;
	var i = 0;
	var j = 0;
	
	for ( i = 0; i < courseStructure.length && !found; i++ )
	{
		if ( courseStructure[ i ][ 2 ] == pageReference )
		{

			for ( j = i; j < courseStructure.length && courseStructure[ j ][ 5 ] == "b"; j++ );
			
			if ( j < courseStructure.length && courseStructure[ j ][ 5 ] == "l" )
			{
				found = true;
			}
		}
	}
	
	if ( found )
	{
		currentPage = j;

		if ( isInAssessmentSection( currentPage ) )
		{
			setInAssessment( true, currentPage );
		}
		else
		{
			setInAssessment( false );
		}
		
		showPage();
		setDebugInfo();
	}
	
}

function jumpToPageByName( pageName )
{

	var found = false;
	var i = 0;
	var j = 0;
	
	for ( i = 0; i < courseStructure.length && !found; i++ )
	{
		if ( courseStructure[ i ][ 0 ] == pageName )
		{

			for ( j = i; j < courseStructure.length && courseStructure[ j ][ 5 ] == "b"; j++ );
			
			if ( j < courseStructure.length && courseStructure[ j ][ 5 ] == "l" )
			{
				found = true;
			}
		}
	}
	
	if ( found )
	{
		currentPage = j;

		if ( isInAssessmentSection( currentPage ) )
		{
			setInAssessment( true, currentPage );
		}
		else
		{
			setInAssessment( false );
		}
		
		showPage();
		setDebugInfo();
	}
	
}

function findPage( level, pageReference )
{
	
	var i = 0;
	var retval = null

	if ( level instanceof RealmsNode )
	{
	    if ( level.getPageReference() == pageReference )
	    {
	        retval = level;
	    }
	}
	else
	{

	    for ( i = 0; i < level.items.length && retval == null; i++ )
		{
			retval = findPage( level.items[ i ], pageReference );
		}
	}
	
	return retval;
        
}

function nextPage()
{

	// If in the assessment then see if we atre going beyond the end...
	
	if ( isInAssessment() && !isExpandedPool() )
	{
		if ( currentAssessmentPage < assessmentSection.length )
		{
			currentAssessmentPage++;
			currentPage = assessmentSection[ currentAssessmentPage ][ 0 ];
			showPage();
		}
		else
		{
			showMenu();
		}
		setDebugInfo();
	}
	else
	{
		if ( currentPage < courseStructure.length - 1 )
		{
			while ( courseStructure[ ++currentPage ][ 5 ] == "b" && currentPage < courseStructure.length - 1 );
			
			if ( isInAssessmentSection( currentPage ) )
			{
				setInAssessment( true, currentPage );
			}
			else
			{
				setInAssessment( false );
			}
			
			if ( courseStructure[ currentPage ][ 5 ] == "b" )
			{
				showMenu();
			}
			else
			{
				showPage();
			}
			setDebugInfo();
		}
	}
	
}

function prevPage()
{

	if ( isInAssessment() && !isExpandedPool() )
	{
	
		if ( currentAssessmentPage > 0 )
		{
			currentAssessmentPage--;
			currentPage = assessmentSection[ currentAssessmentPage ][ 0 ];
			showPage();
			setDebugInfo();
			return;
		}
		
	}
	
	if ( currentPage > 0 )
	{
		while ( courseStructure[ --currentPage ][ 5 ] == "b" && currentPage > 0 );

		if ( isInAssessmentSection( currentPage ) )
		{
			setInAssessment( true, currentPage );
		}
		else
		{
			setInAssessment( false );
		}
		
		if ( courseStructure[ currentPage ][ 5 ] == "b" )
		{
			showMenu();
		}
		else
		{
			showPage();
		}
		
		setDebugInfo();
	}
}

function showMenu()
{

	lastVisitedPage = currentPage;
	
	enableNext();
	enablePrevious();
	
	setInAssessment( false );
	currentPage = -1;
	parent.frames[ 'realms_content' ].location.href = "menu.html";
    
	setDebugInfo();
	setBreadcrumb();
	
}

function setDebugInfo()
{

	var linkText = parent.findObject( "debuglink", false, window );
	
	if ( linkText != null )
	{
	
		if ( currentPage > -1 && courseStructure[ currentPage ][ 5 ] == 'l' )
		{
			var url = courseStructure[ currentPage ][ 0 ];
			var regexp = /\.xml/gi
			url = url.replace( regexp, '' );	
			linkText.innerHTML = url;
		}
		else
		{
			linkText.innerHTML = "";
		}
			
	}

}

function debugHandler()
{

	var linkText = parent.findObject( "debuglink", false, window );
	
	if ( linkText != null )
	{
	
		window.open( "debug.html", "debug", "fullscreen=no,width=600,height=300,scrollbars=yes,titlebar=yes" );
	
	}
	
}

function disableNext()
{
	var o = parent.findObject( "nextbuttoncontainer", false, window );
	parent.setVisibility( o, false, window );
	o = parent.findObject( "butnextdis", false, window );
	parent.setVisibility( o, true, window );
}

function enableNext()
{
	var o = parent.findObject( "butnextdis", false, window );
	parent.setVisibility( o, false, window );
	o = parent.findObject( "nextbuttoncontainer", false, window );
	parent.setVisibility( o, true, window );
}

function disablePrevious()
{
	var o = parent.findObject( "backbuttoncontainer", false, window );
	parent.setVisibility( o, false, window );
	o = parent.findObject( "butbackdis", false, window );
	parent.setVisibility( o, true, window );
}

function enablePrevious()
{
	var o = parent.findObject( "butbackdis", false, window );
	parent.setVisibility( o, false, window );
	o = parent.findObject( "backbuttoncontainer", false, window );
	parent.setVisibility( o, true, window );
}

