
var Css = require ('./login.css');
var Tpl = require ('./login.xml');

module.exports = new Class
({
	Extends: Htk.Widget,
	Properties:
	{
		conn:
		{
			type: Db.Connection
			,set: function (x)
			{
				this.link ({_conn: x}, {'loading-changed': this._onConnLoadChange});
				x.execQuery (
					'SELECT title, link, icon FROM social '
						+'WHERE priority ORDER BY priority',
					this._onSocialQueryDone.bind (this));
			}
			,get: function ()
			{
				return this._conn;
			}
		}
	}

	,initialize: function (props)
	{
		this.builderInitString (Tpl);
		
		var self = this;
		this.$('form').onsubmit = function ()
		{
			self._onSubmit ();
			return false;
		};

		this.parent (props);
	}
	
	,_onConnLoadChange: function (conn, isLoading)
	{
		if (isLoading)
			this.$('spinner').start ();
		else
			this.$('spinner').stop ();
	}
	
	,show: function ()
	{
		document.body.appendChild (this.node);

		var lastUser = localStorage.getItem ('hederaLastUser');

		if (lastUser)
			this.$('user').value = lastUser;
			
		this._focusUserInput ();
	}
	
	,hide: function ()
	{
		Vn.Node.remove (this.node);
	}
	
	,_focusUserInput: function ()
	{
		var userEntry = this.$('user');
		userEntry.focus ();
		userEntry.select ();
	}
	
	,_disableUi: function (disabled)
	{
		this.$('user').disabled = disabled;
		this.$('pass').disabled = disabled;
		this.$('submit').disabled = disabled;
	}
	
	,_onSubmit: function ()
	{
		this._conn.open (
			this.$('user').value,
			this.$('pass').value,
			this.$('remember').checked,
			this._onConnOpen.bind (this)
		);
		
		this._disableUi (true);
	}
	
	,_onConnOpen: function (conn, success, error)
	{
		this.$('pass').value = '';
		this._disableUi (false);

		if (success)
		{
			localStorage.setItem ('hederaLastUser', this.$('user').value);
			this.signalEmit ('login');
		}
		else
			this._focusUserInput ();
	}
	
	,onPasswordLost: function ()
	{
		var user = this.$('user').value;
	
		if (!user)
			Htk.Toast.showError (_('Please write your user name'));
		else
			this._conn.send ('core/recover-password', {'user': user},
				this._onPasswordRecovered.bind (this));
	}
	
	,_onPasswordRecovered: function (json, error)
	{
		if (json)
			Htk.Toast.showMessage (_('A mail has been sent with your new password'));
		else
			Htk.Toast.showError (error.message);
	}

	,_onSocialQueryDone: function (resultSet)
	{
		var res = resultSet.fetchResult ();
		var social = this.$('social');
		
		while (res.next ())
		{
			var a = document.createElement ('a');
			a.href = res.get ('link');
			a.target = '_blank';
			social.appendChild (a);
			
			var img = document.createElement ('img');
			img.src = 'image/social/'+ res.get ('icon');
			img.alt = res.get ('title');
			img.title = res.get ('title');
			a.appendChild (img);
		}
	}
});

