
var ajaxCalls = {};
var ajaxObjects = {};

function OnSlowUpdateDim( containerId )
{
	$( "#" + containerId ).fadeTo('fast',0.45);
}

function ServerCallComplete( ajaxCallId, data )
{
	if ( ajaxCalls[ ajaxCallId ].onSuccess )
	{
		eval( ajaxCalls[ ajaxCallId ].onSuccess );
	}
}

function ServerCall( ajaxCallId, params )
{
	var ajaxCall = ajaxCalls[ ajaxCallId ];

	clearTimeout( ajaxCall.timer );

	if ( ajaxCall.containerId != "" )
	{
		ajaxCall.timer = setTimeout( "OnSlowUpdateDim( '" + ajaxCall.containerId + "' )", 200 );
	}

	if ( ajaxCall.handler )
	{
		ajaxCall.handler.abort();
	}

	var extraData = "";

	var p = 0;

	if ( params )
	{
		for( var x = 0; x < params.length; x++ )
		{
			extraData += "param" + p + "=" + params[x] + "&";
			p++;
		}
	}

    for( var x = 0; x < ajaxCall.params.length; x++ )
	{
		extraData += "param" + p + "=" + ajaxCall.params[x] + "&";
		p++;
	}

	extraData += $("input,select,textarea").serialize();

	var ajaxUrl = "/ajax/server-call";
	var inputData = "object-data=" + ajaxObjects[ ajaxCall.objectId ] + "&frm=" + ajaxCall.form + "&f=" + ajaxCall.functionName + "&containerId=" + ajaxCall.containerId + "&" + extraData;

	ajaxCall.handler = $.post(
		ajaxUrl,
		inputData,
			function( data )
			{
				clearTimeout( ajaxCall.timer );

				if ( ajaxCall.containerId != '' )
				{
					$( "#" + ajaxCall.containerId ).html( data ).fadeTo('fast',1);
				}

				ServerCallComplete( ajaxCallId, data );

				if ( ajaxCall.contentType == 'js' )
				{
					eval( data );
				}
			}
		);
}
