dojo.print = {

doPrint: function(title, /*domNode*/printArea) {
	printArea = dojo.byId(printArea);
  var printer = window.open(
    "",
    "PrintPopupWindow",
    'width=750,toolbar=0,location=0,directories=0, status=0,menuBar=0,scrollBars=1,resizable=1'
  );
  printer.document.open();
  
  this.addHeader(title, printer);
  printer.document.write('<body>');
  this.addPrintButton(printer);
  printer.document.write(this.parsePrintArea(printArea, printer.document));
  this.addPrintButton(printer);
  printer.document.write('</body>');
  printer.document.close();
  printer.focus();
  //printer.print();
  //printer.close();
},

addHeader: function(title, printer) { 
  printer.document.write('<head>');
  printer.document.write('<title>' + title + '</title>');
  printer.document.write('<link rel="stylesheet" type="text/css" href="/css/print_dojo.css" title="Stylesheet"/>');
  printer.document.write('</head>');
},

addPrintButton: function(printer) {
  printer.document.write('<div class="print_button"><a href="#" onclick="window.print(); return false;">Print</a></div>');
},

parsePrintArea: function(printArea, document) {
  var parent = document.createElement("div");
  parent.appendChild(this.parseNode(printArea, document));
  return parent.innerHTML;
},

parseNode: function(node, document) {
  switch (node.nodeType) {
    case 1: 
      return this.parseElementNode(node, document);
      break;
    case 3: 
      return this.parseTextNode(node, document);
      break;
    default:
      return document.createTextNode("");
      break;  
  }
},

parseElementNode: function(node, document) {
  switch (node.print_marker ? node.print_marker.toLowerCase() : "") {
    case "skip":
      return document.createTextNode("");
      break;
    case "dropdowndatepicker": 
      var newNode = document.createElement("span");
      newNode.innerHTML = node.childNodes[1].value;
      this.copyNodeStyle(newNode, node);
      return newNode;
      break;  
    default:    
      switch (node.nodeName.toLowerCase()) {
        case "select":
          return this.parseSelectNode(node, document);
          break;
        case "input":
          return this.parseInputNode(node, document);
          break;
        case "span":
          return this.parseSpanNode(node, document);
          break;  
        case "div":
          return this.parseDivNode(node, document);
          break; 
        case "textarea":
          return this.parseTextAreaNode(node, document);
          break;     
        default: 
          return this.parseDefaultNode(node, document);
          break;
      }
  }      
},

parseTextNode: function(node, document) {
  return document.createTextNode(node.nodeValue);
},

parseDefaultNode: function(node, document) {
  var newNode = document.createElement(node.nodeName);
  this.copyNodeStyle(newNode, node);
  var childNode = node.firstChild;
  while (childNode) {
      newNode.appendChild(this.parseNode(childNode, document));
      childNode = childNode.nextSibling;
  }
  return newNode;
},

parseSelectNode: function(node, document) {
  var newNode = document.createElement("span");
  for(var index=0;index<node.options.length;index++) {
    if (node.options[index].selected || node.size > 0) {
      newNode.innerHTML += node.options[index].text + "<br />"
    }
  }  
  this.copyNodeStyle(newNode, node);
  return newNode;
},

parseInputNode: function(node, document) {
  var newNode = document.createElement("span");
  switch (node.type.toLowerCase()) {
    case "radio":
		 break;
	case "checkbox": 
      newNode.innerHTML = node.checked ? "ja" : "nee";
      break;
    default:
      newNode.innerHTML = node.value;
      break;
  }
  this.copyNodeStyle(newNode, node);
  return newNode;
},

parseSpanNode: function(node, document) {
  switch (node.className ? node.className.toLowerCase() : "") {
    case "mceeditorcontainer":
      var newNode = document.createElement("span");
      tinyMCE.execInstanceCommand(node.id.substr(0, (node.id.length - 7)), "mceFocus");
      newNode.innerHTML = tinyMCE.getContent();
      this.copyNodeStyle(newNode, node);
      return newNode;
      break;
    default:
      return this.parseDefaultNode(node, document);
      break;
  }
},

parseTextAreaNode: function(node, document) {
  var newNode = document.createElement("span");
  this.copyNodeStyle(newNode, node);
  newNode.innerHTML = node.value;
  return newNode;
},

parseDivNode: function(node, document) {
  switch (node.className ? node.className.toLowerCase() : "") {
   	case "dijitTabInnerDiv":
    case "dijitTabContainer":
		break;
	default:
      return this.parseDefaultNode(node, document);
      break;
  }
},

copyNodeStyle: function(destNode, sourceNode) {
  if (sourceNode.style.display) destNode.style.display = dojo.hasClass(sourceNode, "dijitTabPane") ? "" : sourceNode.style.display;
  if (sourceNode.style.width) destNode.style.width = sourceNode.style.width;
  if (sourceNode.style.float) destNode.style.float = sourceNode.style.float;
  if (sourceNode.className) destNode.className = sourceNode.className;
  if (sourceNode.colSpan) destNode.colSpan = sourceNode.colSpan;
  if (sourceNode.src) destNode.src = sourceNode.src;
}

}


