$(function() { $('.uicontrol').click(function(e) {doControls(e);} ); });
$(function()
{
	var regName = $( '#regName' );
	var regEmail = $( '#regEmail' );
	var regPassword = $( '#regPassword' );
	var confirm = $( '#confirm' );
	var allRegFields = $( [] ).add( regName ).add( regEmail ).add( regPassword ).add( confirm );
	var tips = $( '#registerTips' );
	
	function updateTips( t )
	{
		tips.text(t).addClass( 'ui-state-highlight' );
		setTimeout(function() { tips.removeClass('ui-state-highlight', 1500 ); }, 500 );
	}
	
	function checkLength( o, n, min, max )
	{
		if( o.val().length > max || o.val().length < min )
		{
			o.addClass( "ui-state-error" );
			updateTips( "Length of " + n + " must be between " + min + " and " + max + "." );
			return false;
		}
		else
		{
			return true;
		}
	}
	
	function checkRegexp( o, regexp, n )
	{
		if( !(regexp.test( o.val() ) ) )
		{
			o.addClass( "ui-state-error" );
			updateTips( n );
			return false;
		}
		else
		{
			return true;
		}
	}
	
	function checkPasswordVerification()
	{
		if( regPassword.val() === confirm.val() )
		{
			return true;
		}
		else
		{
			regPassword.addClass( "ui-state-error" );
			confirm.addClass( "ui-state-error" );
			updateTips( "Entered passwords do not match." );
			return false;
		}
	}

	$('#registerDialog').dialog(
	{
		autoOpen: false,
		modal: true,
		width: 400,
		minWidth: 350,
		buttons:
		{
			"Register": function()
			{
				var bValid = true;
				allRegFields.removeClass( "ui-state-error" );
				
				bValid = bValid && checkLength( regName, "Username", 3, 16 );
				bValid = bValid && checkLength( regEmail, "Email Address", 6, 80 );
				bValid = bValid && checkLength( regPassword, "Password", 5, 16 );
				bValid = bValid && checkRegexp( regName, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, A-Z, 0-9, underscores, and must begin with a letter." );
				bValid = bValid && checkRegexp( regEmail, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "Invalid email format. eg. john@example.com" );
				bValid = bValid && checkRegexp( regPassword, /^([0-9a-zA-Z])+$/, "Passwords may consist of a-z, A-Z, 0-9" );
				bValid = bValid && checkPasswordVerification();
				
				if( bValid )
				{
					var dataString = "formName=register&username="+regName.val()+"&email="+regEmail.val()+"&password="+$.md5( regPassword.val() );
					$.ajax({
						type: "POST",
						url: "../inc/loginRegister.inc.php",
						data: dataString,
						success: function(data){
							switch( data )
							{
								case "0":
									$( '#registerDialog' ).dialog( "destroy" );
									$( '#registerComplete' ).dialog(
									{
										modal: true,
										width: 350,
										height: 250,
										buttons: { "Ok": function() { $( this ).dialog( "close" ); } }
									});
								break;
								case "1":
									updateTips( "An internal error has occured." );
								break;
								case "2":
									regName.addClass( 'ui-state-error' );
									updateTips( "That username is already in use." );
								break;
								case "3":
									regEmail.addClass( 'ui-state-error' );
									updateTips( "That email address is already in use." );
								break;
								default:
									updateTips( "An unknown error has occured." );
							}
						}
					});
				}
			},
			"Cancel": function()
			{
				$( this ).dialog( "close" );
			}
		}
	});
});

$(function()
{
	var loginName = $( '#loginName' );
	var loginPassword = $( '#loginPassword' );
	var tips = $( '#loginTips' );

	function updateTips( t )
	{
		tips.text(t).addClass( 'ui-state-highlight' );
		setTimeout(function() { tips.removeClass('ui-state-highlight', 1500 ); }, 500 );
	}
	
	$('#loginDialog').dialog(
	{
		autoOpen: false,
		modal: true,
		width: 350,
		minWidth: 325,
		buttons:
		{
			"Login": function()
			{
				var dataString = "formName=login&username="+loginName.val()+"&password="+$.md5( loginPassword.val() );
				$.ajax({
					type: "POST",
					url: "../inc/loginRegister.inc.php",
					data: dataString,
					success: function(data){
						switch( data )
						{
							case "0":
								window.location.href = "/settings";
							break;
							case "1":
							default:
								updateTips( "Incorrect username or password." );
							break
						}
					}
				});
			},
			"Cancel": function()
			{
				$( this ).dialog( "close" );
			}
		}
	});
});

$( function() { preloadImages( '../mmWebImages/login.png', '../mmWebImages/LoginOver.png',
	'../mmWebImages/LoginDown.png', '../mmWebImages/Register.png', '../mmWebImages/RegisterOver.png',
	'../mmWebImages/RegisterDown.png' ) } );

function doControls(e)
{
  switch(e.target.id)
	{
		case "loginButton":
			$('#loginDialog').dialog('open');
		break;
		case "registerButton":
			$('#registerDialog').dialog('open');
		break;
	}
}

var cache = [];
function preloadImages() {
	var args_len = arguments.length;
	for( var i = args_len; i--; )
	{
		var cacheImage = document.createElement('img');
		cacheImage.src = arguments[i];
		cache.push(cacheImage);
	}
}


