/******************************************************************
 * @author mpoisson
 * @version 1.0
 * User session management class
 ******************************************************************/
function User() {
	this.id= '';
	this.sid = '';
	this.mail = '';
	this.password = '';
	this.nickname = '';
	this.profile = new Profile();
	this.language = new Language();
}

User.prototype.setID = function(id) {
	this.id = id;
};

User.prototype.getID = function() {
	return this.id;
};

User.prototype.setSID = function(sid) {
	this.sid = sid;
};

User.prototype.getSID = function() {
	return this.sid;
};

User.prototype.setNickname = function(nick) {
	this.nickname = nick;
};

User.prototype.getNickname = function() {
	return this.nickname;
};

User.prototype.setMail = function(mail) {
	this.mail = mail;
};

User.prototype.getMail = function() {
	return this.mail;
};

User.prototype.getProfile = function() {
	return this.profile;
};

User.prototype.getLanguage = function() {
	return this.language;
};

User.prototype.setPassword = function(password) {
	this.password = password;
};

User.prototype.getPassword = function() {
	return this.password;
};

User.prototype.clear = function() {
	this.id= '';
	this.sid = '';
	this.nickname = '';
	this.profile = new Profile();
};

/******************************************************************
 * User class end
 ******************************************************************/

/*******************************************************************
 * @author mpoisson
 * User Profile class
 ******************************************************************/
function Profile() {
	this.id = '';
	this.name = '';
}

Profile.prototype.setID = function(id) {
	this.id = id;
};

Profile.prototype.getID = function() {
	return this.id;
};

Profile.prototype.setName = function(name) {
	this.name = name;
};

Profile.prototype.getName = function() {
	return this.name;
};

/******************************************************************
 * Profile class end
 ******************************************************************/

 /******************************************************************
 * @author mpoisson
 * @version 1.0
 * User session management class
 ******************************************************************/
function UserHelper() {

}

/**
 * @method doLogin
 * @param user User object class
 * @param lang Language object class
 * @param remember boolean that indicates if cookie must be saved for the user
 * @param handlerObj callback object instance
 * @param handlerMethod callback method name
 * executes user login.
 */
UserHelper.prototype.doLogin = function(user, lang, remember, handlerObj, handlerMethod) {
	var connector = new AjaxConnector();
	s = new Service("A1-001", oEnviroment.getServicePath()  + oEnviroment.getServletName(), "");
	s.addParameter("email", user.getMail());
	s.addParameter("password", user.getPassword());
	s.addParameter("remember", remember);
	s.addParameter("language", lang.getID());

	s.setOnServiceComplete(handlerObj, handlerMethod);
	connector.asyncRun(s);
};

/**
 * @method loadProfile
 * @param user User object class
 * @param lang Language object class
 * @param handlerObj callback object instance
 * @param handlerMethod callback method name
 * executes user login.
 */
UserHelper.prototype.loadProfileSync = function(user, lang) {
	var connector = new AjaxConnector();
	s = new Service("A1-004", oEnviroment.getServicePath()  + oEnviroment.getServletName(), user.getSID());
	s.addParameter("language", lang.getID());
	s = connector.syncRun(s);

	if (s !== null) {
		if (!s.getResult().hasErrors()) {
			var serviceRow = null;
			if (s.getResult().hasNext()) {

				serviceRow = s.getResult().getCurrentRow().split("|!|");

				// Cargo los datos del tipo en el objeto user
				user.setID(serviceRow[0]);
				user.setSID(serviceRow[1]);
				user.setMail(serviceRow[2]);
				user.setNickname(serviceRow[4]);
				user.getProfile().setID(serviceRow[8]);
				user.getProfile().setName(serviceRow[9]);
				user.getLanguage().setID(serviceRow[18]);
				user.getLanguage().setName(serviceRow[19]);
			}
		}
	}

};


/**
 * @method loadLoginFromCookie
 * @param handlerObj callback object instance
 * @param handlerMethod callback method name
 * loads user login information if remember cookie is available.
 */
UserHelper.prototype.loadLoginFromCookie = function(handlerObj, handlerMethod) {
	if (this.isUserRemembered()) {
		var connector = new AjaxConnector();
		s = new Service("A1-002", oEnviroment.getServicePath() + oEnviroment.getServletName());
		s.setMethod('GET');
		s.setOnServiceComplete(handlerObj, handlerMethod);
		connector.asyncRun(s);
	}
};


