
var frameRate = 1000 / 30;
var ignoreClickRefcount = 1;
var activeSection = "";
var activeName = "";
var floatingName = "";
var ignoreNameClickRefcount = 1;
var currentLocationImage = 1;

var mainFade = new TimerData( 
	'main_container', 
	'mainFade',
	0,
	100,
	1000,
	0,
	frameRate,
	'body_faded_in();' );

var mainFadeOut = new TimerData( 
	'main_container', 
	'mainFadeOut',
	100,
	0,
	500,
	0,
	frameRate,
	'next_page();' );
	
var linkFadeIn = new TimerData(
	'link_hilite',
	'linkFadeIn',
	0,
	50,
	500,
	0,
	frameRate,
	'links_faded_in();' );

var linkFadeOut = new TimerData(
	'link_hilite',
	'linkFadeOut',
	50,
	0,
	500,
	0,
	frameRate,
	'links_faded_out();' );

var armFadeIn = new TimerData(
	'armature',	'armFadeIn', // element, var
	0, 100, // start, end
	500, 0,	frameRate, 'section_faded_in();' );

var armFadeOut = new TimerData(
	'armature',	'armFadeOut', // element, var
	100, 0, // start, end
	500, 0,	frameRate, 'arm_faded_out();' );

var jobFadeIn = new TimerData(
	'jobs',	'jobFadeIn', // element, var
	0, 100, // start, end
	500, 0,	frameRate, 'section_faded_in();' );

var jobFadeOut = new TimerData(
	'jobs',	'jobFadeOut', // element, var
	100, 0, // start, end
	500, 0,	frameRate, 'job_faded_out();' );

var locFadeIn = new TimerData(
	'location',	'locFadeIn', // element, var
	0, 100, // start, end
	500, 0,	frameRate, 'section_faded_in();' );

var locFadeOut = new TimerData(
	'location',	'locFadeOut', // element, var
	100, 0, // start, end
	500, 0,	frameRate, 'loc_faded_out();' );

var newsFadeIn = new TimerData(
	'news',	'newsFadeIn', // element, var
	0, 100, // start, end
	500, 0,	frameRate, 'section_faded_in();' );

var newsFadeOut = new TimerData(
	'news',	'newsFadeOut', // element, var
	100, 0, // start, end
	500, 0,	frameRate, 'news_faded_out();' );

var peopleFadeIn = new TimerData(
	'people',	'peopleFadeIn', // element, var
	0, 100, // start, end
	250, 0,	frameRate, 'people_faded_in();' );

var peopleFadeOut = new TimerData(
	'people', 'peopleFadeOut', // element, var
	100, 0, // start, end
	250, 0,	frameRate, 'people_faded_out();' );

var peopleLineFade = new TimerData(
	'peopleLine', 'peopleLineFade',// element, var
	90, 0, // start, end
	1000, 0,	frameRate, 'peopleline_faded();' );

var lineFade = new TimerData(
	'INVALID', 'lineFade',// element, var
	90, 0, // start, end
	500, 0,	frameRate, 'line_faded();' );

var selectionBlinker = new TimerData(
	'INVALID',	'selectionBlinker', // element, var
	0, 6, // start, end
	250*5, 0, 150, 'end_select_item();' );

var nameFadeIn = new TimerData(
	'INVALID',	'nameFadeIn', // element, var
	0, 90, // start, end
	250, 0,	frameRate, 'name_faded_in();' );

var nameFadeOut = new TimerData(
	'INVALID',	'nameFadeOut', // element, var
	90, 0, // start, end
	250, 0,	frameRate, 'name_faded_out();' );

var bodyFadedIn = 0;

function my_select_tick()
{
	++selectionBlinker.mStart;
	var el = document.getElementById( selectionBlinker.mElement );
	
	if ( selectionBlinker.isDoneCount() || ( selectionBlinker.mStart & 1 ) )
	{
		add_class_to_element( el, "selected" );
	}
	else
	{
		remove_class_from_element( el, "selected" );
	}
	
	if ( selectionBlinker.isDoneCount() )
	{
		eval( selectionBlinker.mFinishFunction );
	}
	else
	{
		setTimeout( "my_select_tick();", selectionBlinker.mTickTime );
	}
}

function start_select_item( elementName )
{
	++ignoreClickRefcount;
	selectionBlinker.mElement = elementName;
	selectionBlinker.restartCount();
	
	setTimeout( "my_select_tick();", selectionBlinker.mTickTime );
}

function end_select_item()
{
	--ignoreClickRefcount;
}

function body_loaded()
{
  mainFade.restart();
  post_fade_tick( mainFade );
  subscribe_forceblur();
}

