var repost_email_error;

$j( function ( ) { 
	$j( '#check-username-link' ).click( function ( ) { 
		checkUserName( );
	} );

	$j( '#location-city' ).focus( function ( ) { 
		if ( 'City' == $j( this ).val( ) )
			$j( this ).val( "" );
	} );
} );

function validateForm ( )
{
	var is_valid = true;
	$j( ':input' ).removeClass( 'error' );
	$j( ':input' ).removeClass( 'success' );
	$j( '.error-message' ).hide( );

	if ( 0 == $j( '#username' ).val( ).trim( ).length )
	{
		$j( '#username' ).addClass( 'error' );
		$j( '#username-required' ).show( );
		is_valid = false;
	}

	if ( 0 == $j( '#email' ).val( ).trim( ).length )
	{
		$j( '#email' ).addClass( 'error' );
		$j( '#email-required' ).show( );
		is_valid = false;
	}
	else if ( repost_email_error )
	{
		$j( '#email' ).addClass( 'error' );
		$j( '#email-not-unique' ).show( );
		is_valid = false;
		repost_email_error = false;
	}
	else
	{
		$j( '#email' ).addClass( 'success' );
		$j( '#email-required' ).hide( );
	}

	if ( 0 == $j( '#password' ).val( ).trim( ).length 
			|| 0 == $j( '#confirm-password' ).val( ).trim( ).length )
	{
		$j( '#password, #confirm-password' ).addClass( 'error' );
		$j( '#password-required' ).show( );
		is_valid = false;
	}
	else
	{
		if ( !checkConfirmPasswordMatch( ) )
			is_valid = false;
	}

	checkUserName( );

	if ( $j( '#username' ).val( ).trim( ).length
			&& $j( '#check-username-link' ).hasClass( 'no' ) )
		is_valid = false;
	else
		$j( '#username' ).addClass( 'success' );

	if ( 0 == $j( '#location-city' ).val( ).trim( ).length 
			|| 'City' == $j( '#location-city' ).val( )
			|| 'null' == $j( '#location-state' ).val( ) )
	{
		$j( '#location-city' ).addClass( 'error' );
		$j( '#location-state' ).addClass( 'error' );
		$j( '#location-error' ).show( );
		is_valid = false;
	}
	else
	{
		$j( '#location-city' ).addClass( 'success' );
		$j( '#location-state' ).addClass( 'success' );
	}

	birthdate = Date.UTC( $j( '#date_of_birth_year' ).val( ),
		$j( '#date_of_birth_month' ).val( ),
		$j( '#date_of_birth_day' ).val( ) );
	today = new Date( );
	age = Math.floor( ( ( today - birthdate ) / 1000 ) / ( 60 * 60 * 24 * 365 ) );

	if ( age < 14 )
	{
		$j( '#cant-register' ).show( );
		is_valid = false;
	}
	else if ( age < 18 && 'ME' == $j( '#location-state' ).val( ) )
	{
		$j( '#cant-register' ).show( );
		is_valid = false;
	}

	if ( !$j( '#age-certified' ).attr( 'checked' ) )
	{
		$j( '#age-not-certified' ).show( );
		is_valid = false;
	}

	if ( 0 == Recaptcha.get_response( ).trim( ).length )
	{
		$j( '#recaptcha-required' ).show( );
		is_valid = false;
	}

	if ( !$j( '#read-privacy-policy' ).attr( 'checked' ) 
			|| !$j( '#read-terms-of-use' ).attr( 'checked' ) )
	{
		$j( '#check-all-checkboxes' ).show( );
		is_valid = false;
	}

	return is_valid;
}

function checkConfirmPasswordMatch ( confirm_password_field )
{
	var password = $j( '#password' ).val( ).trim( );
	var confirm_password = $j( '#confirm-password' ).val( ).trim( );
	$j( '.password-error-message' ).hide( );

	// Don't bother until they've tried confirming their password
	if ( 0 == confirm_password.length )
		return;

	$j( '#password, #confirm-password' ).removeClass( 'error' ).removeClass( 'success' );

	if ( password == confirm_password && password.length > 5 && confirm_password.length > 5 )
	{
		$j( '#password' ).addClass( 'success' );
		$j( '#confirm-password' ).addClass( 'success' );
		return true;
	}
	else
	{
		$j( '#password' ).addClass( 'error' );
		$j( '#confirm-password' ).addClass( 'error' );
		return false;
	}
}