/**
 * @method doLogout
 * @param user User object class
 * executes user logout.
 */
UserHelper.prototype.doLogout = function(user) {
	var connector = new AjaxConnector();
	s = new Service("A1-003", oEnviroment.getServicePath()  + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
	s.setMethod('GET');
	s = connector.syncRun(s);
	if (s.getResult().hasErrors()) {
		//alert(s.getResult().getErrorCode() + "-" + s.getResult().getDescription());
	}
	this.deleteSession();
	user.clear();

	return user;
};


/**
 * @method rememberUser
 * @param user User object class
 * @param days number of days that cookie is valid
 * Remember user login.
 */
UserHelper.prototype.rememberUser = function (user, days) {
	var date = new Date();
	date.setTime(date.getTime() + (days*24*60*60*1000));
	var expires = '; expires=' + date.toGMTString();

	var parameters = 'remember=1' + expires+'; path=/';
	document.cookie = parameters;
};

/**
 * @method clearRememberUser
  * Remember clear remember cookie
 */
UserHelper.prototype.clearRememberUser = function () {
	var date = new Date();
	date.setTime(date.getTime() + (-1*24*60*60*1000));
	var expires = '; expires=' + date.toGMTString();

	var parameters = 'remember='+ expires+'; path=/';
	document.cookie = parameters;
};

/**
 * @method isUserRemembered
 * checks if exists a cookie with user information for login
 */
UserHelper.prototype.isUserRemembered = function () {
	var ca = document.cookie.split(';');
	var ret = false;
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') {c = c.substring(1,c.length); }
		if (c.indexOf('remember=') === 0) {
			if (c.substring('remember='.length,c.length) == '1') {
				ret = true;
			}
		}
	}
	return ret;
};

/**
 * @method createSession
 * @param user User object class
 * @param days number of days that cookie is valid
 * Reads current session if exists and loads information to user object.
 */
UserHelper.prototype.createSession = function (user, days) {
	var date = new Date();
	date.setTime(date.getTime()+(days*24*60*60*1000));
	var expires = '; expires='+date.toGMTString();

	var parameters = 'SID='+ user.getSID() + expires+'; path=/';
	document.cookie = parameters;

	parameters = 'ID='+ user.getID() + expires+'; path=/';
	document.cookie = parameters;

};

/**
 * @method readSession
 * @param user User object class
 * Reads current session if exists and loads information to user object.
 */
UserHelper.prototype.readSession = function (user) {
	var ca = document.cookie.split(';');
	var sid = '';
	var id = '';
	var cookieTime = 0;
	var today = new Date();
	var now = today.getUTCSeconds();

	for(var i=0;i < ca.length;i++) {
		var c = ca[i];

		while (c.charAt(0)==' ') {c = c.substring(1,c.length); }
		if (c.indexOf('SID=') === 0) {
			sid = c.substring('SID='.length,c.length);
		} else if (c.indexOf('ID=') === 0) {
			id = c.substring('ID='.length,c.length);
		} else if (c.indexOf('SHTS=') === 0) {
			cookieTime = parseInt(c.substring('SHTS='.length,c.length), 10);
		}
	}

	if (sid && id) {
		user.setID(id);
		user.setSID(sid);
	}

	return user;
};

/**
 * @method deleteSession
 * User session logout.
 */
UserHelper.prototype.deleteSession = function () {
	var date = new Date();
	date.setTime(date.getTime()+(-1*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
	var parameters = 'SID=' + expires+'; path=/';
	document.cookie = parameters;
	parameters = 'ID=' + expires+'; path=/';
	document.cookie = parameters;
};

/**
 * @method getMemberByUrl
 * @param unique member URL
 * returns member_id using unique URL to load him.
 */
UserHelper.prototype.getMemberByUrl = function(url) {
	var member_id = null;
	var connector = new AjaxConnector();
	s = new Service("X1-001", oEnviroment.getServicePath()  + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
	s.addParameter("squareurl", url);
	s.setMethod('POST');
	s = connector.syncRun(s);
	if (!s.getResult().hasErrors()) {
		var serviceRow = s.getResult().getCurrentRow().split("|!|");
		member_id = serviceRow[0];
	}
	return member_id;
};


/******************************************************************
 * UserHelper class end
 ******************************************************************/