var JSONRequest = new Class({
	Extends: Request.JSON,
	Version:3.0,
	Implements: [Events,Options],
	initialize: function(options)
	{
		newOptions = {
			errorDiv:$('response'),
			successMessage:'',
			onSuccess:function(ajaxResponse,errorBus){
				if(!$chk(newOptions.errorDiv)) document.body.adopt(new Element('div',{'id':'response'}));
				newOptions.errorDiv.addClass('hidden');
				
				if($type(ajaxResponse)!='object')	this.fireEvent('onFailure',errorBus);
				else
				{
					if(ajaxResponse.error!=0)	this.fireEvent('onFailure',ajaxResponse.errorText);
					else{
						if(newOptions.successMessage != '')
							newOptions.errorDiv.removeClass('hidden').removeClass('error').addClass('success').set('text',newOptions.successMessage);
						this.fireEvent('onReady',ajaxResponse);
					}
				}
			},
			onFailure:function(errorMessage)
			{
				if($type(errorMessage)=='object')
					errorMessage = errorMessage.errorText;
				if($chk(newOptions.errorDiv))
				{
					if(!newOptions.errorDiv.hasClass('error'))
						newOptions.errorDiv.addClass('error');
					newOptions.errorDiv.set('html','Erreur lors de la requete :'+errorMessage);
					newOptions.errorDiv.removeClass('hidden');
					new Fx.Scroll(window).toElement(newOptions.errorDiv);
				}
				else
					alert(errorMessage);
			}
		};

		// si on précise un formulaire, url et method seront automatiquement définis
		
		if($chk(options.form))
		{
			$extend(newOptions,{
				url:options.form.getProperty('action'),
				method:options.form.getProperty('method')
			});
			if($chk(options.data))
			{options.data = options.data + '&' + options.form.toQueryString();}
			else
			{options.data = options.form.toQueryString();}
		}
		
		this.parent($extend(newOptions,options));
	}
});
