/**
 * 
 * @application Evans & Finch
 * @version 0.0.0.1
 * @author Chris Keegan
 * @copyright Evans & Finch, 2010
 * 
 */

(
	function()
	{
		var messageSubmit = window.messageSubmit = function( page )
		{
			return new messageSubmit.fn.init( page );
		};
	
		messageSubmit.fn = messageSubmit.prototype = 
		{
			version: "0.0.1",
			page: null,
			ui: { name: null, email: null, message: null },
			finished: false,
			result: false,
			
			init: function( page )
			{
				var form = this;
				this.setupValidation();
				this.validate();
				this.updateSubmitButton();
				
				this.formEvents();
				this.nameEvents();
				this.emailEvents();
				this.messageEvents();
			}, 
			
			formEvents: function()
			{
				var form = this;
				$( '.efh_form#message_form' ).submit( function() 
				{
					var name = $('input#name').val();
					var email = $('input#email').val();
					var message = $('textarea#message').val();
					
					if ( form.valid() == false )
						return false;
					
					if ( typeof( window.m_tracker ) != "undefined" )
						window.m_tracker.trackConversion("message_sent");
					
					form.finished = false;
					$('.info#content_message_info').fadeOut(600, function()
					{
						$('.info#content_message_info_loading').fadeIn(600, function()
						{		
							if ( form.finished == true )
							{
								form.displayResult();
							}
							else
							{
								form.finished = true;
							}
							
						});
					});
					
					$.post( "api/submit_message.php", 
					{ 
						name: name,
						email: email,
						message: message
					}, 
					function(data, textStatus)
					{
						form.result = data.result;
						
						if ( form.finished == true )
						{
							form.displayResult();
						}
						else
						{
							form.finished = true;
						}
					}, "json" );
					
					return false;
				});
				
			}, //formEvents
			
			
			displayResult: function()
			{
				var form = this;
				
				if ( this.result == true )
				{
					$('.info#content_message_info_loading').fadeOut(100, function()
					{
						$('.info#content_message_info_success').fadeIn(500, function() 
						{
							$().oneTime(3000, "dismiss", function()
							{
								$('.info#content_message_info_success').fadeOut(500, function()
								{
									form.reset();
								});
							});
						});
					});
				}
				else
				{
					$('.info#content_message_info_loading').fadeOut(100, function()
					{
						$('.info#content_message_info_failure').fadeIn(500, function() 
						{
							$().oneTime(5000, "dismiss", function()
							{
								$('.info#content_message_info_failure').fadeOut(500, function()
								{
									form.reset();
								});
							});
						});
						
					});				
				}
			},//displayResult
			
			reset: function()
			{
				$(this.ui.name.element).removeClass("label_on").val(this.ui.name.label);	
				$(this.ui.email.element).removeClass("label_on").val(this.ui.email.label);
				$(this.ui.message.element).removeClass("label_on").val(this.ui.message.label);	
				
				$('.info#content_message_info').fadeIn(600);
				
				this.validate();
				this.updateSubmitButton();	
				
			},//reset
			
			nameEvents: function()
			{
				var form = this;
				this.softLabel(this.ui.name);
				
				$("input#name").keyup( function(ev)
				{
					form.validate();
					form.updateInput( form.ui.name );
					form.updateSubmitButton();
				});
				
			}, //nameEvents
			

			emailEvents: function()
			{
				var form = this;
				this.softLabel(this.ui.email);

				$("input#email").keyup( function(ev)
				{
					form.validate();
					form.updateSubmitButton();
				});
				
				$("input#email").focus( function(ev)
				{
					$('.message_prompt#email_error').fadeOut(500);
				});
				
				$("input#email").blur( function(ev) 
				{
					form.validate();
					form.updateInput(form.ui.email);
					form.updateSubmitButton();	
					
					/*
					if(form.ui.name.status == "bad")
					{
						$("input#email").focus( function(ev)
						{
							$('.message_prompt#email_error').fadeOut(500);
						});
					}
					*/
				});

			}, //emailEvents

			messageEvents: function()
			{
				var form = this;
				this.softLabel(this.ui.message);
				
				$("textarea#message").keyup( function(ev)
				{
					form.validate();
					form.updateInput(form.ui.message);
					form.updateSubmitButton();
				});
				
			}, //messageEvents
			
			
			softLabel: function( input )
			{
				var form = this;
				
				$(input.element).focus( function(ev)
				{
					if ( $(this).val() == input.label )
					{
						$(this).val( "" );	
					}
					
					$(this).addClass("label_on");
					
				});
				
				$(input.element).blur( function(ev)
				{
					if ( $(this).val() == "" )
					{
						$(this).removeClass("label_on");	
						$(this).val( input.label );	
					}
					form.validate();
				});

				
			}, //softLabel
			
			setupValidation: function()
			{
				this.ui.name = 
				{
					label: "name",
					element: $("input#name"),
					status: "pending"
				};
				this.ui.email = 
				{
					label: "email",
					element: $("input#email"),
					status: "pending"
				};
				this.ui.message = 
				{
					label: "message",
					element: $("textarea#message"),
					status: "pending"
				};
				
				this.validate();
			},
			
			valid: function()
			{
				var name = this.ui.name.status == "good";
				var email = this.ui.email.status == "good";
				var message = this.ui.message.status == "good";
				return name && email && message;
			},
			
			validate: function()
			{
				var name = this.ui.name.element.val();
				var email = this.ui.email.element.val();
				var message = this.ui.message.element.val();
				
				if ( name == "name" ) 
				{
					this.ui.name.status = "pending";
				}
				else if ( name.length > 0 )
				{
					this.ui.name.status = "good";
				}
				else
				{
					this.ui.name.status = "bad";
				}
				
				if ( email == "email" )
				{
					this.ui.email.status = "pending";
				}
				else if ( email.length > 0 )
				{
					var regex = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;				
					
					if ( regex.test(email) == false )
					{
						this.ui.email.status = "bad";
					}
					else
					{
						this.ui.email.status = "good";
					}
				}
				else
				{
					this.ui.email.status = "bad";	
				}				

				if ( message=="message")
				{
					this.ui.message.status = "pending";

				}
				else if ( message.length > 0 )
				{
					this.ui.message.status = "good";
				}
				else
				{
					this.ui.message.status = "bad";
				}
			}, // validate
			
			updateInput: function( input )
			{
				switch ( input.status )
				{
					case "pending":
					{
						input.element.addClass("pending").removeClass("good").removeClass("bad");
						if ( input.label == "email" )
							$('.message_prompt#email_error').fadeOut(100);
							
						
					} break;
					case "good":
					{
						input.element.removeClass("pending").addClass("good").removeClass("bad");
						if ( input.label == "email" )
							$('.message_prompt#email_error').fadeOut(100);
						
					} break;
					case "bad":
					{
						if ( input.label == "email" )
						{
							input.element.removeClass("pending").removeClass("good").addClass("bad");
							var offset = $("input#email").offset();
							$('.message_prompt#email_error').css(
								{
									top: offset.top - 22,
									left: offset.left + 70,
									zIndex: '10000'
								}
							).fadeIn(500);
						}
						else
						{
							input.element.addClass("pending").removeClass("good");
						}
						
					} break;
				}				
			}, //updateInput
			
			updateSubmitButton: function()
			{
				if ( this.valid() == true )
				{
					$("input#submit").removeAttr( "disabled" );
					$(".submit_button").addClass("submit_button_valid");
					$(".submit_button").removeClass("submit_button_invalid");
				}
				else
				{
					$("input#submit").attr( "disabled", "true" );
					$(".submit_button").addClass("submit_button_invalid");
					$(".submit_button").removeClass("submit_button_valid");	
				}
				return this;
			} // updateSubmitButton
			
			
			
			
		}
	}
)();

messageSubmit.fn.init.prototype = messageSubmit.fn;
