	

function SystemRequest()
{
	
}

/**
 * 
 * @param module
 * @param method
 * @param parameters
 * @param callback
 * @param gateway optional
 * @return
 */
SystemRequest.load	= function(module, method, parameters, callback,context, gateway)
{
	var req			= new Request();
	req.setContext(context);
	req.gateway		= gateway ? gateway : SystemRequest.gateway;
	
	req.load(module, method, parameters, callback);
	return req;
}
SystemRequest.gateway	= SystemCore.MODULES_GATEWAY;


SystemRequest.loadCustom	= function(gateway, module, method, parameters, callback,context)
{
	var req			= new Request();
	req.setContext(context);
	req.gateway		= gateway;
	req.load(module, method, parameters, callback);
	return req;
};


SystemRequest.handleResponseMessages = function(response)
{
	var str = "";	
	
	var errorMessagesExist = false;
	
	if (response.messages && response.messages.length > 0)
	{
		for (i in response.messages)
		{
			str += "<p>"+response.messages[i]['text']+"</p>";
		}
	}
	
	if (response.errors && response.errors.length > 0)
	{
		errorMessagesExist = true;
		for (i in response.errors)
		{
			str += response.errors[i]['text']+"<br /><br />";
		}
	}
	
	if (str.length > 0)
	{
		$("<div>"+str+"</div>").dialog({
			modal: true,
			title: errorMessagesExist == true ? "Eroare" : "Succes",
			width: 400,
			buttons: {
				Ok: function() {
					$( this ).dialog( "close" );
				}
			}
		});
	}
}


/**
 * Request class
 * Uses gateway defined in core
 * @return
 */
function Request()
{

	this.gateway	= '';
	var context;
	
	this.setContext	= function(cntx)
	{
		context	= cntx ? cntx : this;
	};
	
	this.load	= function(module, method, parameters, callback,errorCallBack)
	{
		if (this.gateway == '') // Request.gateway
		{
			alert("No gateway defined");
			return false;
		}
		$(document.body).css("cursor","progress");
		$.ajax({
			url: this.gateway,
			type:"POST",
			processData: true,
			data: { 
				'params':parameters,
				'class':module,
				'module':module,
				method:method
			},
			success: function(obj) 
			{
				var response;
				if (obj!=null)
				{
					response = new RequestResponse(obj["data"] ? obj["data"] : {}, obj["success"] ? obj["success"] : false, obj['messages'], obj['errors']);
				}
				else
				{
					response = new RequestResponse({}, false);
				}
				
				$(document.body).css("cursor","");
				SystemRequest.handleResponseMessages(response);
				callback.apply(context,[response]);
			}, 
			error:function(req, textStatus, errorThrown)
			{ 
				$(document.body).css("cursor","");
				alert("REQ_ERROR - status:" + textStatus + " error:" + errorThrown); 
			}, 
			dataType:"json"
		});	
	}
	
}


function RequestResponse(data, success, messages,errors)
{
	this.success 	= success;
	this.data 		= data;
	this.messages 	= messages;
	this.errors	 	= errors;
}



function SystemManager()
{
}

SystemManager.listeners		= [];

SystemManager.init	= function()
{
	$(document).click(SystemManager.dispatchEvent);
}

SystemManager.dispatchEvent	= function(event)
{
	var len	= SystemManager.listeners.length;
	var refFnc;
	for (i=0;i<len; i++)
	{
		refFnc	= SystemManager.listeners[i];
		if (refFnc)
		{
			refFnc(event);
		}
	}
}

SystemManager.addListener	= function( refFunction )
{
	SystemManager.listeners.push(refFunction);
}

SystemManager.removeListener	= function( refFunction )
{
	// remove from SystemManager.listeners
}

$(document).ready(function(){
	SystemManager.init();
});


