$j(document).ready( init );

function init()
{
	if ($j('#password').length > 0)
	{
		$j('#username,#password').keyup( checkAuth );
		
		$j('#username').keypress( checkUserTab );
		$j('#password').keypress( checkSubmitAuth );
	
		$j('<fieldset class="controls"><button type="button">Authenticate</button></fieldset>')
			.appendTo('.field:has(##password)')
			.hide()
			;
		
		$j('button:contains(Authenticate)').click( login );
	}

	if ($j('ul.tags').length > 0)
	{
		resizeTags( increments=[10,8,6,5,4,3,2,1] , scale=1/20 );
		showhideRareTags(cutoff=2); // TODO: Auto-pick cutoff based on e.g. cutoff = $j('ul.tags li:eq(15)').text().match(/\(\d+\)$/)[0]-1
	}
}


function checkAuth()
{
	if ( $j('#username[value],#password[value]').length == 2 )
	{
		$j('button:contains(Authenticate)').parent().slideDown(100);
	}
	else
	{
		$j('button:contains(Authenticate)').parent().slideUp(100);
	}
}


function checkUserTab()
{
	var key = arguments[0].keyCode;
	if (key == 13 || key == 10)
	{
		$j('#password').focus();
		return false;
	}
}

function checkSubmitAuth()
{
	var key = arguments[0].keyCode;
	if (key == 13 || key == 10)
	{
		$j('button:contains(Authenticate)').click();
		return false;
	}
}


function login()
{
	var LoginData = 
		{ username : $j('#username').val()
		, password : $j('#password').val()
		}
	
	$j.post( '/?login' , LoginData , LoginResponse )
}


function LoginResponse(Data)
{
	Data = eval('('+Data+')');
	
	console.log( Data );

	if ( Data.Authed )
	{
		$j('#AuthErrors').remove();
	
		$j('fieldset>legend:contains(Registered Members)').parent()
			.replaceWith('<fieldset>'
				+'<legend>Logged In</legend>'
				+'<div class="field">'
				+'	<label for="name">Name:</label>'
				+'	<span id="name" class="value">'+Data.Name+'</span>'
				+'</div>'
				+'<div class="field">'
				+'	<label for="email">Email:</label>'
				+'	<span id="email" class="value">'+Data.Email+'</span>'
				+'</div>'
				+'<div class="field">'
				+'	<label for="website">Homepage:</label>'
				+'	<span id="website" class="value">'+Data.Website+'</span>'
				+'</div>'
			+'</fieldset>');
		$j('fieldset>legend:contains(Unregistered Guests)').parent().remove();
	}
	else
	{
		// TODO: Display errors.
		if ( ! $j('#AuthErrors').length )
		{
			$j('<ul class="error" id="AuthErrors"></ul>').insertAfter('button:contains(Authenticate)');
		}
		
		$j('#AuthErrors').empty();
		
		for ( CurError in Data.Errors )
		{
			$j('#AuthErrors').append('<li>'+CurError+'</li>');
		}
	}
}



function resizeTags( increments , scale )
{
	var pos = 0;
	for ( var i = 0 ; i < increments.length ; i++ )
	{
		pos += increments[i];
		$j('ul.tags li:gt('+pos+'):not(.selected)')
			.css( 'font-size' , 1-(i+1)*scale+'em' );
	}
}



function showhideRareTags( cutoff )
{
	for ( var i = cutoff ; i>0 ; i-- )
		$j('ul.tags li:contains(('+i+'))').addClass('rare');

	if ($j('ul.tags li.rare').hide().length > 0)
	{
		$j('<button class="toggle" id="ToggleRareTags">more tags</button>')
			.toggle( showRareTags , hideRareTags )
			.insertAfter('ul.tags')
			;
	}
}


function hideRareTags()
{
	$j('#ToggleRareTags').text('more tags');
	$j('ul.tags li.rare').hide();
}


function showRareTags()
{
	$j('#ToggleRareTags').text('less tags');
	$j('ul.tags li.rare').show();
}








