(function($){
    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };
})(jQuery);


(function($){
    $.fn.irAjaxFormDialog = function(settings)
    {
        var _this = this;
        var action = $(this).attr("action");
        settings = $.extend({
            dialog:'#dialog',
            title:"",
            validate: true,
            closeBeforeSend:false
        }, settings);
        $(document).ready(
            function onComplete() {
                if(settings.validate){
                    $(_this).validationEngine({
                        scroll:false,
                        success: function(){
                            $.validationEngine.unbindAll(_this);
                            $.validationEngine.closePrompt(".formError",true);
                            if(settings.closeBeforeSend){
                              $(settings.dialog).dialog('close');  
                            }
                            $(settings.dialog).load(action, $(_this).serializeObject())
                           }

                    });
                }
                $(settings.dialog).dialog({
                    width: 680,
                    modal: true,
                    autoOpen: true,
                    draggable: false,
                    title:settings.title,
                    close: function(event, ui) {
                                $.validationEngine.unbindAll(_this);
                                $.validationEngine.closePrompt(".formError",true);
                    }
                });
            }
        );

        $(this).bind("submit", function(caller){
            return true;
        });


        return this;
    };
})(jQuery);
