var FormRequest = new Class(
{
    initialize: function(formId, btnId, reqUrl, replEl, redirectUrl)
    {
        if(!$(formId) || !$(btnId)) return false;
        
		var showReport = function(message)
		{
			if($('form-warning'))
			{
				$('form-warning').removeClass('hide');
				$('form-warning').innerHTML = message;
			}
			else
			{
				alert(message);
			}
		}
		
        $(formId).addEvent('submit', function(e)
        {
            /* stop submit event */
            new Event(e).stop();
            
            /* disable submit button */
            $(btnId).disabled = true;
			
            /* attach request */
            this.set('send', 
            {
                url: reqUrl,
                method: 'post',
                onRequest: function()
                {
                },
                onSuccess: function(response)
                {
					var result = JSON.decode(response, true);
                    
					/* remove warming */
					if($('form-warning'))
					{
						$('form-warning').addClass('hide');
					}
					
                    /* check result */
                    if(result.valid)
                    {
						if(redirectUrl)
						{
							window.location.href = redirectUrl;
						}
						else
						{
							$(formId).empty();
							replEl.inject(formId);
						}
                    }
                    else
                    {
						showReport(result.message);
						$(btnId).disabled = false;
                    }
                },
                onFailure: function()
                {
                    /* request failed */
                    showReport("Fout in bewerking. U kunt het later opnieuw proberen.");
                    $(btnId).disabled = false;
                }
            });
            
            /* send request */
            this.send();
        });
        
        return true;
    }
});	
