/* vim:set autoindent shiftwidth=4 tabstop=4 noexpandtab cindent: */

std.loader.provide('editgrid.auth');
std.loader.require('common.std');

var editgrid = editgrid || {};
editgrid.auth = {};
editgrid.auth.AuthForm = function(form, base, onError, onLoading) {
	this._form = form;
	this._base = base;
	this._onError = onError;
	this._onLoading = onLoading;
	std.event.observe(form, "submit", std.event.listener(this, function(e) { 
				this._onSubmit(); 
			std.event.preventDefault(e);
			return false; 
		}));
}

editgrid.auth.AuthForm.prototype.setUsernameGetter = function(usernameGetter) {
	this._usernameGetter = usernameGetter;
}

editgrid.auth.AuthForm.prototype.submit = function() {
	this._onSubmit();
}

editgrid.auth.AuthForm.prototype._onSubmit = function() {
	var username = this._usernameGetter ? this._usernameGetter(this._form) : this._form.elements['username'].value;
	var password = this._form.elements['password'].value;
	var remember = this._form.elements['remember'].checked;
	var returnUrl = this._form.elements['return'].value;
	var direct = this._form.elements['direct'].value;

	new std.ajax.Request(this._base+"login/ajax_check", {
				parameters: 'username='+ encodeURIComponent(username) + '&password='+ encodeURIComponent(password) + '&remember=' + encodeURIComponent(remember) + '&return=' + encodeURIComponent(returnUrl) + '&direct=' + encodeURIComponent(direct),
				method: 'post',
				asynchronous: true,
				onSuccess: std.lang.bind (this, function(transport, json) {
					var response = eval(transport.responseText);
					if (response.success) {
						location.href = response.redirect;
						return;
					} else {
						if (this._onError) { 
							this._onError(response.error);
							this._form.elements['password'].focus();
						}
					}
				}),
				onFailure: std.lang.bind (this, function() {
				})
			});
	this._onLoading('processing...');
}
