/**
 *  Data: 1999/05/12
 *  Autor: Paulo Sousa
 *  Empresa: CPCis
 *  Nome: email
 *  Parametros: objecto
 *  Descrição: Esta script tem como função validar um imprimir no browser IE 4.0.
 */

// The code by Captain <cerebrum@iname.com>
// Mead & Company, http://www.meadroid.com/wpm/
ie = (document.all) ? 1:0 

if (ie){
  // 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;
  } 
}
