
$(document).ready(function() {

	$('#login_form').livequery('submit', function() {
		var form = $(this);
		form.ajaxSubmit({
			success: function(result) {
				hideProcessing(form);
				onLogin(result);
			},
			beforeSubmit: function() {
				form.validate();
				if (form.valid())
					showProcessing(form, "Logging In...");
				return form.valid()
			},
			dataType: 'json'
		});
		return false;
	});
	
	$("#register_form").validate({
	 	ignoreTitle: true
	})
	
	$('#register_form').livequery('submit', function(event) {
		event.preventDefault();
		var form = $(this);
		form.ajaxSubmit({
			success: function(result) {
				hideProcessing(form);
				onRegister(result);
			},
			beforeSubmit: function() {
				form.validate( { 
					ignoreTitle: true,
					messages: {
						regemail: {
							remote: "This email address is already taken."
						}
						
					},
					rules: {
						regemail: "required email",
						regpassword: "required",
						regpassword2: {
							equalTo: "#id_regpassword"
						}
					}
				});
				if (form.valid())
					showProcessing(form, "Creating Account...");
				return form.valid()
			},
			dataType: 'json'
		});
		return false;
	});
	
	$("#forgotPassword").livequery('click', function() {
		$('form#login_form').hide();
		$('div#resetPassword').show()
		return false;
	});
	
	$("a#backToLogin").livequery('click', function() {
		$('form#login_form').show();
		$('div#resetPassword').hide()
		return false;
	});
	
	$('#password_form').livequery('submit', function() {
		console.log("#password_form.submit()");
		var form = $(this);
		console.log("reset password form submit", form);
		form.ajaxSubmit({
			success: function(result) {
				hideProcessing();
				onResetPassword(result);
			},
			beforeSubmit: function() {
				console.log("reset password submitting")
				form.validate();
				if (form.valid())
					showProcessing(form);
				return form.valid()
			},
			dataType: 'json'			
		});
		return false;
	});
	
	
});


/*
Form event handlers
*/

function isIFrame() {
	return (window.parent.frames.length>0);
}

function onLogin(result) {
	if (result.success) {
		updateUserBar();
		if ( isIFrame() ) {
			closeThickbox();
			if(typeof window.parent.onLoginComplete == 'function')
				window.parent.onLoginComplete();
		} else {
			window.location = result.next;
		}
	} else {
		//TODO: flash message?
		showFormMessage($("form#login_form"), "Error logging in.", result.errors)
		console.error("login error: ", result.errors)
	}
}

function showMessage(selector, message) {
	$(selector).html(message);
	$(selector).show();
}

function onResetPassword(result) {
	if (result.success) {
		console.log("reset password success: ", result)
		$('#password_form').hide()
		$('#reset-email').html(result.email);
		$('#reset_message').show()
	} else {
		showFormMessage($("form#password_form"), "Error reseting password.", result.errors)
		console.error("reset error: ", result)
	}
}

function updateUserBar() {
	var p = window.parent ? window.parent : window 
	p = $(p.document)
	p.find('.logged-in').show();
	p.find('.logged-out').hide();	
}

function closeThickbox() {
	var p = window.parent ? window.parent : window 
	p.tb_remove();
}

function onRegister(result) {
	if (result.success) {
		$('#create-account-form').fadeOut();
		$('#activate-email').html(result.user.email);
		$('div.account-activate').fadeIn();
		updateUserBar();
		
	} else {
		showFormMessage($("form#register_form"), "Error creating account.", result.errors)
		console.log("registration error: ", result.message + result.errors)
	}
	
}


//shows a loading indicator after a form submit button,
//also disables the submit button
function showFormMessage(form, message, errors) {
	var div = $("#" + form.attr("id") + "_messages");
	if ( div.length == 0 || !div[0] ) {
		form.before("<div id='"+form.attr('id')+"_messages' style='display: none'></div>")
		div = $("#" + form.attr("id") + "_messages"); 
	}
	div.html(message)
	if (errors) {
		div.addClass("error");
		var errorList = div.append("<ul class='error-list'></ul>");
		for (var i=0;i<errors.length;++i) {
			var error = errors[i];
			errorList.append("<li>"+ error.message +"</li>")
		}
	} else if ( div.hasClass("error") ){
		div.removeClass("error");
	}
	div.show()
}	


function showProcessing(form, action) {
	var actionLabel = action ? action : "Loading..."

	var btn = $( 'input[type=submit], button[type=submit]', form );
	btn.attr('disabled', true);
	// if (btn.tagName == "input") {
	// 	btn.attr( "initial_value", btn.val() );
	// }  else {
	// 	btn.attr( "initial_value", btn.text() );
	// }
	// btn.val(actionLabel);
	
	//var img = $("<img id='"+ form.attr('id') +"_progress' src='"+mediaURL+"images/updating.gif' class='progress' />");
	//btn.after(img)
}

function hideProcessing(form) {
	var btn = $( 'input[type=submit], button[type=submit]', form );
	if (btn.length > 0) {
		btn.removeAttr('disabled');
		// if (btn.tagName == "input") {
		// 	btn.val(btn.attr('initial_value'));
		// } else {
		// 	btn.text(btn.attr('initial_value'));
		// }
		// btn.removeAttr('initial_value');
	}
	//var img = $("img#" + form.attr('id') + "_progress", form);
	//img.remove();
}

function clearDefaults(form) {
	$("input[type=text],input[type=password]", form).each(function() {
		var field = $(this);
		// Conditional for password
		if( field.attr("type") == "password" ){
			if( field.val() == "password" )
				field.val("")
		} else {
			var label = $( "label[for=" + field.attr("id") + "]" );
			if (field.val() == label.text())
				field.val("")
		}
	});
}

function restoreDefaults(form) {
	$("input[type=text],input[type=password]", form).each(function() {
		$(this).blur();
	});
}