function checkValidEmail ( email_field )
{
	$j( '#email-required' ).hide( );

	var email = $j( '#email' ).val( );
	if ( 0 == email.length ) 
	{
		return false;
	}

	var email_regex = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/i;
	if ( email_regex.test( email ) )
	{
		$j( '#email' ).removeClass( 'error' ).addClass( 'success' );
		$j( '#email-invalid-format' ).hide( );
	}
	else
	{
		$j( '#email' ).removeClass( 'success' ).addClass( 'error' );
		$j( '#email-invalid-format' ).show( );
	}
}

function checkUserName ( )
{
	$j( '.username-error' ).hide( );
	$j( '#username' ).removeClass( 'error' ).removeClass( 'success' );

	if ( 0 == $j( '#username' ).val( ).trim( ).length )
	{
		$j( '#username' ).addClass( 'error' );
		$j( '#username-required' ).show( );
		return false;
	}

	var is_valid = true;
	var name = $j( '#username' ).val( ).trim( );
	if ( 6 > name.length ) return;

	naughty_words.each( function ( e ) { 
		var r = new RegExp( e, "i" );
		if ( r.test( name ) )
		{
			$j( '#username' ).addClass( 'error' );
			$j( '#username-not-allowed' ).show( );
			is_valid = false;
		}
	} );

	// Go ahead and quit if there's a dirty word in there.
	if ( !is_valid )
		return false;

	if ( hmx_regex.test( name ) || user_name_regex.test( name ) )
	{
		$j( '#username' ).addClass( 'error' );
		$j( '#username-not-allowed' ).show( );
		return false;
	}

	if ( 3 > name.length || 25 < name.length ) is_valid = false;

	// If we're good so far, then check to see if the name's available, but
	// don't bother otherwise.
	if ( is_valid )
	{
		$j.get( 
			'/facebook/checkUserName', 
			{ username: name },
			function ( data ) { 
				if ( 1 == data )
				{
					$j( '#check-username-link' ).addClass( 'yes' ).text( 'All good!' );
					$j( '#username' ).addClass( 'success' );
					$j( '.username-error' ).hide( );
				}
				else
				{
					$j( '#check-username-link' ).addClass( 'no' );
					$j( '#username-taken' ).show( );
					$j( '#username' ).addClass( 'error' );
				}
			}
		);
	}
	else
		$j( '#username' ).addClass( 'error' );

}

// function checkUserNameAvailable ( )
// {
// 	if ( 0 == $j( '#username' ).val( ).trim( ).length )
// 	{
// 		$j( '#username' ).addClass( 'error' );
// 		$j( '#check-username-link' ).addClass( 'no' ).text( 'Taken, try again' );
// 		return false;
// 	}
// 
// 	$j.get( 
// 		'/facebook/checkUserName', 
// 		{ username: $j( '#username' ).val( ) },
// 		function ( data ) { 
// 			if ( 1 == data )
// 			{
// 				$j( '#check-username-link' ).addClass( 'yes' ).text( 'All good!' );
// 				$j( '#username' ).addClass( 'success' );
// 				can_submit = true;
// 			}
// 			else
// 			{
// 				$j( '#check-username-link' ).addClass( 'no' ).text( 'Taken, try again' );
// 				$j( '#username' ).addClass( 'error' );
// 				can_submit = false;
// 			}
// 
// 			// We don't want to submit the form if we're just checking...
// 			if ( !do_submit ) can_submit = false;
// 		}
// 	);
// }

// Prototype from here down
function setInstrument ( which )
{
	$$( '.editprofile-faveinstrument li a' ).each( function( e ) { $( e ).removeClassName( 'current' ); } );

	switch ( which )
	{
		case 'G': $$( 'li#guitar a' ).first( ).addClassName( 'current' ); break;
		case 'D': $$( 'li#drums a' ).first( ).addClassName( 'current' ); break;
		case 'B': $$( 'li#bass a' ).first( ).addClassName( 'current' ); break;
		case 'V': $$( 'li#mic a' ).first( ).addClassName( 'current' ); break;
	}

	$( 'preferred-instrument' ).value = which;
}
