
(function($){
	
	$.fn.jContact = function(settings) {
		
		$.fn.jContact.settings = $.extend($.fn.jContact.settings, settings);
		
		var self = $(this);
		
		var form = $.fn.jContact.createForm();
		
		$(self).append(form);
	};
	
	$.fn.jContact.createForm = function() {
		var form = document.createElement('form');
		$(form).attr('name', 'jContactForm');
		$(form).attr('id', 'jContactForm');
		$(form).submit(function(){
			
			$(".jContactError").slideUp(400);
			
			var name = $("form[name=jContactForm] input[name=contact_name]").val();
			
			var email = $("form[name=jContactForm] input[name=contact_email]").val();
			
			var subject = $("form[name=jContactForm] input[name=contact_subject]").val();
			
			var content = $("form[name=jContactForm] textarea[name=contact_content]").val();
			
			var error = false;
			
			if (name.length < 1)
			{
				$.fn.jContact.notifyError('jContactName', $.fn.jContact.settings.messages.empty_name);
				
				error = true;
			}
			
			if (email.length < 1)
			{
				$.fn.jContact.notifyError('jContactEmail', $.fn.jContact.settings.messages.empty_email);
				
				error = true;
			}
			
			if (subject.length < 1)
			{
				$.fn.jContact.notifyError('jContactSubject', $.fn.jContact.settings.messages.empty_subject);
				
				error = true;
			}
			
			if (content.length < 1)
			{
				$.fn.jContact.notifyError('jContactContent', $.fn.jContact.settings.messages.empty_content);
				
				error = true;
			}
			
			if (!error)
			{
				$.fn.jContact.validate(name, email, subject, content);
			}
			
			return false;
		});
		
		var div = document.createElement('div');
		$(div).attr('id', 'jContactStatus');
		$(form).append(div);
		
		var div = document.createElement('div');
		$(div).addClass('row');
		
		var label = document.createElement('label');
		$(label).append($.fn.jContact.settings.labels.name + ':');
		
		var input = document.createElement('input');
		$(input).attr('name', 'contact_name');
		$(input).attr('type', 'text');
		
		var error = document.createElement('div');
		$(error).attr('id', 'jContactName');
		$(error).css({ display: 'none' });
		
		$(div).append(label);
		$(div).append(input);
		$(div).append(error);
		$(form).append(div);
		
		var div = document.createElement('div');
		$(div).addClass('row');
		
		var label = document.createElement('label');
		$(label).append($.fn.jContact.settings.labels.email + ':');
		
		var input = document.createElement('input');
		$(input).attr('name', 'contact_email');
		$(input).attr('type', 'text');
		
		var error = document.createElement('div');
		$(error).attr('id', 'jContactEmail');
		$(error).css({ display: 'none' });
		
		$(div).append(label);
		$(div).append(input);
		$(div).append(error);
		$(form).append(div);
		
		var div = document.createElement('div');
		$(div).addClass('row');
		
		var label = document.createElement('label');
		$(label).append($.fn.jContact.settings.labels.subject + ':');
		
		var input = document.createElement('input');
		$(input).attr('name', 'contact_subject');
		$(input).attr('type', 'text');
		
		var error = document.createElement('div');
		$(error).attr('id', 'jContactSubject');
		$(error).css({ display: 'none' });
		
		$(div).append(label);
		$(div).append(input);
		$(div).append(error);
		$(form).append(div);
		
		var div = document.createElement('div');
		$(div).addClass('row');
		
		var label = document.createElement('label');
		$(label).append($.fn.jContact.settings.labels.content + ':');
		
		var input = document.createElement('textarea');
		$(input).attr('name', 'contact_content');
		
		var error = document.createElement('div');
		$(error).attr('id', 'jContactContent');
		$(error).css({ display: 'none' });
		
		$(div).append(label);
		$(div).append(input);
		$(div).append(error);
		$(form).append(div);
		
		var div = document.createElement('div');
		$(div).addClass('actions');
		
		var submit = document.createElement('input');
		$(submit).attr('type', 'Submit');
		$(submit).attr('value', $.fn.jContact.settings.labels.submit);
		
		var reset = document.createElement('input');
		$(reset).attr('type', 'button');
		$(reset).attr('value', $.fn.jContact.settings.labels.reset);
		$(reset).click(function(){
			document.getElementById('jContactForm').reset()
		});
		
		$(div).append(submit);
		$(div).append(reset);
		$(form).append(div);
		
		return form;
	}
	
	$.fn.jContact.notifyError = function(id, message) {

		$("#"+id).attr('class', 'jContactError');
		
		$("#"+id).html(message);
		
		$("#"+id).slideDown(400);
		
		$("#"+id).click(function(){
			$(this).slideUp(400);
		});
	};
	
	$.fn.jContact.notifySuccess = function(id, message) {

		$("#"+id).attr('class', 'jContactSuccess');
		
		$("#"+id).html(message);
		
		$("#"+id).slideDown(400);
		
		$("#"+id).click(function(){
			$(this).slideUp(400);
		});
	};
	
	$.fn.jContact.notifyLoading = function(id, message) {

		$("#"+id).attr('class', 'jContactLoading');
		
		$("#"+id).html(message);
		
		$("#"+id).slideDown(400);
	};
	
	$.fn.jContact.validate = function(name, email, subject, content) {
		
		$.ajax({
			type: 'POST',
			url: $.fn.jContact.settings.validation,
			data: {
				name: name,
				email: email,
				subject: subject,
				content: content
			},
			success: function(response){
				
				if ($("status",response).text() == 'error') {
					
					$("error",response).each(function(){
						
						var message = $("message", this).text();
						
						var field = $("field", this).text();
						
						$.fn.jContact.notifyError(field, message);
					});
				}
				else {
					
					var action = $("action", response).text();
					
					$.fn.jContact.notifyLoading('jContactStatus', $.fn.jContact.settings.messages.loading);
					
					$.fn.jContact.send(name, email, subject, content, action);
				}
			}
		});
	};
	
	$.fn.jContact.send = function(name, email, subject, content, action) {
		
		$.ajax({
			type: 'POST',
			url: action,
			data: {
				name: name,
				email: email,
				subject: subject,
				content: content
			},
			success: function(response){
				
				if ($("status",response).text() == 'error') {
					
					$.fn.jContact.notifyError('jContactStatus', $.fn.jContact.settings.messages.send_error);
					
				}
				else {
					
					document.getElementById('jContactForm').reset();
					
					$.fn.jContact.notifySuccess('jContactStatus', $.fn.jContact.settings.messages.send_success);
						
				}
			}
		});		
		
	};
	
	$.fn.jContact.settings = {
		
		validation: '/server/validate.action.php',
		
		labels: {
			name: 'Imię i nazwisko',
			email: 'Adres e-mail',
			subject: 'Temat wiadomości',
			content: 'Treść wiadomości',
			submit: 'Wyślij',
			reset: 'Wyczyść'
		},
		
		messages: {
			empty_name: 'Podaj swoje imię i nazwisko',
			empty_email: 'Podaj swój adres e-mail',
			empty_subject: 'Wprowadź temat wiadomości',
			empty_content: 'Wprowadź treść wiadomości',
			
			loading: 'Trwa wysyłanie...',
			
			send_error: 'Nastąpił błąd w trakcie wysyłania wiadomości',
			send_success: 'Dziękujemy za wysłanie wiadomości!'
		}
	}
	
})(jQuery);
