(function($){
	
	//by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
	function is_email(value) {
		return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
	};
	
	function validate(formData, jqForm, options) {
		var frm = jqForm[0];
		var focus = null;
		var bSubmit = true;
		
		$(".submit", frm).hide();
		$(".submit_status", frm).show();
		$(".submit_status .loading", frm).show();
		$(".submit_status .response", frm).html("");		
		
		$("span.error", frm).remove();
		
		$(".required", frm).each(function(){
			var b = false;
			if (!$(this).is("input,select,textarea")) return;
			
			var inp = this;
			
			if ($(inp).is(":disabled") || $(inp).is(":hidden")) {
				b = true;
			} else {
				if ($(inp).is("input")) {
					if ($(inp).is("input[type='radio']") || $(inp).is("input[type='checkbox']")) {
						b = inp.checked;
					} else {
						if ($(inp).is(":text")) {
							inp.value = $.trim(inp.value);
						}
						b = (inp.value != "");
					}
				} else if ($(inp).is("select")) {
					b = (inp.value != "" && inp.value != "0");
				} else {
					b = (inp.value != "");
				}
			}
			
			if (!b) {
				$(inp).parent().append("<span class='error'>required</span>");
				if (!focus) focus = inp;
				bSubmit = false;
			}
		});
		
		$(".email", frm).each(function(){
			if (!$(this).is("input:text") || $(this).is(":disabled") || $(this).is(":hidden")) return;
			if (!$(this).is(".required") && this.value == "") return;
			
			var inp = this;
			
			if (inp.value != "") {
				if (!is_email(inp.value)) {
					$(inp).parent().append("<span class='error'>valid email address required</span>");
					if (!focus) focus = inp;
					b = false;
					bSubmit = false;
				}
			}
		});
		
		if (focus) $(focus).focus();
		
		if (!bSubmit) {
			$(".submit", frm).show();
			$(".submit_status", frm).hide();
			$(".submit_status .response", frm).html("");
		}
		
		return bSubmit;
	};
	
	function showResponse(responseText, statusText) {
		if (statusText == "success") {
			$('#form_merchants')[0].reset();
		}
		$(".submit_status").show();
		$(".submit_status .loading", $("#form_merchants")).hide();
		$(".submit_status .response", $("#form_merchants")).html(responseText);
	};
	
	function showError(responseText, statusText) {
		alert("Error submitting form, please try again.");
		$(".submit", $("#form_merchants")).show();
		$(".submit_status", $("#form_merchants")).hide();
	};
	
	$(document).ready(function(){
		var options = { 
			beforeSubmit: validate,
	        success: showResponse,
			error: showError
	    }; 
		
		$('#form_merchants .submit a').click(function(){
			$('#form_merchants').submit();
			return false;
		});
 
	    $('#form_merchants').submit(function() { 
	        $(this).ajaxSubmit(options); 
	        return false; 
	    }); 
		
		
		if ($('#form_merchants #equipment_type').length && $('#form_merchants .equipment_type_other').length) {
			var equipment_type_onchange = function() {
				if (this.value == "_other_") {
					$('#form_merchants #equipment_type_other').show();
					$(".equipment_type_other").show();
				} else {
					$('#form_merchants #equipment_type_other').hide();
					$(".equipment_type_other").hide();
				}
			};
			
			$('#form_merchants #equipment_type').bind("click change", function(event){
				equipment_type_onchange.call(this);
			});
			
			$('#form_merchants #equipment_type').trigger("change");
		}
	});
})(jQuery);