dx_PrintHelper = _aspxCreateClass(null, {
 constructor: function(){
  this.printFrame = null;
  if(__aspxOpera) {
   this.printElementName = "DXOperaPrinter";
   this.printElement = null;
   this.mergeProperties(dx_XROperaPrintTrick);
  }
 },   
 pdfExists: function(){
  if(!_aspxIsExists(this.pdf))
   this.pdf = this.existsIEPlugin() || this.existsFFPlugin();
  return this.pdf;
 },
 existsIEPlugin: function() {
  return this.createActiveXObject("PDF.PdfCtrl.5")
      || this.createActiveXObject("PDF.PdfCtrl.6")
      || this.createActiveXObject("AcroPDF.PDF.1");
 },
 createActiveXObject: function(classid) {
  try {
   return new ActiveXObject(classid);  
  } catch(ex) {
   return null;   
  }        
 },
 existsFFPlugin: function() {
  var plugins = navigator.mimeTypes["application/pdf"];
  var plugin = plugins != null ? plugins.enabledPlugin : null;   
  return ((plugin)&& 
   (plugin.description.indexOf("Adobe") != -1) &&
   ((plugin.description.indexOf("Version") == -1 || parseFloat(plugin.description.split("Version")[1]) >= 6)));
 },
 getFrame: function() {
  this.ensurePrintFrame();
  return this.printFrame;
 },
 getFrameRecreated: function() {
  if(this.printFrame != null) {
   document.body.removeChild(this.printFrame.frameElement);
   this.printFrame = null;
  }
  return this.getFrame();
 },
 mergeProperties: function(properties) {
  for(var name in properties){
   this[name] = properties[name];
  }
 },
 print: function(result, className){
  this.ensurePrintElement(className);
  this.fillPrintElement(result);
  if(__aspxIE && this.printFrame.document.readyState != "complete"){
   var func = function(printHelper) {
    return function() { if(this.readyState == "complete") printHelper.printCore(); }
   }
   this.printFrame.document.onreadystatechange = func(this);
  } else
   this.printCore();
 },
 printCore: function() {
  if(this.printFrame != null) {
   var style;
   if(__aspxIE && __aspxBrowserVersion >= 7) {  
    style = _aspxGetElementById("DXRPrintHideContent");
    if(style) style.styleSheet.disabled = false;
   }
   this.printFrame.focus();
   this.printFrame.print();
     if(__aspxIE && __aspxBrowserVersion >= 7 && style) 
    style.styleSheet.disabled = true;
  }
 },
 fillPrintElement: function(content) {
  var printDocument = this.printFrame.document;
  printDocument.open("text/html", "replace");
  printDocument.write(content);
  printDocument.close();
 }, 
 ensurePrintElement: function(className) {
  this.ensurePrintFrame();
 },
 ensurePrintFrame: function() {
     if(this.printFrame == null) {
   this.printFrame = window.frames[this.createFrameElement("DXPrinter").id];
  }
 }, 
 createFrameElement: function(name) {
  var f = document.createElement("iframe");
  f.frameBorder = "0";
  f.style.overflow = "hidden";
  f.style.width = "0px";
  f.style.height = "0px";
  f.name = name;
  f.id = name;
  document.body.appendChild(f);
  return f;
 }
});

