function Newsletter() {
	this.listen();
}



/**
* The subscribe form - a jQ object
*/
Newsletter.prototype.form = $('#subscribe');



/**
* The loader element - a jQ object
*/
Newsletter.prototype.loader = $('.subscribe .loader');



/**
* Listen for the form submission
*/
Newsletter.prototype.listen = function() {

	var self = this;

	this.form.submit(function() {
	
		if(self.state.enabled) {

			var loader = self.Loader();
			self.disable();		
			loader.start();
			
			$.post('../action/blog-digest-subscribe.php', {
				email: $('#email_address').val()
			}, function(data) {
			
				self.enable();
				loader.stop();
				
				var showStatus = function() {					
					switch(data) {
						case '0':
							self.form.find('.error').slideDown(300);
							break;
						case '1':
							self.form.find('.success').slideDown(300);
							break;
					}
				};
				
				var currentStatusMessage = self.form.find('.status:visible');
				
				if(currentStatusMessage.length > 0) {
					currentStatusMessage.slideUp(300, showStatus);
				} else {
					showStatus();
				}
				
			});
			
		}
		
		return false;
		
	});
	
};



/**
* Stores state
*/
Newsletter.prototype.state = {
	enabled: true
};



/**
* Handles showing the user a loader
*/
Newsletter.prototype.Loader = function() {
	
	var self = this;
	
	function Loader() {}
	
	Loader.prototype.start = function() {
		self.loader.show();
	};
	
	Loader.prototype.stop = function() {
		self.loader.hide();
	};
	
	return new Loader;

};



/**
* Disable the form
*/
Newsletter.prototype.disable = function() {
	this.state.enabled = false;
	this.form.addClass('disabled');
};



/**
* Enable the form
*/
Newsletter.prototype.enable = function() {
	this.state.enabled = true;
	this.form.removeClass('disabled');
};



$(document).ready(function() {
	var newsletter = new Newsletter;
});
