var NewsletterForm = Class.create();
NewsletterForm.prototype = {
		
	initialize: function(marketId) 
	{
		this.state = 'loading';
		this.hasErrors = false;
	},

	subscribe: function() 
	{
		var formData, request;
		var form_obj = $('subscribe');
		control_in(form_obj['email'], 'Enter email address');
		formData = Form.serialize(form_obj);
		switch(this.validateEmail()) {
		case 'valid':
			request = new Ajax.Request('/newsletter/add',
			{
			    method: 'post',
			  	parameters: formData,	
			    onSuccess: newsletterForm.onSuccess,	
			    onFailure: newsletterForm.onFailure
			});
			break;
		case 'invalid':
			this.showError('The email address you entered appears to be incorrect.');
			break;
		case 'empty':
			this.showError('Please enter a valid email address.');
			control_out(form_obj['email'], 'Enter email address');
			break;
		}
	},
	
	onSuccess: function(response)
	{
    	var data = response.responseText;
    	newsletterForm.state = 'success';
    	if(data == "OK") {
    		newsletterForm.hideError();
			newsletterForm.showConfirmation();
    	} else if (data == "") {
    		newsletterForm.showError('An error occurred, please retry.');
		} else {
			newsletterForm.showError('Error on submitting, please enter another email address.');
		}
	},
	
	onFailure: function(response)
	{
		newsletterForm.state = 'failure';
		newsletterForm.showError('An error occurred, please retry.');
	},
	
	validateEmail: function() {
		var form_obj = $('subscribe');
		var emailRE = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if(form_obj['email'].value == '') {
			return 'empty';
		} else {
			return (emailRE.test(form_obj['email'].value)) ? 'valid' : 'invalid';
		}
	},

	showConfirmation: function() {
        $$('.container .newsletter').each(
        	function(s) {
	            if(s.hasClassName('err')) {
	                s.removeClassName('err');
	            }
                if(!s.hasClassName('confirmed')){
                    s.addClassName('confirmed');
                }
        	}
	    );
	},
	
	showError: function(errorMessage) {
		var subscribeMsg = $('subscribeMsg');
		subscribeMsg.innerHTML = errorMessage;
		
        $$('.container .newsletter').each(
    		function(s) {
                if(!s.hasClassName('err')) {
                    if(s.hasClassName('confirmed')){
                        s.removeClassName('confirmed');
                        s.addClassName('');
                    }
                    s.addClassName('err');
                }    
            }
        );    	
	},
	
	hideError: function() {
        $$('.container .newsletter').each(
        	function(s) {
	            if(s.hasClassName('err')) {
	                s.removeClassName('err');
	            } else {
	                if(s.hasClassName('confirmed')){
	                    s.removeClassName('confirmed');
	                }
                    s.addClassName('err');
	            }
        	}
	    );
	}
}
var newsletterForm = new NewsletterForm();

function control_in(control, text)
{
	if (text == control.value)
		control.value = '';
}
function control_out(control, text)
{
	if ('' == control.value)
		control.value = text;
}

