Ext.namespace('cc');
Ext.namespace('cc.re');
Ext.namespace('cc.re.members');


/**
* Shows the login window
*/
cc.re.members.show_login = function()
{
	cc.re.members.login_win.getUpdater().update({
		url: '../admin/modules/members/site_provider.php?act=login_win_layout'
	});
	cc.re.members.login_win.show();
}


/**
* Submits the user login
*/
cc.re.members.login = function()
{
	var sf = new Ext.form.BasicForm('members_login_form', {
		method: 'POST',
		url: '../admin/modules/members/site_provider.php?act=do_login'
	});
	
	fields = sf.getValues();
	
	// Validate the values
	if (fields.email == '' || fields.password == '')
	{
		Ext.MessageBox.alert('Login Error',
			'You must enter both your email and your password to log in.  If you do not have a member account, you can register one by clicking on `Register`.'
		);
		return false;
	}
	
	sf.submit({
		success: function(form, action)
		{
			Ext.MessageBox.alert(
				'Login Successful',
				'You have sucessfully logged in.  This page will now refresh to give you access to all member features.'
			);
			cc.re.members.login_win.hide();
			document.location.reload();
		},
		failure: function(form, action)
		{
			//console.dir(action);
			if (action.result.error)
			{
				Ext.MessageBox.alert('Error!', '' + action.result.error);
			}
			else
			{
				Ext.MessageBox.alert('Connection error!', 'An error was encountered while communicating with the server.');
			}
		}
	});
	return true;
}


/**
* Logs the user out
*/
cc.re.members.logout = function()
{
	Ext.MessageBox.confirm('Logout?', 'Are you sure you want to log out?', function(btn) {
		if (btn == 'yes')
		{
			Ext.Ajax.request({
				url: '../admin/modules/members/site_provider.php?act=do_logout',
				'method': 'GET',
				success: function(response, options) {
					Ext.MessageBox.alert('Logout', 'Logout successful!');
					document.location.reload();
				},
				failure: function(response, options) {
					Ext.MessageBox.alert('Connection error!', 'An error was encountered while communicating with the server.');
				}
			});
		}
	});
}


/**
* Shows the recover window
*/
cc.re.members.show_recover = function()
{
	cc.re.members.login_win.getUpdater().update({
		url: '../admin/modules/members/site_provider.php?act=recover_win_layout'
	});
}

/**
* Submits the recover password form
*/
cc.re.members.recover = function()
{
	var sf = new Ext.form.BasicForm('members_recover_form', {
		method: 'POST',
		url: '../admin/modules/members/site_provider.php?act=recover'
	});
	
	fields = sf.getValues();
	// Validate the values
	if (fields.email == '')
	{
		Ext.MessageBox.alert('Missing Email', 'You must enter your email address to receive your password!');
		return false;
	}
	
	sf.submit({
		success: function(form, action)
		{
			Ext.MessageBox.alert(
				'Password Sent',
				'Your password has been sent to your email.  If you have not received your password in a few minutes, check your spam folder.'
			);
			cc.re.members.login_win.hide();
		},
		failure: function(form, action)
		{
			//console.dir(action);
			if (action.result.error)
			{
				Ext.MessageBox.alert('Error!', '' + action.result.error);
			}
			else
			{
				Ext.MessageBox.alert('Connection error!', 'An error was encountered while communicating with the server.');
			}
		}
	});
	return true;
}


/**
* Shows the register window
*/
cc.re.members.show_register = function()
{
	cc.re.members.register_win.getUpdater().update({
		url: '../admin/modules/members/site_provider.php?act=register_win_layout',
		callback: function() {
			cc.re.members.register_win.center();
		}
	});
	cc.re.members.register_win.show();
}


/**
* Sends the user registration
*/
cc.re.members.submit_registration = function()
{
	var sf = new Ext.form.BasicForm('member_register_form', {
		method: 'POST',
		url: '../admin/modules/members/site_provider.php?act=register'
	});
	
	fields = sf.getValues();
	
	// Validate the values
	var errors = '';
	var error_count = 0;
	if (fields.name == '')
	{
		errors += "You must enter a name.<br/>";
		error_count++;
	}
	if (fields.email == '')
	{
		errors += "You must enter a valid email address.<br/>";
		error_count++;
	}
	if (fields.password == '')
	{
		errors += "You must choose a password.<br/>";
		error_count++;
	}
	if (fields.password_confirm != fields.password)
	{
		errors += "The password and password confirmation must be the same.<br/>";
		error_count++;
	}
	
	if (error_count > 0)
	{
		Ext.MessageBox.alert('Incomplete Data',
			'The following error' + (error_count > 1 ? 's were' : 'was') + ' found in your registration:<br/><br/>' + errors + '<br/>Please correct these errors and click `Register` again!'
		);
		return false;
	}
	
	sf.submit({
		success: function(form, action)
		{
			Ext.MessageBox.alert(
				'Registration Successful',
				'Thank you for registering!<br/>Your member account has been sucessfully created.  You can now log in using your email and the password you have chosen.'
			);
			cc.re.members.register_win.hide();
		},
		failure: function(form, action)
		{
			//console.dir(action);
			if (action.result.error)
			{
				Ext.MessageBox.alert('Error!', '' + action.result.error);
			}
			else
			{
				Ext.MessageBox.alert('Connection error!', 'An error was encountered while communicating with the server.');
			}
		}
	});
	return true;
}



/**
* Cancels the user registration with confirm
*/
cc.re.members.cancel_registration = function()
{
	Ext.MessageBox.confirm('Cancel', 'Cancel registration?  Any information entered will be lost.', function (btn) {
		if (btn == 'yes')
		{
			cc.re.members.register_win.hide();
		}
	});
}



/**
* Init
*/
Ext.onReady(function(){
	/**
	* The login window
	*/
	cc.re.members.login_win = new Ext.Window({
		width: 400,
		height: 200,
		autoLoad: false,
		bodyStyle: 'padding: 25px;',
		closable: true,
		closeAction: 'hide',
		constrain: true,
		draggable: true,
		hideModel: 'display',
		layout: 'fit',
		maximizable: false,
		modal: true,
		renderTo: 'body',
		title: 'Member Login',
		resizable: false,
		tools: [
			{
				id: 'refresh',
				handler: function (event, toolEl, Panel)
				{
					Panel.getUpdater().refresh();
				}
			}
		]
	});
	
	/**
	* The register window
	*/
	cc.re.members.register_win = new Ext.Window({
		width: 400,
		autoHeight: true,
		autoLoad: false,
		bodyStyle: 'padding: 25px;',
		closable: true,
		closeAction: 'hide',
		constrain: true,
		draggable: true,
		hideModel: 'display',
		layout: 'fit',
		maximizable: false,
		modal: true,
		renderTo: 'body',
		title: 'Member Registration',
		resizable: false,
		autoScroll: true,
		tools: [
			{
				id: 'refresh',
				handler: function (event, toolEl, Panel)
				{
					Panel.getUpdater().refresh();
				}
			}
		]
	});
});