$(document).ready(function(){
	var nwslBox = new NewsletterBox();
});
NewsletterBox = function (){
	this.processUrl = baseURL + 'newsletter/ajax';
	this.settedErrorMessages = {
			'name'		: '- completarea numelui si prenumelui ',
			'email'		: '- introduceti o adresa de email valida ',
			'actions'	: '- selectati cel putin o actiune '
	};
	
	this.form = $('form.newsletter');
	this.errorMessages = [];
	
	this.emailDefaultValue = 'adresa de email';
	this.nameDefaultValue = 'nume si prenume';
	
	this.activeBox = 'subscribe';
	this.subscribeBox = $('.newsletter-subscribe');
	this.unsubscribeBox = $('.newsletter-unsubscribe');
	
	this.emailField = $('input@[name="newsletter[email]"]');
	this.nameField = $('input@[name="newsletter[name]"]');
	
	this.submitButton = $(".submit");
	
	this.setActions();
};
NewsletterBox.prototype.setActions = function(){
	var _this = this;
	this.emailField.val(this.emailDefaultValue);
	this.nameField.val(this.nameDefaultValue);
	
	$(this.form).submit(function () {
		_this.ajaxSubmit();
		return false;
	});
	
	this.setTextFieldAction(this.emailField, this.emailDefaultValue);
	this.setTextFieldAction(this.nameField, this.nameDefaultValue);
	
	$('#action-unsubscribe').click(function () {
		_this.activeBox = 'unsubscribe';
		_this.subscribeBox.hide();
		_this.unsubscribeBox.show();
	});

	$('#action-subscribe').click(function () {
		_this.activeBox = 'subscribe';
		_this.subscribeBox.show();
		_this.unsubscribeBox.hide();
	});
	
	$(this.unsubscribeBox).hide();
};
NewsletterBox.prototype.setTextFieldAction = function (field, defaultValue) {
	$(field).focus(function (){
		if (field.val() == defaultValue) {
			$(field).val('');
		}
	});
	$(field).blur(function () {
		if (field.val() == ''){
			$(field).val(defaultValue);
		}
	});
};

NewsletterBox.prototype.validate = function (){
	this.errorMessages = [];
	
	var valid = true;
	
	if (null == this.emailField.val().toString().match(/^([a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.+[a-zA-Z0-9]{2,4})+$/)) {
		this.errorMessages.push(this.settedErrorMessages.email);
		valid = false;
	}
	
	if (this.nameField.val().toString().replace(' ', '') == '' || this.nameField == this.nameFieldDefautlValue){
		this.errorMessages.push(this.settedErrorMessages.name);
		valid = false;
	}
	
	if (this.getNewsletterActions().length < 1) {
		this.errorMessages.push(this.settedErrorMessages.actions);
		valid =  false;
	}
	
	return valid;
};

NewsletterBox.prototype.getNewsletterActions = function () {
	return this.form.find('input@[type="checkbox"][name*="['+this.activeBox+']"][checked]');
};

NewsletterBox.prototype.parseErrorMessagesStack = function (){
	var message = "Pentru trimiterea formularului este necesar sa : \n" ;
	
	$.each(this.errorMessages, function (i, n){
		message += "\t" + n + "\n";
	});
	
	return message;
};

NewsletterBox.prototype.ajaxSubmit = function () {
	var _this = this;
	var postData = {};
	var subscriptionResponse = new Array;
	
	if (!this.validate()) {
		alert(this.parseErrorMessagesStack());
		return false;
	}
	
	$.each(this.getNewsletterActions(), function (i, n){
		var input = $(n).attr('name').toString();
		input.match(/\w+\[(\w+)\]\[(\w+)\]\[(\w+)\]/);
		subscriptionResponse.push(_this.request (RegExp.$1, RegExp.$2, RegExp.$3));
	});
	alert(subscriptionResponse.join('\n'));
};

NewsletterBox.prototype.request = function (site, action, type){
	var postData = {name: $(this.nameField).val(), 'email' : $(this.emailField).val(), 'site' : site, 'action' : action, 'type' : type};
	var response = null;
	$.ajax({
		async : false,
		cache : false,
		data : postData,
		dataType : 'json',
		url : this.processUrl,
		type : 'post',
		success: function (data) {
			response = data;
		}
	});
	if (response === null) {
		response = {};
		response.message = 'A intervenit o eroare la abonare !';
	}
	return response.message;
};
