$.fn.valveform = function (options) {
    var obj = $(this);
    var submit = obj.find('input[type=submit]');
    var containing_target = obj.find(options['submitpanel']);
    var replace_panel = $('<div class="results-panel">Thank you for your submission</div>');
    var error_panel = $('<div class="results-panel error">There was a problem with your submission</div>');
    replace_panel.css({'display':'none'});
    error_panel.css({'display':'none'});
    obj.append(replace_panel).append(error_panel);

    var before_send = function() {
        containing_target.attr('disabled','disabled');
        obj.find('input, textarea, select').css({'borderColor':'#493726'});
    };

    var completed = function() {
        containing_target.attr('disabled','');
    };

    var received_error = function(error_ids) {
        containing_target.children('*').fadeOut('slow', function () {
            if(containing_target.children(':visible').length > 0) {
                containing_target.children('*').hide();
            }
            error_panel.fadeIn('fast', function () {
                for(var i = 0; i < error_ids.length; ++i) {
                    var input_name = '#id_'+error_ids[i];
                    $('#'+error_ids[i] + ', ' + input_name + ', '+input_name+'_input').css({'borderColor':'#CC0000'});
                }

                error_panel.fadeOut(3000, function () {
                        if(error_panel.is(':visible')) {
                            error_panel.hide();
                        }
                        containing_target.children('*').not('.explanation').fadeIn('fast'); 
                });
            });
        });
    };

    var success = function() {
        containing_target.children('*').fadeOut('slow', function () {
            replace_panel.fadeIn('fast');
        });
    };

    var click_submit = function(event) {
        var form_results = {'ajax':1};
        obj.find('input[class!=selectbox], textarea, select').each(function () {
            form_results[$(this).attr('name')] = $(this).val();
        });

        $.ajax({
            complete:completed,
            beforeSend:before_send,
            data:form_results,
            dataType:'json',
            error:function() { received_error([]); },
            success:function(results) {
                if(results.response == 'success') {
                    success();
                } else {
                    received_error(results.errors);
                }
            },
            type:'POST',
            url:"./"
        });
        event.preventDefault();
    }; 
    submit.click(click_submit);
};

