function UserService(backendConnection) {
	backendConnection.VO.UserVO = function() {
		this.id = 0;
		this.name = "Blaster";
		this.locale = "en";
		this.image = "defaultUserImage.png";
		this.verified = false;
	};
	backendConnection.VO.ExtendedUserVO = function() {
		this.user = null;
		this.email = "";
		this.keepMePosted = false;
	};

	var callRemoteFunction = function(functionName, resultHandler, faultHandler) {
		backendConnection.callRemoteFunction("UserService", functionName, resultHandler, faultHandler, arguments);
	};

	this.getUserById = function(resultHandler, faultHandler, id) {
		callRemoteFunction("getUserById", resultHandler, faultHandler, id);
	};

	this.getCurrentUser = function(resultHandler, faultHandler) {
		callRemoteFunction("getCurrentUser", resultHandler, faultHandler);
	};
	
	this.getExtendedUser = function(resultHandler, faultHandler) {
		callRemoteFunction("getExtendedUser", resultHandler, faultHandler);
	};

	this.login = function(resultHandler, faultHandler, username, password) {
		password = $.sha1(password);
		callRemoteFunction("login", resultHandler, faultHandler, username, password);
	};

	this.logout = function(resultHandler, faultHandler) {
		callRemoteFunction("logout", resultHandler, faultHandler);
	};

	this.createUser = function(resultHandler, faultHandler, username, password, email, keepMePosted) {
		password = $.sha1(password);
		callRemoteFunction("createUser", resultHandler, faultHandler, username, password, email, keepMePosted);
	};
	
	this.changeUsername = function(resultHandler, faultHandler, newUsername) {
		callRemoteFunction("changeUsername", resultHandler, faultHandler, newUsername);
	};
	
	this.changeEmail = function(resultHandler, faultHandler, newEmail) {
		callRemoteFunction("changeEmail", resultHandler, faultHandler, newEmail);
	};

	this.changePassword = function(resultHandler, faultHandler, username, password, newPassword) {
		password = $.sha1(password);
		newPassword = $.sha1(newPassword);
		callRemoteFunction("changePassword", resultHandler, faultHandler, username, password, newPassword);
	};
}
