Cobalt.Website.Common.PopupFormModule = function(sandbox) {

	return {
	
		component: null,	
		componentId: null,
		vehicleId: null,
		moduleName: null,
		formSelector: null,
		popupEvent: null,
		formEvent: null,
		requestCompleteData: null,
		dataManager: null,
		responseData: null,
		parentModule: null,
		
		init: function(data)
		{
			this.component = data.component;
			this.moduleName = data.moduleName;
			this.formSelector = data.formSelector;
			this.popupEvent = data.popupEvent;
			this.formEvent = data.formEvent;
			this.dataManager = data.dataManager;
			this.parentModule = data.parentModule;
		},
		
		getDataManager: function(){
			if(this.dataManager){
				return this.dataManager;
			}
		},
		
		getComponent: function()
		{
			return this.component;
		},
		
		getModuleName: function()
		{
			return this.moduleName;
		},
		
		getComponentId: function()
		{
			this.componentId = sandbox.dom(this.getComponent().currentTarget).attr("id");
			return this.componentId;
		},
		
		getVehicleId: function()
		{
			var componentId = this.getComponentId();
			this.vehicleId = componentId.split("_")[3];
			return this.vehicleId;
		},
		
		getFormName: function()
		{
			return sandbox.dom(this.formSelector).attr("name");
		},
		
		getPopupEvent: function()
		{
			if(!this.popupEvent){
				this.popupEvent = Cobalt.Website.Common.Events.PopupClicked;
			}
			return this.popupEvent;
		},
		
		getFormEvent: function()
		{
			if(!this.formEvent){
				this.formEvent = Cobalt.Website.Common.Events.FormSubmit;
			}
			return this.formEvent;
		},

		getParentModule: function()
		{
			return sandbox.dom(this.parentModule).getDomElements();
		},
		
		popupRaiseEvent: function()
		{
			var data = this.getRequestData();
			var event = this.getPopupEvent();
			sandbox.raise(null, event, data);
		},

		submitForm: function()
		{
			var data = this.getFormData();
			var event = this.getFormEvent();						var isSecureFormSubmit = sandbox.dom( this.formSelector + " :submit.formSendButton" ).hasClass("secureButton");					if (isSecureFormSubmit) 			{				sandbox.raise(null, Cobalt.Website.Common.Events.HandleSecuredFormSubmit, data);			}			else 			{				sandbox.raise(null, event, data);			}
			return false;
		},

		getRequestData: function()
		{
			var moduleName = this.getModuleName();
			var componentId = this.getComponentId();
			return {
				componentId:componentId, 
				sourceModule:moduleName
			}
		},
		
		getFormData: function()
		{
			var moduleName = this.getModuleName();
			var componentName = this.getFormName();
			var componentId = this.getComponentId();
			var parentModule = this.getParentModule();
			return {
				componentId:componentId, 
				componentName:componentName, 
				sourceModule:moduleName,
				parentModule: parentModule
			}
		},
		
		getRequestCompleteData: function()
		{
			return this.requestCompleteData;
		},
		
		setRequestCompleteData: function(data)
		{
			this.requestCompleteData = data;
		},

		resetForm: function()
		{
			var formSelector = this.formSelector;
			var inputElements = sandbox.dom(formSelector).find(':input');
			var filterElements = sandbox.dom(inputElements).not(':button, :submit, :reset, :hidden');
			sandbox.dom(filterElements).attr('value','');		 
			sandbox.dom(filterElements).removeAttr('checked');
			sandbox.dom(filterElements).removeAttr('selected');
			sandbox.dom(filterElements).removeClass('textField_background');
			sandbox.dom('ul.inv_result_errorMessage').addStyle({display:"none"});
			return false;
		},
		
		setResponseData: function(data)
		{
			this.responseData = data;
		},
		
		getResponseData: function()
		{
			return this.responseData;
		},

		validateResponseData: function(data)
		{
			if (!data.customData) { return; }
			if (!data.customData.sourceModule) { return; }
			if (data.customData.sourceModule != this.getModuleName()) { return; }
			if (!data.customData.response) { return; }
			var content = data.customData.response.responseText;
			var url = data.customData.url;
			if ((url.indexOf("submit") > -1) && (content.indexOf("inv_result_errorMessage") > -1)) {
				return;
			}
			this.setResponseData(data);
			return true;
		},

		getLeadId: function()
		{
			var leadId = sandbox.dom("#leadId").attr("value");
			return leadId;
		},
		
		getPixelUri: function(data)
		{
			var data = this.getResponseData();
			var uri = data.url;
			var id = data.pixelData.id;
			return uri + (uri.indexOf("?") > -1 ? "%26" : "?") + "form="+id+"%26id=" + this.getVehicleId();
		},
		
		getPixelDataPageNameSuffix: function(pageName) {
			if (!pageName) {
				return "";
			}
			
			if (pageName.length < 2) {
				return pageName;
			}
			
			var suffixPageName = pageName.charAt(0).toLowerCase() + pageName.substring(1);
			return suffixPageName;
		},
		
		getPixelData: function(data)
		{
			this.setResponseData(data);
			
			var pixelData = data.pixelData;
			if (!data) {
				throw new Error("Cobalt.Website.Common.PopupFormModule >> Pixel Data Undefined"); 
			}

			var suffixPageName = this.getPixelDataPageNameSuffix(pixelData.pageName);
			var eventName = pixelData.eventName;
			var vin = pixelData.vin;
			var pageLabel = pixelData.formModule + "_" + suffixPageName;
			var pageName = pixelData.formModule + "_" + suffixPageName;
			var pageLayout = pixelData.formModule;
			var requestUri = this.getPixelUri();

			if(data.submitRequest){
				pageLayout = pageLayout + "_ThankYouPage";
				var leadId = this.getLeadId();
				requestUri = requestUri + "&lead_id=" + leadId;
			}

			return {
				eventName: eventName, 
				vin: vin,
				pageLabel: pageLabel,
				pageLayout: pageLayout,
				pageName: pageName,
				requestUri: requestUri
			}
		},

		firePixelTag: function(data)
		{
			var pixelData = this.getPixelData(data);
			sandbox.firePixelTag(pixelData);
		}
	
	}

};

