$.fn.extend(
{
  mm_dialog: function(options)
  {
    var defaults =
    {
    };
    var options = $.extend(defaults, options);

    return this.each(function()
    {
      var obj = $(this);
      obj.click(function()
      {
        // create overlay
        $('body').append('<div id="mm-overlay"></div>');
    
        // create our dialog window
        var mm_dialog = $('<div class="mm-window mm-dialog"></div>');
        mm_dialog.hide();
        var mm_header = $('<div class="mm-dialog-title mm-unselectable mm-cursor-move"></div>');
        var mm_title = $('<span class="mm-title"></span>');
        var mm_button_close = $('<div class="mm-dialog-close">&times;</div>');
        var mm_dialog_body = $('<div class="mm-dialog-body"></div>');
        mm_header.append(mm_title);
        mm_dialog.append(mm_header);
        mm_header.append(mm_button_close);
        mm_button_close.click(
          function()
          {
            mm_dialog.remove();
            $("#mm-overlay").remove();
          }
        );
    
        $.ajax(
        {
          url: "/aanbieders/formulier/get/" + options['formulier'] + "/" + $("#aanbieder_id").val(),
          type: 'POST',
          dataType: 'json',
          success: function(data)
          {
            if (data != null)
            {
              return render(data);
            }
            else
            {
              $("#mm-overlay").remove();
            }
          },
          error: function(jqXHR, textstatus, errorThrown)
          {
            $("#mm-overlay").remove();
            alert(jqXHR.status + ' ' + textstatus);
          }
        });
        
        
        function render(data)
        {
          if (data['validation_errors'] != null)
          {
            mm_dialog_body.find('.mm-validation-error').removeClass('mm-validation-error');
            for(var i in data['validation_errors'])
            {
              mm_dialog_body.find('form').find('[name="' + data['validation_errors'][i] + '"]').addClass('mm-validation-error');
            }
            return;
          }
        
          mm_dialog_body.empty();
          mm_title.empty();
          mm_title.append(data['title']);
          mm_dialog_body.append(data['html']);
          mm_dialog.append(mm_dialog_body);
          $('body').append(mm_dialog);

          mm_dialog_body.find('form').submit(function()
          {
            var parameters = $(this).serialize();
            $.ajax(
            {
              url: $(this).attr('action'),
              type: "POST",
              data: parameters,
              dataType: 'json',
              success: function(data)
              {
                if (data != null)
                {
                  render(data);
                }
                else
                {
                  render("<p>You got 404'D</p>");
                }
              },
              error: function(jqXHR, textstatus, errorThrown)
              {
                mm_dialog.remove();
                $("#mm-overlay").remove();
                alert(jqXHR.status + ' ' + textstatus);
              }
            });
            return false;
          });

          mm_dialog.show();
          

          // resize/reposition the dialog
          var winH = $(window).height();
          var winW = $(window).width(); 
          mm_dialog.css('position', 'absolute');
          var x = Math.max(winH/2-mm_dialog.height()/2, 10) + $(document).scrollTop();
          var y = Math.max(winW/2-mm_dialog.width()/2, 10);
          mm_dialog.css('top', x);
          mm_dialog.css('left', y);
        }
        return false;
      });

    });
  }
});
