/**
 * responsible for handling popup overlays for ask a question form.
 * @requires {Cobalt.Website.Common.PopupModule}
 * @param {Cobalt.Core.Sandbox} sandbox
 */
Cobalt.Website.VehicleDetail.AskAQuestionPopupModule = 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.VehicleDetail.AskAQuestionPopupModule";
		}
		return _moduleName;	
	}

	function getInstance()
	{
		if(!_instance){
			_instance = Cobalt.Website.Common.PopupFormModule(sandbox);
		}
		return _instance;
	}
	
    function getDataManager()
    {
        if (_dataManager === null)
        {
            _dataManager = Cobalt.Website.Data.VehicleDetailDataManager;
        }
        return _dataManager;
    }	
	
	function requestCompleteHandler(data) 
	{
		var _proceed = getInstance().validateResponseData(data);
		if(_proceed)
		{
			var pixelData = attachPixelData(data.customData);
			getInstance().firePixelTag(pixelData)
		}
	}
	
	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;
	}
	
	/* TODO: Render PixelDataManager from backend, JS Test Driver */
	function getEventName()
	{
		return "com.cobaltgroup.ws.action.click.askaquestion";
	}
	
	function getFormModule()
	{
		return "AskAQuestionForm";
	}
	
	function getPageName()
	{
		return "VehicleDetails";
	}
	
	function getFormId()
	{
		return "aaq";
	}
	
	function getAaqFormSelector()
	{
		return "#aaq_popup";
	}
	
	function getVinNumber()
	{
		return getDataManager().getVin();
	}
	
	function handlePopupOnclick(e)
	{
		var moduleName = getModuleName();
		var formSelector = getFormSelector();
		var dataManager = getDataManager();
		var parentModule = getAaqFormSelector();
		
		getInstance().init({
			component: e,
			moduleName: moduleName,
			formSelector: formSelector,
			dataManager: dataManager,
			parentModule: parentModule
		});
		
		getInstance().popupRaiseEvent();
		
		return false;
	}
	
	function handleFormSubmit()
	{
		getInstance().submitForm();
		return false;
	}
	
	function handleFormReset()
	{
		getInstance().resetForm();
		return false;
	}
	
	function getFormSelector()
	{
		return "[name = 'aaqForm']";
	}
	
	function getResetSelector()
	{
		return getAaqFormSelector() + " a[id = 'inv_form_resetForm']";
	}
	
	function getSelector()
	{
		return ".ask_a_question";
	}
	
	function handleSubmitAndResetClick() {
		sandbox.dom(getAaqFormSelector() + " input[type='submit']").listenLive("click", handleFormSubmit);
		sandbox.dom(getResetSelector()).listenLive("click", handleFormReset);
	}	

	return {
        init: function ()
        {
            _super.init();
            var selector = this.getSelector();
            var element = sandbox.dom(selector).getDomElements();
            sandbox.listen(element, "click", handlePopupOnclick);
			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();
		},
		
		getEventName: function()
		{
			return getEventName();
		},

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

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


