lead_capture_x_form = function() {
	
	return {
		
		initAfterFormLoad : function(config) {
			
			/*
				Purpose: Call after the form is loaded so it can be configured for use
				
				Parameters:
					config: undefined, number or object.
						If undefined, then same as config = 1 (see below)
						If 1, then (first name [required], last name [required], email [required], day tme phone [optioanl], 
							questions/comments [optional]).
						If 2, then (first name [required], last name [required], email [required], address [required], city [required], 
							state [required], zip [required], day time phone [required], cell phone [optional], 
							questions/comments [optional]). 
						If object, then provide those values you wish to override.
			*/
			
			// Default to the same as config == 1
			var config_ = {
				firstName : { name: 'FirstName', enabled: true, required: true },
				lastName : { name: 'LastName', enabled: true, required: true },
				email : { name: 'Email', enabled: true, required: true },
				address : { name: 'Address', enabled: false, required: false },
				city : { name: 'City', enabled: false, required: false },
				state : { name: 'State', enabled: false, required: false },
				zip : { name: 'Zip', enabled: false, required: false },
				dayTimePhone : { name: 'DayTimePhone', enabled: true, required: false },
				cellPhone : { name: 'CellPhone', enabled: false, required: false },
				questionsComments : { name: 'QuestionsComments', enabled: true, required: false }
			};
			
			// Override the defaults as instructed
			if (typeof(config) == 'number') {
				if (config == 2) {
					// Tested
					jQuery.extend(true, config_, {
							address : { enabled: true, required: true},
							city : { enabled: true, required: true}, 
							state : { enabled: true, required: true}, 
							zip : { enabled: true, required: true}, 
							dayTimePhone : { enabled: true, required: true},
							cellPhone : { enabled: true, required: false}
					});
				}
			} else if (typeof(config) == 'object') {
				// Tested
				jQuery.extend(true, config_, config);
			}
			
			$("#lc_x").data('config', config_); // save the data for validation
			
			lead_capture_x_form.configInput(config_.firstName);
			lead_capture_x_form.configInput(config_.lastName);
			lead_capture_x_form.configInput(config_.email);
			lead_capture_x_form.configInput(config_.address);
			lead_capture_x_form.configInput(config_.city);
			lead_capture_x_form.configInput(config_.state);
			lead_capture_x_form.configInput(config_.zip);
			lead_capture_x_form.configInput(config_.dayTimePhone);
			lead_capture_x_form.configInput(config_.cellPhone);
			lead_capture_x_form.configInput(config_.questionsComments);
		},
		
		configInput : function(data) {
			/*
				Purpose: Configure each input control
			*/
			if (!data.enabled) {
				$("#lc_x_" +  data.name + "_Row").hide();
				return;
			}
			
			if (data.required) {
				var label = $("#lc_x_" + data.name + "_Label");
				label.html(label.html() + " <sup>*</sup>");
			}
		},
	
		submit : function(source, lotAddress, communityID) {
			var parameters = {
				FirstName : $("#lc_x_FirstName").val(),
				LastName : $("#lc_x_LastName").val(),
				Email : $("#lc_x_Email").val(),
				Address : $("#lc_x_Address").val(),
				City : $("#lc_x_City").val(),
				State : $("#lc_x_State").val(),
				Zip : $("#lc_x_Zip").val(),
				DayTimePhone : $("#lc_x_DayTimePhone").val(),
				CellPhone : $("#lc_x_CellPhone").val(),
				QuestionsComments : $("#lc_x_QuestionsComments").val(),
				Source : source,
				LotAddress : lotAddress,
				URL : window.location.href,
				CommunityID : communityID
			}
			
			var errorMsg = new Array();
			
			var config = $("#lc_x").data('config');
			
			if (config.firstName.enabled && config.firstName.required) {
				if (parameters.FirstName == "") { errorMsg.push("First Name is a required value"); }
			}
			
			if (config.lastName.enabled && config.lastName.required) {
				if (parameters.LastName == "") { errorMsg.push("Last Name is a required value"); }
			}
				
			if (config.email.enabled && config.email.required && parameters.Email == "") {
				errorMsg.push("Email Address is a required value");
			} else if (config.email.enabled && parameters.Email != "" && !fieldstone.validation.isValidEmail(parameters.Email)) {
				errorMsg.push("Bad Email Address");
			}
				
			if (config.address.enabled && config.address.required) {
				if (parameters.Address == "") { errorMsg.push("Address is a required value"); }
			}
			
			if (config.city.enabled && config.city.required) {
				if (parameters.City == "") { errorMsg.push("City is a required value"); }
			}
			
			if (config.state.enabled && config.state.required) {
				if (parameters.State == "") { errorMsg.push("State is a required value"); }
			}
			
			if (config.zip.enabled && config.zip.required && parameters.Zip == "") {
				errorMsg.push("Zip is a required value"); 
			} else if (config.zip.enabled && parameters.Zip != "" && !fieldstone.validation.isValidZip(parameters.Zip)) {
				errorMsg.push("Bad Zip");
			}
				
			if (config.dayTimePhone.enabled && config.dayTimePhone.required && parameters.DayTimePhone == "") {
				errorMsg.push("Day Time Phone Number is a required value");
			} else if (config.dayTimePhone.enabled && parameters.DayTimePhone != "" && !fieldstone.validation.isValidPhone(parameters.DayTimePhone)) {
				errorMsg.push("Bad Day Time Phone Number");
			}
			
			if (config.cellPhone.enabled && config.cellPhone.required && parameters.CellPhone == "") {
				errorMsg.push("Cell Phone Number is a required value");
			} else if (config.cellPhone.enabled && parameters.CellPhone != "" && !fieldstone.validation.isValidPhone(parameters.CellPhone)) { 
				errorMsg.push("Bad Cell Phone Number");
			}
			
			if (config.questionsComments.enabled && config.questionsComments.required) {
				if (parameters.QuestionsComments != '') { errorMsg.push("Questions/Comments is a required value"); }
			}
				
			if (errorMsg.length > 0) {
				$("#lc_x_Error").html(errorMsg.join('<br />')).show();
				return;
			}
			
			lead_capture_x_form.send(parameters);
		},
		
		send : function(data) {
			// Returns boolean

			// Google AdWord tracking 			
			$("<div style='display:inline;'><img height='1' width='1' style='border-style:none;' alt='' src='http://www.googleadservices.com/pagead/conversion/1040454231/?label=DePNCJ_94wEQ16SQ8AM&amp;guid=ON&amp;script=0'/></div>");
			
			var url = '/actions/ajax/lead_capture_x_submit.php';

			$.ajax({
				cache: false,
				data: data,
				dataType: 'jsonp',
				error: function() { lead_capture_x_form.send_error(); },
				success: function(data) { (data.Status == 'OK') ? lead_capture_x_form.send_success_ok() : lead_capture_x_form.send_success_not_ok(); },
				url: url
			});
		},
		
		send_error : function() {
			// Placed in separate function so it can be overridden.
			
			// Tested %%
			$("<div title='Processing Status'>Error (1). Unable to process your request. Please try again or use our phone number in the mean time.</div>").dialog({buttons: {"OK": function() {$(this).dialog("close");}}});
		},
		
		send_success_ok : function() {
			// Placed in separate function so it can be overridden.
			
			// Tested
			$("<div title='Processing Status'>Successful.</div>").dialog({buttons: {"OK": function() {$(this).dialog("close");$.nyroModalRemove();}}});
		},
		
		send_success_not_ok : function() {
			// Placed in separate function so it can be overridden.
			
			// Tested
			$("<div title='Processing Status'>Error (2). Unable to process your request. Please try again or use our phone number in the mean time.</div>").dialog({buttons: {"OK": function() {$(this).dialog("close");}}});
		}
	}
}();