InsertImage.prototype.show = function(image)
{
	if (!this.dialog) this.prepareDialog();
  
  var editor = this.editor;
	if ( typeof image == "undefined" )
  {
    image = editor.getParentElement();
    if ( image && image.tagName.toLowerCase() != 'img' )
    {
      image = null;
    }
  }

  if ( image )
  {
    function getSpecifiedAttribute(element,attribute)
    {
      var a = element.attributes;
      for (var i=0;i<a.length;i++)
      {
        if (a[i].nodeName == attribute && a[i].specified)
        {
          return a[i].value;
        }
      }
      return '';
    }
    outparam =
    {
      f_url    : this.stripBaseURL(image.getAttribute('src',2)), // the second parameter makes IE return the value as it is set, as opposed to an "interpolated" (as MSDN calls it) value
      f_alt    : image.alt,
      f_border : image.border,
      f_align  : image.align,
      f_vert   : getSpecifiedAttribute(image,'vspace'),
      f_horiz  : getSpecifiedAttribute(image,'hspace'),
      f_width  : image.width,
      f_height : image.height
    };
  }
  else{
  {
    outparam =
    {
      f_url    : '',
      f_alt    : '',
      f_border : '',
      f_align  : '',
      f_vert   : '',
      f_horiz  : '',
      f_width  : '',
      f_height : ''
    };
  }
  }
  this.image = image;
  // now calling the show method of the Xinha.Dialog object to set the values and show the actual dialog
  this.dialog.show(outparam);
};

// and finally ... take some action
InsertImage.prototype.apply = function()
{
  var param = this.dialog.hide();
  if (!param.f_url)
  {
    return;
  }
  var editor = this.editor;
  var img = this.image;
  if ( !img )
  {
    if ( Xinha.is_ie )
    {
      var sel = editor.getSelection();
      var range = editor.createRange(sel);
      editor._doc.execCommand("insertimage", false, param.f_url);
      img = range.parentElement();
      // wonder if this works...
      if ( img.tagName.toLowerCase() != "img" )
      {
        img = img.previousSibling;
      }
    }
    else
    {
      img = document.createElement('img');
      img.src = param.f_url;
      editor.insertNodeAtSelection(img);
      if ( !img.tagName )
      {
        // if the cursor is at the beginning of the document
        img = range.startContainer.firstChild;
      }
    }
  }
  else
  {
    img.src = param.f_url;
  }

  for ( var field in param )
  {
    var value = param[field];
    switch (field)
    {
      case "f_alt":
      if (value)
      img.alt = value;
      else
      img.removeAttribute("alt");
      break;
      case "f_border":
      if (value)
      img.border = parseInt(value || "0");
      else
      img.removeAttribute("border");
      break;
      case "f_align":
      if (value.value)
      img.align = value.value;
      else
      img.removeAttribute("align");
      break;
      case "f_vert":
      if (value != "")
      img.vspace = parseInt(value || "0");
      else
      img.removeAttribute("vspace");
      break;
      case "f_horiz":
      if (value != "")
      img.hspace = parseInt(value || "0");
      else
      img.removeAttribute("hspace");
      break;
      case "f_width":
      if (value)
      img.width = parseInt(value || "0");
      else
      img.removeAttribute("width");
      break;
      case "f_height":
      if (value)
      img.height = parseInt(value || "0");
      else
      img.removeAttribute("height");
      break;
    }
  }

};
