/**
 * responsible for handling popup overlays for ask a question form.
 * @requires {Cobalt.Website.Common.PopupModule}
 * @param {Cobalt.Core.Sandbox} sandbox
 */
Cobalt.Website.Results.GetAQuotePopupModule = function (sandbox) {

     //inherit from PopupModule
	var _super = Cobalt.Website.Common.PopupModule(sandbox);
	
	_super.handleCompletedRequest = requestCompleteHandler;
	
	_super.getPopupType = function ()
	{
		return getModuleName();
	};

	var _moduleName;
	var _instance;
	var _dataManager = null;
	
	function getModuleName()
	{
		if(!_moduleName){
			_moduleName = "Cobalt.Website.Results.GetAQuotePopupModule";
		}
		return _moduleName;	
	}
	
	function getInstance()
	{
		if(!_instance){
			_instance = Cobalt.Website.Common.PopupFormModule(sandbox);
		}
		return _instance;
	}
	
    function getDataManager()
    {
        if (_dataManager === null)
        {
            _dataManager = Cobalt.Website.Results.VehicleDataManager;
        }
        return _dataManager;
    }
	
	function requestCompleteHandler(data) 
	{
		var _proceed = getInstance().validateResponseData(data);
		
		if(_proceed)
		{
			var pixelData = attachPixelData(data.customData);
			getInstance().firePixelTag(pixelData);
		}
		
		if(data.customData && data.customData.sourceModule === getModuleName())
		{
			handleToggleRadio();
		}
	}
	
	function attachPixelData(data)
	{
		var eventName = getEventName();
		var formModule = getFormModule();
		var vin = getVinNumber();
		var pageName = getPageName();
		var id = getFormId();

		data.pixelData = {
			eventName: eventName,
			formModule: formModule,
			vin: vin,
			pageName: pageName,
			id: id
		};
		
		return data;
	}
	
	function getVehicleId()
	{
		return getInstance().getVehicleId();
	}
	
	/* TODO: Render PixelDataManager from backend, JS Test Driver */
	function getEventName()
	{
		return "com.cobaltgroup.ws.action.click.getaquote";
	}
	
	function getFormModule()
	{
		return "GetAQuoteForm";
	}
	
	function getPageName()
	{
		return "VehicleSearchResults";
	}
	
	function getFormId()
	{
		return "gaq";
	}
	
	function getVinNumber()
	{
		return getDataManager().getVINByVehicleId(getVehicleId());
	}
	
	function handlePopupOnclick(e)
	{
		var moduleName = getModuleName();
		var formSelector = getFormSelector();
		var parentModule = getGaqFormSelector();
		getInstance().init({
			component: e,
			moduleName: moduleName,
			formSelector: formSelector,
			parentModule: parentModule
		});
		
		getInstance().popupRaiseEvent();
		
		sandbox.raise(null, Cobalt.Website.Common.Events.DestroyPopup, null);
		
		return false;
	}
	
	function handleFormSubmit()
	{
		getInstance().submitForm();
		return false;
	}
	
	function handleFormReset()
	{
		getInstance().resetForm();
		return false;
	}
	
	function handleToggleRadio() 
	{
		var isBusinessChecked = sandbox.dom(getRadioSelector()).attr("checked");
		var businessUseSelector = getGaqPopupSelector() + " #businessUse";
		var isNumberRegEx = /^[0-9]*$/;		
		
		if (isBusinessChecked) {
			var val = sandbox.dom(businessUseSelector).attr('value');
			var isNumber = isNumberRegEx.test(val);
			if(!isNumber) sandbox.dom(businessUseSelector).attr('value','1');
			sandbox.dom(getBusinessUseTextSelector()).hide();
		} else {			
			sandbox.dom(getBusinessUseTextSelector()).show();
		}
	}

	function getGaqPopupSelector()
	{
		return "#popup";
	}
	
	function getGaqFormSelector()
	{
		return "#gaq_popup";
	}
	
	function getFormSelector()
	{
		return getGaqPopupSelector() + " [name ~= 'gaqForm']"
	}
	
	function getResetSelector()
	{
		return getGaqPopupSelector() + " #inv_form_resetForm";
	}
	
	function getSelector()
	{
		return getGaqPopupSelector() + " [class ~= 'get_a_quote']";
	}
	
	function getRadioSelector()
	{
		return getGaqPopupSelector() + " [name ~= vehicle_buy_for_business_or_personal_use]";
	}
	
	function getBusinessUseTextSelector()
	{
		return getGaqPopupSelector() + " .businessUseText";
	}

	function handleQuotesOnlinePage(e){
		var url = sandbox.dom(this).attr("data-url");
		if(url){
			window.location.href = url;
		}
		return false;
		
	}
	
	function getQuotesOnlineSelector(){
		return "#quotesOnline";
	}
	
	function handleSubmitAndResetClick() {
		sandbox.dom(getGaqFormSelector() + " input[type='submit']").listenLive("click", handleFormSubmit);
		sandbox.dom(getResetSelector()).listenLive("click", handleFormReset);
	}

	return {
        init: function ()
        {
            _super.init();
			var selector = sandbox.getUIElementSelectorsForModule(Cobalt.Website.Results.ResultsApplication.Modules.GetAQuotePopupModule);
			for (var i = 0; i < selector.length; ++i) {
				sandbox.dom(selector[i]).listenLive("click", handlePopupOnclick);
			}
			sandbox.dom(getQuotesOnlineSelector()).listenLive("click",handleQuotesOnlinePage);
			var radioSelector = sandbox.dom(getRadioSelector()).getDomElements();
			sandbox.dom(radioSelector).listenLive("change", handleToggleRadio);	
			handleSubmitAndResetClick();
	    },

        destroy: function ()
        {
		    _super.destroy();
        },

        getSelector: function()
        {
           return getSelector();
        },
		
        getResetSelector: function()
        {
           return getResetSelector();
        },

		getFormSelector: function()
        {
           return getFormSelector();
        },
		
		getModuleName: function()
		{
			return getModuleName();
		},
		
		getInstance: function()
		{
			return getInstance();
		},
		
		getParentSelector: function()
		{
			return getParentSelector();
		},
		
		getRadioSelector: function()
		{
			return getRadioSelector();
		},
		
		getBusinessUseTextSelector: function()
		{
			return getBusinessUseTextSelector();
		},
		
		getEventName: function()
		{
			return getEventName();
		},

		getFormModule: function()
		{
			return getFormModule();
		},
		
		getPageName: function()
		{
			return getPageName();
		},

		getFormId: function()
		{
			return getFormId();
		}
		
    };
};