function body_faded_in()
{
	bodyFadedIn = 1;
	//linkFadeIn.restart();
	//post_fade_tick( linkFadeIn );
	links_faded_out();
	
	// If something is set in the hash, then toggle it.
	var sub = "";
	if ( window.location.hash.length > 1 )
	{
		sub = window.location.hash.substr( 1 );
	}
	
	switch ( sub )
	{
		case "armature":
		case "jobs":
		case "location":
		case "news":
			break;
		default:
			sub = "armature";
			break;
	}
	
	start_select_item( "btn_" + sub );
	eval( 'toggle_' + sub + '();' );

	// Allow the UI to operate
	--ignoreClickRefcount;
	--ignoreNameClickRefcount;
	
}

function links_faded_in()
{
	linkFadeOut.restart();
	post_fade_tick( linkFadeOut );
}

function links_faded_out()
{
	document.getElementById( 'link_hilite' ).className = "hidden";
	remove_class_from_element( document.getElementById( 'rollovers' ), "ro_initial" );
}

function kill_active_section()
{
	if ( activeSection != "" )
	{
		eval( 'toggle_' + activeSection + '();' );
	}
}

function kill_active_name()
{
	if ( activeName != "" )
	{
		toggle_name( activeName );
	}
}

function toggle_name( name )
{
	var wnd = document.getElementById( "nametip_" + name );
	var wndBtn = document.getElementById( "btn_nametip_" + name );
	
	++ignoreNameClickRefcount;
	++ignoreClickRefcount;
	if ( does_element_have_class( wnd, "hidden" ) )
	{
		kill_active_name();
		activeName = name;
		
		jm_set_element_opacity( wnd.id, 0 );
		remove_class_from_element( wnd, "hidden" );
		add_class_to_element( wndBtn, "selected" );
		nameFadeIn.mElement = wnd.id;
		start_fade( nameFadeIn );
	}
	else
	{
		// Ne need to hide it
		remove_class_from_element( wndBtn, "selected" );
		nameFadeOut.mElement = wnd.id;
		start_fade( nameFadeOut );
		activeName = "";
	}
}

function toggle_section_default( elementName, fadeIn, fadeOut )
{
	var arm = document.getElementById( elementName );
	var armBtn = document.getElementById( "btn_" + elementName );
	var wndLine = document.getElementById( "line_" + elementName );

    ++ignoreClickRefcount;
	if ( does_element_have_class( arm, "hidden" ) )
	{
	   kill_active_section();
	   kill_active_name();
	   activeSection = elementName;
	   // If it's hidden, then unhide it and start the whole charade
	   jm_set_element_opacity( elementName, 0 );
	   remove_class_from_element( arm, "hidden" );
	   add_class_to_element( armBtn, "selected" );
	   
	   // Do the line fade
       ++ignoreClickRefcount;
	   remove_class_from_element( wndLine, "hidden" );
	   lineFade.mElement = wndLine.id;
	   jm_set_element_opacity( wndLine.id, 100 );
	   	   
	   start_fade( fadeIn );
	   setTimeout( 'start_fade( lineFade );', 500 );
	}
	else
	{
		// If it's not hidden, then fade it out and kill the button
		remove_class_from_element( armBtn, "selected" );
		fadeOut.restart();
		post_fade_tick( fadeOut );
		activeSection = "";
	}
}

function toggle_armature()
{
	toggle_section_default( "armature", armFadeIn, armFadeOut );
}

function toggle_jobs()
{
	toggle_section_default( "jobs", jobFadeIn, jobFadeOut );
}

function toggle_location()
{
	toggle_section_default( "location", locFadeIn, locFadeOut );
}

function toggle_news()
{
	toggle_section_default( "news", newsFadeIn, newsFadeOut );
}

function update_hash_to_section()
{
	window.location.hash = "#" + activeSection;
}

function btn_enter_name( name )
{
	floatingName = name;
	update_name_if_possible();
	
	return false;
}

function btn_leave_name( name )
{
	if ( floatingName == name )
	{
		floatingName = "";
		update_name_if_possible();
	}
	
	return false;
}

function btn_click_name( name )
{
	btn_enter_name( name );
	
	return false;
}

function decrement_ignore_name_click()
{
	--ignoreNameClickRefcount;
	update_name_if_possible();
}

function update_name_if_possible()
{
	if ( ignoreNameClickRefcount <= 0 )
	{
		if ( floatingName != activeName )
		{
			if ( activeName != "" )
			{
				kill_active_name();
			}
			
			if ( floatingName != "" )
			{
				toggle_name( floatingName );
			}
		}
	}
}

function btn_click_armature()
{
	if ( ignoreClickRefcount > 0 )
	{
		return false;
	}

	toggle_armature();
	update_hash_to_section();
	
	return false;
}

function btn_click_location()
{
	if ( ignoreClickRefcount > 0 )
	{
		return false;
	}

	toggle_location();
	update_hash_to_section();
	
	return false;
}

