// The code by Captain <cerebrum@iname.com>

// Mead & Company, http://www.meadroid.com/wpm/



// fake print() for IE4.x

if ( !printIsNativeSupport() )

  window.print = printFrame;



// main stuff

function printFrame(frame, onfinish) {

  if ( !frame ) frame = window;



  if ( frame.document.readyState !== "complete" &&

       !confirm("The document to print is not downloaded yet! Continue with printing?") )

  {

    if ( onfinish ) onfinish();

    return;

  }



  if ( printIsNativeSupport() ) {

    /* focus handling for this scope is IE5Beta workaround,

       should be gone with IE5 RTM.

    */

    var focused = document.activeElement; 

    frame.focus();

    frame.self.print();

    if ( onfinish ) onfinish();

    if ( focused && !focused.disabled ) focused.focus();

    return;

  }



  var eventScope = printGetEventScope(frame);

  var focused = document.activeElement;



  window.printHelper = function() {

    execScript("on error resume next: printWB.ExecWB 6, 1", "VBScript");

    printFireEvent(frame, eventScope, "onafterprint");

    printWB.outerHTML = "";

    if ( onfinish ) onfinish();

    if ( focused && !focused.disabled ) focused.focus();

    window.printHelper = null;

  }



  document.body.insertAdjacentHTML("beforeEnd",

    "<object id=\"printWB\" width=0 height=0 classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\"></object>");



  printFireEvent(frame, eventScope, "onbeforeprint");

  frame.focus();

  window.printHelper = printHelper;

  setTimeout("window.printHelper()", 0);

}



// helpers

function printIsNativeSupport() {

  var agent = window.navigator.userAgent;

  var i = agent.indexOf("MSIE ")+5;

  return parseInt(agent.substr(i)) >= 5 && agent.indexOf("5.0b1") < 0;

}



function printFireEvent(frame, obj, name) {

  var handler = obj[name];

  switch ( typeof(handler) ) {

    case "string": frame.execScript(handler); break;

    case "function": handler();

  }

}



function printGetEventScope(frame) {

  var frameset = frame.document.all.tags("FRAMESET");

  if ( frameset.length ) return frameset[0];

  return frame.document.body;

}

