$(createLightboxes);
$(setupLoginInternals);

function createLightboxes() {
	//If on explicit login/signup page, we don't need to set up the lightboxes, of course.
	if ($(".suppressLoginBar").size() > 0) return;
	function showDialog(isSignup, event) {
		event.preventDefault();
		$(isSignup ? "#signupLightbox" : "#loginLightbox").modal({
			onOpen: function(dialog) {
				$(dialog.container).bgiframe();
				dialog.overlay.fadeIn();
				dialog.container.show();
				dialog.data.fadeIn();
			},
			onClose: function(dialog) {
				dialog.overlay.fadeOut();
				dialog.data.fadeOut(function() {
					dialog.container.hide();
					$.modal.close();
				});
			},
			close: false
		});
		
		setTimeout(function() {
			$(isSignup ? "#su-email" : "#li-email").focus();
		}, 10);
	}
	
	function showSignup(event) {
		showDialog(true, event);
	}

	function showLogin(event) {
		showDialog(false, event);
	}
	
	$(".showLoginButton a").click(showLogin);
	$(".showSignupButton a").click(showSignup);
}



function setupLoginInternals() {
	function enterToNextField(fromField, toField) {
		$(fromField).keydown(function(event) {
			switch (event.keyCode) {
			case 10:
			case 13:
			case 3:
				event.preventDefault();
				$(toField).focus();
				break;
			case 27:
				if ($(".suppressLoginBar").size() > 0) return;
				event.preventDefault();
				$.modal.close();
			}
		});
	};
	
	function enterToSubmit(field, submitButton) {
		$(field).keydown(function(event) {
			switch (event.keyCode) {
				case 10:
				case 13:
				case 3:
					event.preventDefault();
					$(submitButton).click();
					break;
				case 27:
					if ($("#loginPage, #activatePage").size() > 0) return;
					event.preventDefault();
					$.modal.close();
			}
		});
	}
	
	enterToNextField("#su-email", "#su-password");
	enterToNextField("#su-password", "#su-passverify");
	enterToNextField("#su-passverify", "#su-currency");
	enterToNextField("#su-currency", "#su-agreeTOS");
	enterToNextField("#li-email", "#li-password");
	enterToNextField("#fpk-pass1", "#fpk-pass2");
	enterToNextField("#ac-password", "#ac-passverify");
	enterToNextField("#ac-passverify", "#ac-currency");
	enterToNextField("#ac-currency", "#ac-agreeTOS");
	enterToSubmit("#li-password", "#li-submit");
	enterToSubmit("#su-agreeTOS", "#su-submit");
	enterToSubmit("#fp-email", "#fp-submit");
	enterToSubmit("#fpk-pass2", "#fpk-submit");
	enterToSubmit("#ac-agreeTOS", "#ac-submit");
	
	$("#su-submit").click(verifySignupData);
	$("#li-submit").click(verifyLoginData);
	$("#fp-submit").click(verifyForgotPassData);
	$("#fpk-submit").click(verifyForgotPassKeyData);
	$("#ac-submit").click(verifyActivateData);
}

function verifyForgotPassKeyData(event) {
	var pass1 = $("#fpk-password").get(0).value;
	var pass2 = $("#fpk-passverify").get(0).value;
	
	var verifyFail = function(selector, preferTop, text) {
		balloon(selector, text, preferTop);
		event.preventDefault();
	}
	
	if (!pass1) return verifyFail("#fpk-password", true, i18n("error.forgotpass.missingNewpass"));
	
	if (pass1.length < 6) return verifyFail("#fpk-password", true, i18n("error.passTooShort"));
	
	if (!pass2) return verifyFail("#fpk-passverify", false, i18n("error.missingPassVerify"));
	
	if (pass1 != pass2) return verifyFail("#fpk-passverify", false, i18n("error.passVerifyDoesntMatch"));
}

function verifyActivateData(event) {
	var pass1 = $("#ac-password").get(0).value;
	var pass2 = $("#ac-passverify").get(0).value;
	var tosBox = $("#ac-agreeTOS").get(0).checked;
	
	var verifyFail = function(selector, preferTop, text) {
		balloon(selector, text, preferTop);
		event.preventDefault();
	}
	
	if (!pass1) return verifyFail("#ac-password", true, i18n("error.signup.missingPass"));
	
	if (pass1.length < 6) return verifyFail("#ac-password", true, i18n("error.passTooShort"));
	
	if (!pass2) return verifyFail("#ac-passverify", false, i18n("error.missingPassVerify"));
	
	if (pass1 != pass2) return verifyFail("#ac-passverify", false, i18n("error.passVerifyDoesntMatch"));
	
	if (!tosBox) return verifyFail("#ac-agreeTOS", true, i18n("error.agreeToTos"));
}

function verifySignupData(event) {
	var email = $("#su-email").get(0).value;
	var pass1 = $("#su-password").get(0).value;
	var pass2 = $("#su-passverify").get(0).value;
	var tosBox = $("#su-agreeTOS").get(0).checked;
	
	var verifyFail = function(selector, preferTop, text) {
		balloon(selector, text, preferTop);
		event.preventDefault();
	}
	
	if (email.indexOf('@') == -1) return verifyFail("#su-email", true, i18n("error.missingEmail"));
	
	if (!pass1) return verifyFail("#su-password", true, i18n("error.signup.missingPass"));
	
	if (pass1.length < 6) return verifyFail("#su-password", true, i18n("error.passTooShort"));
	
	if (!pass2) return verifyFail("#su-passverify", false, i18n("error.missingPassVerify"));
	
	if (pass1 != pass2) return verifyFail("#su-passverify", false, i18n("error.passVerifyDoesntMatch"));
	
	if (!tosBox) return verifyFail("#su-agreeTOS", true, i18n("error.agreeToTos"));
}

function verifyLoginData(event) {
	var email = $("#li-email").get(0).value;
	var pass = $("#li-password").get(0).value;
	
	var verifyFail = function(selector, preferTop, text) {
		balloon(selector, text, preferTop);
		event.preventDefault();
	}
	
	if (email.indexOf('@') == -1) return verifyFail("#li-email", true, i18n("error.missingEmail"));
	if (!pass) return verifyFail("#li-password", false, i18n("error.missingPass"));
}

function verifyForgotPassData(event) {
	var email = $("#fp-email").get(0).value;
	
	var verifyFail = function(selector, preferTop, text) {
		balloon(selector, text, preferTop);
		event.preventDefault();
	}
	
	if (email.indexOf('@') == -1) return verifyFail("#fp-email", true, i18n("error.missingEmail"));
}