function btn_click_news()
{
	if ( ignoreClickRefcount > 0 )
	{
		return false;
	}

	toggle_news();
	update_hash_to_section();
	
	return false;
}

function btn_click_jobs()
{
	if ( ignoreClickRefcount > 0 )
	{
		return false;
	}

	toggle_jobs();
	update_hash_to_section();
	
	return false;
}

function btn_click_people()
{
	if ( ignoreNameClickRefcount > 0 )
	{
		return false;
	}

	var wnd = document.getElementById( "people" );
	var wndBtn = document.getElementById( "btn_people" );

    ++ignoreNameClickRefcount;

	if ( does_element_have_class( wnd, "hidden" ) )
	{
	   // If it's hidden, then unhide it and start the whole charade
	   
	   // Increment again for the line
	   ++ignoreNameClickRefcount;
	   
	   jm_set_element_opacity( "people", 0 );
	   remove_class_from_element( wnd, "hidden" );

	   jm_set_element_opacity( "peopleLine", 0 );
	   remove_class_from_element( document.getElementById( "peopleLine" ), "hidden" );
	   
	   setTimeout( 'start_fade( peopleFadeIn );', 150 );

	   peopleLineFade.restart();
	   post_fade_tick( peopleLineFade );

	   add_class_to_element( wndBtn, "selected" );
	}
	else
	{
		// If it's not hidden, then fade it out and kill the button
		kill_active_name();
		remove_class_from_element( wndBtn, "selected" );
		peopleFadeOut.restart();
		post_fade_tick( peopleFadeOut );
	}
	
	return false;
}

function nametip_click()
{
	if ( ignoreNameClickRefcount == 0 )
	{
	   kill_active_name();
	}
}

function name_faded_in()
{
	decrement_ignore_name_click();
	--ignoreClickRefcount;
}

function name_faded_out()
{
	var el = document.getElementById( nameFadeOut.mElement );
    add_class_to_element( el, "hidden" );
	--ignoreClickRefcount;
	decrement_ignore_name_click();
}

function section_faded_in()
{
	--ignoreClickRefcount;
}

function arm_faded_out()
{
	var el = document.getElementById( "armature" );
    add_class_to_element( el, "hidden" );
	--ignoreClickRefcount;
}

function loc_faded_out()
{
	var el = document.getElementById( "location" );
    add_class_to_element( el, "hidden" );
	--ignoreClickRefcount;
}

function news_faded_out()
{
	var el = document.getElementById( "news" );
    add_class_to_element( el, "hidden" );
	--ignoreClickRefcount;
}

function job_faded_out()
{
	var el = document.getElementById( "jobs" );
    add_class_to_element( el, "hidden" );
	--ignoreClickRefcount;
}

function people_faded_in()
{
	decrement_ignore_name_click();
}

function people_faded_out()
{
	var wnd = document.getElementById( "people" );
	add_class_to_element( wnd, "hidden" );
	decrement_ignore_name_click();
}

function peopleline_faded()
{
	var wnd = document.getElementById( "peopleLine" );
	add_class_to_element( wnd, "hidden" );
	decrement_ignore_name_click();
}

function line_faded()
{
	var wnd = document.getElementById( lineFade.mElement );
	add_class_to_element( wnd, "hidden" );
	--ignoreClickRefcount; 
}

function swap_location_image( num )
{
	if ( num != currentLocationImage )
	{
		remove_class_from_element( document.getElementById( "loc_thumb" + currentLocationImage ), "selected" );
		add_class_to_element( document.getElementById( "loc_thumb" + num ), "selected" );
		
		currentLocationImage = num;
		document.getElementById( "locimg" ).src = "images/loc/img" + num + ".jpg";
	}
	
	return false;
}

var newsletter_caption = "newsletter email";

function subscribe_click()
{
	var src = document.getElementById( 'newsletter_show_email' );
	var dst = document.getElementById( 'newsletter_email' );
	var frm = document.getElementById( 'newsletter_form' );
	
	if ( src.value == newsletter_caption )
	{
		dst.value = "";
	}
	else
	{
		dst.value = src.value;
	}
	
	frm.submit();
	return false;
}

function subscribe_focus()
{
	var src = document.getElementById( 'newsletter_show_email' );
	
	if ( src.value == newsletter_caption )
	{
		src.value = "";
	}
	
	src.className = "";
}

function subscribe_forceblur()
{
	var src = document.getElementById( 'newsletter_show_email' );
	src.value = newsletter_caption;
	src.className = "blurred";
}

function subscribe_blur()
{
	var src = document.getElementById( 'newsletter_show_email' );
	if ( src.value == "" )
	{
		subscribe_forceblur();
	}
}
