var AjaxCallback = Class.create();
AjaxCallback.TYPE_KEY = 0;
AjaxCallback.TYPE_VALUE = 1;

AjaxCallback.prototype = { 
	transaction:null,
	data:null,

	initialize: function(transaction, callbackType, options) 
	{
		this.transaction = transaction;
		this.onSuccess(transaction);
  	},

	onSuccess: function(transaction)
	{
		this.data = transaction.responseText.evalJSON();

		if(this.data.onsuccess)
		{
			$H(this.data.onsuccess).each(function(responseType)
			{
				switch(responseType[AjaxCallback.TYPE_KEY])
				{
					case 'redirect' :

						window.location.href = responseType[AjaxCallback.TYPE_VALUE];

					break;

					case 'ajaxRedirect' :

					ajaxRedirectParam = responseType[AjaxCallback.TYPE_VALUE];

					if(ajaxRedirectParam.url)
					{
						if(ajaxRedirectParam.options)
						{
							new AjaxRequest(ajaxRedirectParam.url, ajaxRedirectParam.options);
						}
						else
						{
							new AjaxRequest(ajaxRedirectParam.url);
						}
					}

					break;

					case 'updaters' :

						$H(responseType[AjaxCallback.TYPE_VALUE]).each(function(aUpdater)
						{
							if($(aUpdater[AjaxCallback.TYPE_KEY]))
							{
								$(aUpdater[AjaxCallback.TYPE_KEY]).update(aUpdater[AjaxCallback.TYPE_VALUE]);
							}
						});

					break;


					case 'jswin' :
						jsWinParam = responseType[AjaxCallback.TYPE_VALUE];

						var aWin;
						aWin = jsWin.instance();

						if(jsWinParam.close)
						{
							aWin.close();
						}
						else
						{
							if(jsWinParam.title)
							{
								aWin.setTitle(jsWinParam.title);
							}
	
							if(jsWinParam.content)
							{
								aWin.setContent(jsWinParam.content);
	
								//jsWinParam.content.evalScripts();
							}
	
							if(jsWinParam.options)
							{
								aWin.setOptions(jsWinParam.options);
							}
	
							aWin.show();
						}
					break;


					case 'formFillers' :
						$H(responseType[AjaxCallback.TYPE_VALUE]).each(function(formAndFields)
						{
							formId = formAndFields[AjaxCallback.TYPE_KEY];
							fields = formAndFields[AjaxCallback.TYPE_VALUE];

							$H(fields).each(function(fieldAndValue)
							{
								$(fieldAndValue[AjaxCallback.TYPE_KEY]).value = fieldAndValue[AjaxCallback.TYPE_VALUE]
							});
						});
					break;


					case 'updateLinks' :
						$H(responseType[AjaxCallback.TYPE_VALUE]).each(function(containerId)
						{
							if(containerId[AjaxCallback.TYPE_KEY] && $(containerId[AjaxCallback.TYPE_KEY]))
							{
								AjaxRequest.updateLink(containerId[AjaxCallback.TYPE_KEY]);
							}
						});
					break;

					case 'updateForms' :
						$H(responseType[AjaxCallback.TYPE_VALUE]).each(function(containerId)
						{
							if(containerId[AjaxCallback.TYPE_KEY] && $(containerId[AjaxCallback.TYPE_KEY]))
							{
								AjaxRequest.updateForm(containerId[AjaxCallback.TYPE_KEY]);
							}
						});
					break;

					case 'anchor' :
						if($(responseType[AjaxCallback.TYPE_VALUE]))
						{
							$(responseType[AjaxCallback.TYPE_VALUE]).scrollTo();
						}
					break

					case 'customCallbacks' :

						$H(responseType[AjaxCallback.TYPE_VALUE]).each(function(aCustomCallback)
						{
							aCustomCallback[AjaxCallback.TYPE_VALUE].evalScripts();
						});

					break;
				}
			});

		}

	}
}
