function showModalDialog( opts ) {
  var opts = $.extend(
    {
      title: '',
      message: '',
      messageUrl: '',
      action: '',
      act: '',
      autoResize: true,
      autoPosition: true,
      'ok': {
        title: 'Сохранить'
      },
      'cancel': { 
        title: 'Отмена',
        handler: function () {
          $.modal.close();
        }
      }
    }, opts);

  var _ul = $('<ul class="clearfix"></ul>');
  $('<li class="header w2 p16 b"></li>').html(opts.title).appendTo(_ul);
  if ( opts.message )
    $('<li class="message p12"></li>').append( opts.message ).appendTo(_ul);

  var buttons = $("<ul></ul>");
  if ( opts.ok ) {
    var btn = $('<div class="but-blue button p12" />');
    btn.text(opts.ok.title);
    if ( $.isFunction( opts.ok.handler ) )
      btn.click( opts.ok.handler );
    $("<li></li>").append( btn ).appendTo( buttons );
  }

  if ( opts.cancel ) {
    var btn = $('<div class="but-blue button p12" />');
    btn.text(opts.cancel.title);
    if ( $.isFunction( opts.cancel.handler ) )
      btn.bind('click', opts.cancel.handler )
    else
      btn.bind('click', function () { $.modal.close(); } );

    $("<li></li>").append( btn ).appendTo( buttons );
  }

  var form_html = $('<form action="'+opts.action+'" method="post"></form>')
                  .append('<input name="act" type="hidden" value="'+opts.act+'">' )
                  .append( _ul )
                  .append( $('<div class="buttons clearfix"></div>').html( buttons ) );

  $("#modal-dialog").remove();
  $('<div id="modal-dialog"></div>').html( form_html ).modal(
    $.extend({
//        position: ['10%', ''],
        overlayClose: true,
        zIndex: 100000,
        onOpen: function (dialog) {
            var s = this;
            dialog.overlay.show();
            dialog.data.hide();
            dialog.container.fadeIn('fast', function () {
              if ( opts.messageUrl ) {
                var _timeout = setTimeout(function () { show_preloader(dialog.data) }, 100);
                getRequest({
                  url: opts.messageUrl,
                  onSuccess: function (d) {
                    clearTimeout( _timeout );
                    processResultDialog(d, dialog, s);
                  },
                  /* if fatal error - returned data - html page */
                  onFatalError: function (d) {
                    clearTimeout( _timeout );
                    // unwrap form
                    $('div#modal-dialog').html( d );
                    processResultDialog({}, dialog, s);
                  },
                  onSystemError: function () {
                    clearTimeout( _timeout );
                  }
                });
              } else {
                dialog.data.slideDown('fast');
              }
            });
            $("#simplemodal-container").wrapInner('<div class="el-gray" data="width=400px"></div>');
            $(".el-gray, .but-blue, .but-gray, .el").MakeCorner();
            $(window).trigger('resize.simplemodal');
        }
    }, opts) );
}

function processResultDialog(d, dialog, s) {
    if ( d.message ) {
      var ell = dialog.data.find('li.message');
      if ( ell.length == 0 ) {
        ell = $('<li class="message p12"></li>');
        dialog.data.find('li.header').after( ell );
      }
      ell.html( d.message );
    }

    if ( d.buttons ) {

      if ( d.buttons.ok ) {
        var btn = dialog.data.find('button[type="submit"]');
        btn.text(d.buttons.ok.title);
        if ( $.isFunction( d.buttons.ok.handler ) )
          btn.click( d.buttons.ok.handler );
      }
      if ( d.buttons.cancel ) {
        var btn = dialog.data.find('button.cancel');
        btn.text(d.buttons.cancel.title);
        if ( $.isFunction( d.buttons.cancel.handler ) )
          btn.click( d.buttons.cancel.handler );
      }

    }

    dialog.data.find('li.buttons').show();

    if ( d.action )
      dialog.data.find('form').attr('action', d.action);

    if ( d.act )
      dialog.data.find('input[name=act]').val( d.act );

    if ( $.isFunction(d.onShow) )
      d.onShow();

    s.setContainerDimensions( true );
    dialog.data.hide();
    dialog.data.slideDown('fast');
    dialog.data.find('img').load(function () { $(window).trigger('resize.simplemodal'); });
}

function dialog_success(msg, timeout) {
  if ( $('#modal-dialog').length ) {
    $('#modal-dialog li.message').html('<table width="100%" height="100%"><tr><td width="100%" height="100%" valign="top" align="center" class="p14 w b">'+msg+'</td></tr></table>');
    if ( timeout )
      setTimeout( '$.modal.close();', timeout );

  } else {
    $.modal.close();
  }
}

function show_preloader(d) {
  if( typeof(d) == 'undefined' ) return;
  d.find('li.message').html('<center>загружается...</center>');
  d.find('li.buttons').hide();
  d.show();
}


