//var Login = Class.create();
//Login.prototype = {
var Login = Class.create({
  initialize: function(auth, uid, path) {
	this.loggedin = auth;
	this.uid = uid;
	this.backend = path + 'backend/';
	this.loginform = null; 
	this.logoutform = null; 
	this.eventCb = new Array;
	this.message = ''; 
	this.details = '';
  },

  loginNotify: function(what) {
	var obj = this;
	for (i = 0; i < this.eventCb.length; i++) {
		var cb = this.eventCb[i][0]
		var arg = this.eventCb[i][1]
		cb(obj, what, arg);
	}
  },

  doLogin: function(user, pwd) {
	var obj = this;

	var handler = function(req) {
		var data = JSON.parse(req.responseText);
		obj.details = data.details;
		obj.loggedin = data.result;
		if (!obj.loggedin) {
			obj.message.innerHTML = 'Login failed!';
		}
		else {
			obj.message.innerHTML = '';
			obj.swapDivs();
			obj.loginNotify(1);
		}
	};

	var eHandler = function(req) {
			obj.message.innerHTML = 'Login failed (network error)';
	}

	var getToken = function(req) {
		var data = JSON.parse(req.responseText);
		var t = data.t; 
		var s = data.s; 
		var auth = MD5(t+MD5(s+pwd)); 
		var pars = 'user='+user+'&auth='+auth + '&dummy='+Math.floor(Math.random()*10000);

		var req = new Ajax.Request(obj.backend+'login.php',
			{ method: 'post', postBody: pars,
				onSuccess: handler, onError: eHandler});
	};

	var tpars = 'u='+user + '&dummy='+Math.floor(Math.random()*10000);
	var treq = new Ajax.Request(this.backend+'getToken.php',
		{ method: 'get', parameters: tpars,
		onSuccess: getToken, onError: eHandler}); 
  },

  doLogout: function() {
	var obj = this;

	var handler = function(req) {
		var data = JSON.parse(req.responseText);
		var stat = data.result;
		obj.loggedin = false;
		if (!stat)
			obj.message.innerHTML = 'Unknown error';
		obj.swapDivs();
		obj.loginNotify(0);
	};

	var eHandler = function(req) {
			obj.message.innerHTML = 'Network error';
	}

	var req = new Ajax.Request(this.backend+'logout.php',
		{ method: 'post', 
			onSuccess: handler, onError: eHandler});
  },

  swapDivs: function() {
	if (this.loggedin == true) {
		Element.hide(this.loginform);	
		Element.show(this.logoutform);	
	}
	else {
		Element.hide(this.logoutform);	
		Element.show(this.loginform);	
	}
  },

  addNotify: function(cb, arg) {
	var tmp = new Array(2);
	tmp[0] = cb;
	tmp[1] = arg;
	this.eventCb.push(tmp);
  },

  isAuthenticated: function() {
	return (true);
  }
});
