(function($){
    
    jQuery.fn.ajaxSubmitForm = function(callback){
        var form = this;

        var options = jQuery.extend({
            btSubmitID:     'button#bt_send'
        },options);


        form.find(options.btSubmitID).click(function(e){
            submit();
        });

        form.find(options.inputElements).keypress(function(e){
            if (e.keyCode=='13') {
                submit();
            };
        });


        function submit() {

            form.ajaxSubmit({
                dataType:  'json',
                beforeSubmit: preSubmit,
                success: processJson,
                error: function(xhr) {
                    console.log(xhr.responseText);
                }
            });


        }

        function preSubmit(data,form) {
            $('.loader').show();
            var vals = "POST: "+dump(data);
            console.log(vals);
        }

        function processJson(data) {
            console.log('DATA:' + dump(data));
            //$('.loader').hide();
            form.find('div.errors').remove();
            form.find('.error_element').removeClass('error_element');

            if(data.response) {
                jQuery(document).trigger('close.facebox');
                jQuery.noticeAdd({
                    text: data.response,
                    stay: false
                });
            }

            if(data.error) {
                jQuery.noticeAdd({
                    text: data.error,
                    stay: false
                });
            }

            if(data.location) {
                window.location = data.location;
            }

            if(data) {
                jQuery.each(data, function(i, item) {
                    var element = jQuery.find('form [id='+i+']');
                    if(element){
                        jQuery.each(item, function(n, error){
                            $(element).parent().append('<div class="errors">' + error + '</div>');
                            $(element).addClass('error_element');
                        })
                    }
                    
                    element = jQuery.find('form [id='+i+'-input]');
                    
                    if(element){
                        jQuery.each(item, function(n, error){
                            $(element).parent().append('<div class="errors">' + error + '</div>');
                            $(element).addClass('error_element');
                        })
                    }
                    
                });

            }
        }

        function onSuccess(data) {
        //console.log("SB:"+dump(data));
        }

    };


})(jQuery);

function dump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') { //Array/Hashes/Objects
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}
