var miteleuser = null;

function login(formulario, callback, callbackError) {
	var cmForm = document.getElementById(formulario);
	cmForm.action = "/su/services/login?ts=" + timestamp();
	
	var loginCallback = new LoginCallback(callback, callbackError);
	Spry.Utils.submitForm(cmForm, loginCallback.success, {method:'post', errorCallback: loginCallback.error});
}

function logout(formulario, callback, callbackError) {
	var cmForm = document.getElementById(formulario);
	cmForm.action = "/su/services/logout";
	
	var logoutCallback = new LogoutCallback(callback, callbackError);
	Spry.Utils.submitForm(cmForm, logoutCallback.success, {method:'post', errorCallback: logoutCallback.error});
}

function checkIsLogged(callback, callbackError) {
	var userCallback = new UserCallback(callback, callbackError);
	Spry.Utils.loadURL("GET", "/su/services/getUser?ts="+timestamp(), true, userCallback.success, {errorCallback: userCallback.error });
}

function logoutHome(callback, callbackError) {
	var userCallback = new LogoutCallback(callback, callbackError);
	Spry.Utils.loadURL("GET", "/su/services/logout?ts=" + timestamp(), true, userCallback.success, {errorCallback: userCallback.error });
}

function isUserLogged() {
	return (miteleuser != null);
}

/******************/
function UserCallback(callback, callbackError) {
	this.okCallback = callback;
	this.koCallback = callbackError;
	
	var me = this;
	
	this.success = function(req) {
		Spry.$$('.user').setStyle("display:none;");
		Spry.$$('.logout').setStyle("display:block;");

		var doc = req.xhRequest.responseXML;
	
		// fix IE bug
		if (!doc || !doc.firstChild) {
			doc = Spry.Utils.stringToXMLDoc(req.xhRequest.responseText);
			if (!doc || !doc.firstChild) {
				alert("Failed to get XML document DOM!");
				return;
			}
		}
	
		var xml = Spry.XML.documentToObject(doc);
		if (xml.user) {
			miteleuser = xml.user;
			if (me.okCallback) {
				me.okCallback(req);
			}
		}
	}
	
	this.error = function(req) {
		Spry.$$('.logout').setStyle("display:none;");
		Spry.$$('.user').setStyle("display:block;");

		miteleuser = null;
		
		if (me.koCallback) {
			me.koCallback(req);
		}
	}
}

/*** ready to use ***/
function LoginCallback(callback, callbackError) {
	this.okCallback = callback;
	this.koCallback = callbackError;
	
	var me = this;
	
	this.success = function(req) {
		if (me.okCallback) {
			me.okCallback(req);
		}
		init();
	}
	
	this.error = function(req) {
		if (me.koCallback) {
			me.koCallback(req);
		}
	}
}

function LogoutCallback(callback, callbackError) {
	this.okCallback = callback;
	this.koCallback = callbackError;
	
	var me = this;
	
	this.success = function(req) {
		if (me.okCallback) {
			me.okCallback(req);
		}
		window.location.reload();
	}
	
	this.error = function(req) {
		if (me.koCallback) {
			me.koCallback(req);
		}
	}
}

/*************************************************************/
/********************** INIT FUNCTION ************************/
/*************************************************************/
function init() {
	window.isloading = false;
	
	var successLoggedIn = null;
	var faultLoggedIn = null;
	
	if (typeof loggedIn != 'undefined') {
		successLoggedIn = loggedIn;
	}
	if (typeof notLoggedIn != 'undefined') {
		faultLoggedIn = notLoggedIn;
	}
	checkIsLogged(successLoggedIn, faultLoggedIn);
}

Spry.Utils.addLoadListener(init);
window.isloading = true;
