/*
 * jQuery SimpleContact Plugin v.3
 * Inserts, validates and sends a simple contact form.
 * http://benjaminplum.com/
 *
 * Copyright (c) 2009 Ben Plum under MIT License
 *
 * Date: 10-21-09
 * Revision: 8 (last: 12-6-09)
 *
 * USE:	$('# WRAPPER_DIV_ID ').simpleContact(' FORM_DESTINATION_URL ', {
			start: '[ DEFAULT MESSAGE ]',
			sent: '[ FORM SEND MESSAGE ]',
			fieldError: '[ FIRELD ERROR MESSAGE ]',
			sendError: '[ SEND ERROR MESSAGE ]'
		});
 * CSS:
	#simpleContact { width: 300px; }
	#simpleContact p { color: #999; font-family: 'Tahoma', sans-serif; font-size: 13px; margin: 0 0 20px 0; }
	#simpleContact form input, #simpleContact form textarea { background: #666; border: 0; color: #999; font-family: "Lucida Grande", sans-serif; font-size: 13px; margin: 0 0 5px 0; padding: 5px 5px; width: 290px; }
	#simpleContact form input:focus, #simpleContact form textarea:focus { color: #fff; }
	#simpleContact form .error { background: #57063C; }
	#simpleContact form .checked { background: #333; color: #999 }
	#simpleContact form textarea { height: 75px; }
	#simpleContact form #send { margin: 0; width: 100px; text-align: left; }
 */
 
(function($){
	$.fn.simpleContact = function(scriptUrl, messages)
	{
		if(messages == null)
		{
			messages = {
				start: 'Fill out the form below and click send.',
				sent: 'Your message has been sent, thanks.',
				fieldError: 'Please fix the errors below before sending!',
				sendError: 'There was an error sending, please try again!'
			};
		}
		else
		{
			if(messages.start == null)
				messages.start = 'Fill out the form below and click send.';
			if(messages.sent == null)
				messages.sent = 'Your message has been sent, thanks.';
			if(messages.fieldError == null)
				messages.fieldError = 'Please fix the errors below before sending!';
			if(messages.sendError == null)
				messages.sendError = 'There was an error sending, please try again!';
		}	
		var formContainer = this;
		var emailReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		
		//draw form
		var form = '<p class="status">' + messages.start + '</p><form id="contact_form">';
		form += '<input type="text" id="name" class="text" value="Full Name" />';
		form += '<input type="text" id="email" class="email" value="Email Address" />';
		form += '<textarea id="message" class="textarea">Message</textarea>';
		form += '<input type="submit" id="send" class="submit" value="Send" />';
		form += '</form>';
		formContainer.append(form);
		formContainer.find(':input').not('.submit').smartBlur();
		
		//on form submission
		formContainer.find('form').submit(function () {
			var allGood = true;
			
			$(this).find(':input').not('.submit').each(function() {
				if(!checkField($(this)))
					allGood = false;
			});
			
			if(allGood)
				sendForm();
			else
				updateStatus(messages.fieldError);
			
			return false;
		}); 
		
		//send form
		var sendForm = function() 
		{
			var formData = 'name=' + formContainer.find(':input').eq(0).val();
			
			//combine data
			formContainer.find('.submit').fadeOut();
			formContainer.find(':input').not('.submit').not(':eq(0)').each(function() {
				formData += '&' + $(this).attr('id') + '=' + $(this).val();
			});
			
			//send
			$.ajax({
				type: "GET",
				url: scriptUrl,
				data: formData,
				success: function(data){
					if(data == 'SENT')
					{
						formContainer.find('form').fadeOut('normal', function() {
							formContainer.find('p').fadeIn();
						});
						updateStatus(messages.sent, true);
					}
					else
					{
						updateStatus(messages.sendError);
					}
				},
				error: function(data) {
					updateStatus(messages.sendError);
				}
			});
			return false;
		};
		
		//if error ending
		var updateStatus = function(string, sent)
		{
			formContainer.find('.status').html(string);
			if(!sent)
				formContainer.find('.submit').fadeIn();
		};
		
		//error check fields
		var checkField = function(field) 
		{
			var check = true;
			// text or text area
			if(field.hasClass('text') || field.hasClass('textarea'))
			{
				if(field.val() == '' || field.val() == field.attr('defaultValue'))
					check = false; 
			}
			//email
			else if(field.hasClass('email'))
			{
				if(emailReg.test(field.val()) == false)
					check = false;
			}
			
			if(check)
			{
				field.addClass('checked');
				field.removeClass('error');
			}
			else
			{
				field.removeClass('checked');
				field.addClass('error');
			}
				
			return check;
		};
	}
})(jQuery);
