$(document).ready(function() {
	$("#signup form").toFancyEmailSubmitForm({activeClassName: "active",defaultText:"Your Email Address", thankyouText: "Thanks, we'll be in touch!"});
});

(function($){  
  
    //Attach this new method to jQuery  
    $.fn.extend({ 
		 
        toFancyEmailSubmitForm: function(options) {  
			
			//Settings list and the default values  
            var defaults = {
                activeClassName: "active",  
                focusClassName: "focus",
				errorClassName : "error",
				buttonDownClassName : "down",
				buttonDisabledClassName : "disabled",
				thankyouText: "Thanks, we'll be in touch!"
            };

			var options = $.extend(defaults, options); 
			
			var formState = {
				'autofilled':0,
				'ready':1,
				'didFocus':2,
				'didUnfocus':3,
				'willSubmit':4,
				'didSubmit':5,
				'submitFailed':6
			}
            //Iterate over the current set of matched elements  
            return this.each(function() {
	
				var form = $(this);
              	var o = options;
				var tfs = $("form input:text");
				var sb = $("form input:submit");
				
				tfs.each(function(){
					
					var tf = $(this);
					
					// if it's been autofilled skip to a state 
					// where it can be submitted
					var autofilled = (tf.val() != o.defaultText);
					if (autofilled){
						updateFormStatus(formState.autofilled, tf);
					}
					
					// When focusing clear default text
					tf.focus(function(){
						if (tf.val() == o.defaultText){
							updateFormStatus(formState.didFocus, tf);
						} else {
							updateFormStatus(formState.didFocus, tf);
						}
					});
					
					tf.blur(function(){
						var restore = (tf.val() == "");
						if (restore) {
							// Restore default message text
							tf.val(o.defaultText);
							updateFormStatus(formState.didUnfocus, tf);
						} 
					});
				});
				
				sb.mousedown(function(){
					updateFormStatus(formState.willSubmit);
				});
				
				sb.focus(function(){
					this.blur();
				});
				
				form.submit(function(){
					// Submit the form ajax
					$(this).ajaxSubmit({dataType:'json',success:formSubmitFinished});
					// Disable The Form
					updateFormStatus(formState.didSubmit, tfs);
					return false;
				});
				
				
				// Called on Completion of form submit
				function formSubmitFinished(rsp){
					if (rsp.result == "ok"){
						sb.fadeOut(function(){
							$("label#ajax").text(o.thankyouText);
							$(this).attr('class','success');
							$(this).fadeIn();
						});
					}else{
						updateFormStatus(formState.submitFailed,tfs);
					}
				}
				
				function updateFormStatus(state, tf){
					switch(state){
						case formState.autofilled:
						    tf.attr('disabled',false);
							break;
						case formState.ready:
							tf.removeClass(o.errorClassName);
							tf.toggleClass(o.focusClassName);
							sb.toggleClass(o.activeClassName);
							break;
						case formState.didFocus:
							tf.val("");
							tf.removeClass(o.errorClassName);
							sb.toggleClass(o.activeClassName);
							tf.toggleClass(o.focusClassName);
							sb.attr('disabled',false);
							break;
						case formState.didUnfocus:
							tf.toggleClass(o.focusClassName);
							sb.toggleClass(o.activeClassName);
							sb.attr('disabled',true);
							break;
						case formState.willSubmit:
							sb.toggleClass(o.activeClassName);
							sb.toggleClass(o.buttonDownClassName);
							break;
						case formState.didSubmit:
							sb.toggleClass(o.buttonDownClassName);
							sb.toggleClass(o.buttonDisabledClassName);
							tf.toggleClass(o.focusClassName);
							tf.attr('disabled',true);
							sb.attr('disabled',true);
							break;
						case formState.submitFailed:
							tf.attr('disabled',false);
							tf.toggleClass(o.errorClassName);
							sb.toggleClass(o.buttonDisabledClassName);
							break;
						default:
							break;
					}
				}
				
				
            });
			
			
        }  
    });  
          
})(jQuery);




