var AjaxLinkGroup = Class.create({
    initialize: function(waiting_gif_url) {
        var links = $$('a[rel="ajax_post,refresh"]');
        links.each(function(post) {
            var progress_img = new Element('img');
            progress_img.setAttribute('src', waiting_gif_url);
            progress_img.addClassName('progress');
            post.progress = new Element('div');
            post.progress.setStyle({textAlign:'center'});
            post.progress.hide();
            post.progress.insert(progress_img);
            var link_group = post.parentNode;
            var link_group_wrapper = link_group.parentNode;
            Element.extend(link_group);
            Element.extend(link_group_wrapper);
            link_group_wrapper.insert(post.progress);
            post.observe('click', function(s) {
                link_group.hide();
                post.progress.show();
                Event.stop(s);
                var resp = new Ajax.Request(this.href, {
                    method: 'post',
                    onSuccess: function() {
                        window.location.reload(true);
                    },
                    onFailure: function(transport) {
                        post.progress.hide();
                        link_group.show();
                        $('error_' + post.getAttribute('id')).update(transport.responseJSON.error);
                    }
                });
            });
        });
        this.posts = links;
    }
});
var debug;
var AjaxForm = Class.create({
    initialize: function(form, options) {
        form = $(form);        
        this.form = form;
        this.options = {
            waiting_gif_url:             null,
            redirect:                         null,
            button:                         form.down('input[type=submit]')
        };
        Object.extend(this.options, options || { });
        var set_options = this.options;
        var button_group = set_options.button.parentNode;
        Element.extend(button_group);
        this.button_group = button_group;
        
        var progress_image =  new Element('img');
        progress_image.setAttribute('src', this.options.waiting_gif_url);
        
        var progress = new Element('div');
        Element.extend(progress);
        progress.setStyle({textAlign:'center', width: this.button_group.getWidth()});
        progress.insert(progress_image);
        progress.hide();
        this.progress = progress;
        var button_group_wrapper = button_group.parentNode;
        Element.extend(button_group_wrapper);
        button_group_wrapper.insert(progress);
        this.button_group_wrapper = button_group_wrapper;

        this.form.observe('submit', function (s) {
            Event.stop(s);
            button_group.hide();
            progress.show();
            form.request({
                method: form.getAttribute('method'),
                onSuccess: function(transport) {
                    if(set_options.redirect !== null) {
                        window.location.href = set_options.redirect;
                    } else {
                        window.location.reload(true);
                    }
                },
                onFailure: function(transport) {
                    button_group.show();
                    progress.hide();
                    for( var msg in transport.responseJSON)
                    {
                        $('error_' + msg).update(transport.responseJSON[msg]);
                    }
                }
            });
        });
    }
});
