//----------------------------------------------------------------------
// Start her up

document.observe( 'dom:loaded', initApp );


//----------------------------------------------------------------------
// debugTrace

function debugTrace( str )
{
	if ( !$('debug') ) return;
	$('debug').update( $('debug').innerHTML + str + '<br />' );
}


//----------------------------------------------------------------------
// initPage

function initApp()
{
	debugTrace( 'initApp' );
	
	// Initialize the page
	initXHTML();
	
	// Set external links to pop new tabs
	initExternalLinks();
	
	// eSwf
	initESwf();
	
	// SWFAddress
	SWFAddress.setTracker( 'pageTracker._trackPageview' ); // 'pageTracker._trackPageview' / null
	SWFAddress.addEventListener( SWFAddressEvent.INIT, initView );
	SWFAddress.addEventListener( SWFAddressEvent.CHANGE, setView );
	
	// Events
	initEventHandlers();
}


//----------------------------------------------------------------------
// initXHTML

function initXHTML()
{	
	debugTrace( 'initXHTML' );
	
	// Init XHTML
	$('window').setStyle({ height:'5px', overflow:'hidden' });
	$('slider').setStyle({ position:'absolute' });
	
	// Change nav links
	var navLinks = $('nav').select('a');
	for ( var i = 0; i < navLinks.length; i++ )
	{
		if( navLinks[i].href.include('#') )
		{
			var section = navLinks[i].href.split('#')[1];
			navLinks[i].href = '/#/' + section + '/';
		}
	}
}


//----------------------------------------------------------------------
// initExternalLinks

function initExternalLinks()
{	
	debugTrace( 'initExternalLinks' );
	
	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.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');
		}
	}	
}


//----------------------------------------------------------------------
// initESwf

function initESwf()
{	
	debugTrace( 'initESwf' );
	
	var eSwfs = $$('span.eSwf');
	for ( var i = 0; i < eSwfs.length; i++ )
	{
		var flashId = 'eSwf' + i;
		var flashWidth = 200;
		var flashHeight = 24;
		
		var prefix = eSwfs[i].innerHTML.unescapeHTML().toLowerCase().split( ' at ' )[0];
		var suffix = eSwfs[i].innerHTML.unescapeHTML().toLowerCase().split( ' at ' )[1].split( ' dot ' ).join( '.');
		var txtColor = '0xE8E7E7';
		var boxColor = '0x0072B1';  // '0xC777B0';
		
		var newSpan = new Element('span', { 'id': flashId });
		eSwfs[i].update( newSpan )
		
		var swf = 'swf/e.swf';
		
		/*
		var flashvars =
		{
			d: suffix,
			txtColor: '0xE8E7E7',
			boxColor: '0xC777B0',
			u: prefix
		};
		*/
		
		var query = '?'
		query += 'd=' + suffix;
		query += '&txtColor=' + txtColor;
		query += '&boxColor=' + boxColor;
		query += '&u=' + prefix;
		
		var params = {
			menu: 'false',
			wmode: 'transparent',
			scale: 'noscale'
		};
		var attributes = {
			id: flashId,
			name: flashId,
			styleclass: 'eSwf'
		};
		
		swfobject.embedSWF( swf + query, flashId, flashWidth, flashHeight, "9.0.0", false, null, params, attributes );
	}
}


//----------------------------------------------------------------------
// initView

function initView()
{	
	// Process nav section
	var address = SWFAddress.getValue();
	address = address.gsub( '/', '');
	if ( address == '' ) address = 'home';
	debugTrace( 'initView: ' + address );
	
	// Init XHTML
	var newY = '-' + $(address).positionedOffset().top + 'px';
	$('slider').setStyle({ top: newY });
}


//----------------------------------------------------------------------
// setView

function setView()
{
	var address = SWFAddress.getValue();
	var title = 'eatdrink';
	
	// Process nav section
	address = address.gsub( '/', '');
	if ( address == '' ) address = 'home';
	if ( address != 'home' ) title += ' : ' + address.capitalize();
	SWFAddress.setTitle( title )
	debugTrace( 'setView: ' + address );
	
	// Update nav selection
	var navLinks = $('nav').select('a');
	for ( var i = 0; i < navLinks.length; i++ )
	{
		navLinks[i].removeClassName('selected');
	}
	// $('nav').select( 'a[href="/#/' + address + '/"]' )[0].addClassName('selected');
	$('nav').select( 'a[title="' + address.capitalize()  + '"]' )[0].addClassName('selected');
	
	// Transitions
	var newHeight = $(address).getHeight() + 'px;';
	var newY = '-' + $(address).positionedOffset().top + 'px;';
	new Effect.Morph( 'slider', { style:'top: ' + newY, duration:1.0, transition:Effect.Transitions.EaseFromTo });
	new Effect.Morph( 'window', { style:'height:' + newHeight, duration:1.0, transition:Effect.Transitions.EaseFromTo });
	
	debugTrace( 'newHeight: ' + newHeight );
}


//----------------------------------------------------------------------
// initEventHandlers 

function initEventHandlers()
{
	// Nav links
	var navLinks = $('nav').select('a');
	for ( var i = 0; i < navLinks.length; i++ )
	{
		if( navLinks[i].href.include('#') )
		{
			Event.observe( navLinks[i], 'click', function( event )
			{
				Event.stop( event );
				this.blur();
				if ( !this.hasClassName('selected') )
				{
					var section = this.href.gsub( '/', '').split('#')[1];
					debugTrace( 'nav click: ' + section );
					SWFAddress.setValue( '/' + section + '/' );
				}
			});
		}
	}
	
	// To Top link
	var toTopLink = $$('p#toTop a')[0];
	Event.observe( toTopLink, 'click', function( event )
	{
		Event.stop( event );
		this.blur();
		new Effect.ScrollTo( 'head', { duration:0.5, transition:Effect.Transitions.EaseFromTo } );
	});
}