//----------------------------------------------------------------------
// Start her up

document.observe( 'dom:loaded', _initPage );


//----------------------------------------------------------------------
// initPage

function _initPage()
{
	// Navigation subnav menus
	_initNav();
	
	// External links
	_initExternalLinks();
	
	// Home Slideshow
	_initSlideshow();
}


//----------------------------------------------------------------------
// initNav

function _initNav()
{	
	// <div class="moduletable main-nav"> <ul class="menu">

	var navNodes = $('header').select('ul.menu')[0].childElements();
	
	for ( var i = 0; i < navNodes.length; i++ )
	{
		navNodes[i].observe( 'mouseenter', function( event )
		{
			this.addClassName( 'hover' );
		});
		
		navNodes[i].observe( 'mouseleave', function( event )
		{
			this.removeClassName( 'hover' );
		});
	}
}


//----------------------------------------------------------------------
// _initExternalLinks

function _initExternalLinks()
{	
	// set any external links to target='_blank'
	var hostname = window.location.hostname.sub('www.','').toLowerCase();
	if ( hostname.empty() ) return;
	var aLinks = $$('a');
	
	for ( var i = 0; i < aLinks.length; i++ )
	{
		var aLink = aLinks[i];
		var url = aLink.readAttribute('href').toLowerCase();
		
		if ( url.startsWith('http://') || url.startsWith('https://') )
		{
			if ( url.startsWith('http://') ) url = url.sub('http://','');
			else if ( url.startsWith('https://') ) url = url.sub('https://','');
			if ( url.startsWith('www.') ) url = url.sub('www.','');
			if ( !url.startsWith( hostname ) ) aLink.writeAttribute('target', '_blank');
		}
		else if ( aLink.hasClassName('pop-up') )
		{
			aLink.writeAttribute('target', '_blank');
		}
	}
}


//----------------------------------------------------------------------
// SLIDESHOW 
//----------------------------------------------------------------------

//----------------------------------------------------------------------
// _initSlideshow

function _initSlideshow()
{
	if ( $('content').select('div.slideshow').length != 1 ) return;
	
	// Initialize values
	var slideshow = $('content').select('div.slideshow')[0];
	var features = slideshow.childElements();
	slideshow._selected = -1;
	
	// Create thumbs, set handlers, & hide images
	var thumbsList = new Element('ul', { 'class': 'slideshow-ctrls' });
	for ( var i = 0; i < features.length; i++ )
	{
		var thumbA = new Element('a', { 'href': '#' }).update( i + 1 );
		var thumbLi = new Element('li');
		thumbLi._i = i;
		thumbLi.observe( 'click', _onThumbClick );
		thumbLi.insert( thumbA );
		thumbsList.insert( thumbLi );
		features[i].addClassName('feature');
		features[i].setOpacity( 0.0 ).hide();
	}
	slideshow.insert( thumbsList );
	
	// Set initial image
	_setFeature( 0 );
	
	// Set image loop
	slideshow._loop = new PeriodicalExecuter( function( pe ) { _setNextFeature(); }, 6.0 );
}

//----------------------------------------------------------------------
// _onThumbClick, _setGalleryImage, _setNextGalleryImag

function _onThumbClick( event )
{
	Event.stop( event );
	var slideshow = $('content').select('div.slideshow')[0];
	slideshow._loop.stop();
	var liButton = event.findElement('li');
	_setFeature( liButton._i );
}

function _setFeature( iSel )
{
	// Freeze the animation
	var queue = Effect.Queues.get('slideshow');
	queue.each( function( e ) { e.cancel(); })
	
	var slideshow = $('content').select('div.slideshow')[0];
	var features = slideshow.select('.feature');
	var thumbs = slideshow.select('ul.slideshow-ctrls li')
	slideshow._selected = iSel;
	
	// Set thumbs
	for ( var i = 0; i < thumbs.length; i++ )
	{
		if ( i != iSel ) thumbs[i].removeClassName('selected');
		else if ( i == iSel ) thumbs[i].addClassName('selected');
	}
	
	// Transition the image
	_transitionImage();	
}

function _setNextFeature()
{
	var slideshow = $('content').select('div.slideshow')[0];
	var features = slideshow.select('.feature');
	var iSel = ( slideshow._selected + 1 ) % features.length;
	_setFeature( iSel );
}

//----------------------------------------------------------------------
// _transitionImage

function _transitionImage()
{	
	var slideshow = $('content').select('div.slideshow')[0];
	var features = slideshow.select('.feature');
	var iSel = slideshow._selected;
	
	for ( var i = 0; i < features.length; i++ )
	{
		var opacity = features[i].getStyle('opacity');
			
		// Hide images not selected
		if ( i != iSel && opacity > 0 )
		{
			new Effect.Opacity( features[i],
			{
				to: 0.0,
				duration:  opacity, // 0.5, //
				transition: Effect.Transitions.sinoidal,
				queue: { scope: 'slideshow', position: 'front' },
				afterFinish: function( e ) { e.element.removeClassName('selected'); e.element.hide(); }
			});
		}
		// Show selected image
		else if ( i == iSel && opacity < 1 )
		{
			new Effect.Opacity( features[i],
			{
				to: 1.0,
				duration: 1.0 - opacity, // 0.5, // ( 1.0 - opacity ) * 0.5,
				transition: Effect.Transitions.sinoidal,
				queue: { scope: 'slideshow', position: 'end' },
				afterSetup: function( e ) { e.element.addClassName('selected'); e.element.show(); }
			});
		}
	}	
}