/**
 * responsible for handling ajax loading indicator effects
 * @param {Cobalt.Core.Sandbox} sandbox
 */
Cobalt.Website.Results.LoadingIndicatorModule = function(sandbox)
{
	var _loader;
	var _parentModule;
    
    function onLoadingIndicatorStartHandler(e)
    {
		if(e && e.customData && e.customData.parentModule)
		{
			setParentModule(e.customData.parentModule);
		}else{
			setParentModule(getDefaultParentModule());
		}
		showLoadingIndicator();
    };

    function onLoadingIndicatorStopHandler()
    {
		hideLoadingIndicator();
    };
	
	function setParentModule(obj)
	{
		_parentModule = obj;
	};
	
	function getParentModule()
	{
		return _parentModule;
	};
	
	function getDefaultParentModule()
	{
		return sandbox.dom("#inv_results_container").getDomElements();
	};
	
	function showLoadingIndicator()
	{
		var container = getParentModule();
        var offset = sandbox.dom(container).offset();
        var width = sandbox.dom(container).width()
					+ parseInt(sandbox.dom(container).addStyle("padding-left"), 10)
					+ parseInt(sandbox.dom(container).addStyle("padding-right"), 10);
        var height = sandbox.dom(container).height() 
					 + parseInt(sandbox.dom(container).addStyle("padding-top"), 10) 
					 + parseInt(sandbox.dom(container).addStyle("padding-bottom"), 10);
		
		sandbox.dom(_loader).addStyle({
			top:offset.top +"px",
			left:offset.left + "px",
			width:width + "px",
			height:height + "px"		
		});
		
		sandbox.dom(_loader).show();
	};
	
	function hideLoadingIndicator()
	{
		sandbox.dom(_loader).hide();
	};	

     //TODO: sandbox method
    function initializeLoadingIndicator()
    {
		_loader = sandbox.dom("<div class='loader_container' id='loader_container'><div class='loader_background'></div><div class='loader_rotator'></div></div>").getDomElements();
		sandbox.dom("body").append(_loader);
    }

    return {
        init:function()
        {
            sandbox.listen(null, Cobalt.Website.Common.Events.LoadingIndicatorStart, onLoadingIndicatorStartHandler);
            sandbox.listen(null, Cobalt.Website.Common.Events.LoadingIndicatorStop, onLoadingIndicatorStopHandler);

            initializeLoadingIndicator();
        },
        destroy:function()
        {
            //TODO: handle destroy
        }
    };
};

