// Recursively "handle" all the frames from the top frame down.
function forAllFrames( objHandler )
{
	forAllFrames_recursive( window.top, objHandler );
}

function forAllFrames_recursive( objWindow, objHandler )
{
	if( !objWindow ) return;
		
	objHandler.OnFrame( objWindow );
	
	if( !objWindow.frames )	return;
		
	for( var iFrame = 0; iFrame < objWindow.frames.length; ++iFrame )
	{
		var objFrame = objWindow.frames[ iFrame ];
		forAllFrames_recursive( objFrame, objHandler );
	}
}

function slideChange_handler( objFrame )
{
	if( objFrame.OnSlideChange )
		objFrame.OnSlideChange( this.slide );
}

function broadcastSlideChange( iSlideNum )
{
	var objHandler = new Object();
	objHandler.OnFrame = slideChange_handler;
	objHandler.slide = iSlideNum;
	
	forAllFrames( objHandler );
}

function tocSeek_handler( objFrame )
{
	if( objFrame.OnTocSeek )
		objFrame.OnTocSeek( this.timeIndex );
}

function broadcastTocSeek( iTimeIndex )
{
	var objHandler = new Object();
	objHandler.OnFrame = tocSeek_handler;
	objHandler.timeIndex = iTimeIndex;

	forAllFrames( objHandler );
}
function tocSeek( iTimeIndex )
	{
		broadcastTocSeek( iTimeIndex );
	}






