function HTMLtoPlain(sourceid, targetid)
{
  document.getElementById(targetid).value =
    getFrameWindow(sourceid).document.documentElement.innerHTML
    .replace(/[^ -~]/g, ' ')                                 // Remove special characters
    .replace(/\s+/g, ' ')                                    // Remove whitespace
    .replace(/<p>(.*?)<\/p>/gi, "$1\n\n")                    // Remove <p>, including </p>
    .replace(/<p>(.*?)<p>/gi, "$1\n\n")                      // Remove <p>, ignoring </p> (sketchy!)
    .replace(/<br.*?>/gi, "\n")                              // Remove <br /> or <br>
    .replace(/<hr.*?>/gi, "---------------\n\n")             // Add nice line
    .replace(/<(script|head).*?>.*?<\/(script|head)>/gi, '') // Remove non-displayable tags
    .replace(/<.*?>/gi, '')                                  // Strip HTML tags
  // Cleanup
    .replace(/ +/g, ' ')
  // HTML entities
    .replace(/\&(nbsp|#20);/g, ' ')
    .replace(/\&(quot|#34);/g, '"')
    .replace(/\&(amp|#38);/g, '&')
    .replace(/\&(apos|#39);/g, "'")
    .replace(/\&(lt|#60);/g, '<')
    .replace(/\&(gt|#62);/g, '>')
    .replace(/\&(copy|#169);/g, '©')
    .replace(/\&(laquo|#171);/g, '«')
    .replace(/\&(reg|#174);/g, '®')
    .replace(/\&(raqou|#187);/g, '»')
  // Cleanup round 2 - get rid of &nbsp; if we're going to be stupid about it.
    .replace(/(^|\n) +/g, "\n")
    .replace(/ +(\n|$)]/g, "\n")
  ;
}


function getFrameWindow(frameId) {
  var frame = document.getElementById(frameId);
  var result = null;
  if (frame.contentDocument) {
    // For NS6
    result = frame.contentDocument.window || frame.contentDocument.defaultView;
  } else if (frame.contentWindow) {
    // For IE5.5 and IE6
    result = frame.contentWindow;
  } else if (frame.document) {
    // For IE5
    result = frame.document.window;
  }
  return result;
}
