/**
 * html2pdf.js
 * Copyright (c) 2014 Steven Spungin (TwelveTone LLC)  steven@twelvetone.tv
 *
 * Licensed under the MIT License.
 * http://opensource.org/licenses/mit-license
 */

function html2pdf (html,pdf,callback) {
 var canvas = pdf.canvas;
 if (!canvas) {
  alert('jsPDF canvas plugin not installed');
  return;
 }
 canvas.pdf = pdf;
 pdf.annotations = {

  _nameMap : [],

  createAnnotation : function(href,bounds) {
   var x = pdf.context2d._wrapX(bounds.left);
   var y = pdf.context2d._wrapY(bounds.top);
   var page = pdf.context2d._page(bounds.top);
   var options;
   var index = href.indexOf('#');
   if (index >= 0) {
    options = {
     name : href.substring(index + 1)
    };
   } else {
    options = {
     url : href
    };
   }
   pdf.link(x, y, bounds.right - bounds.left, bounds.bottom - bounds.top, options);
  },

  setName : function(name,bounds) {
   var x = pdf.context2d._wrapX(bounds.left);
   var y = pdf.context2d._wrapY(bounds.top);
   var page = pdf.context2d._page(bounds.top);
   this._nameMap[name] = {
    page : page,
    x : x,
    y : y
   };
  }

 };
 canvas.annotations = pdf.annotations;
 
 pdf.context2d._pageBreakAt = function(y) {
  this.pageBreaks.push(y);
 };

 pdf.context2d._gotoPage = function(pageOneBased) {
  while (pdf.internal.getNumberOfPages() < pageOneBased) {
   pdf.addPage();
  }
  pdf.setPage(pageOneBased);
 }

 if (typeof html === 'string') {
  // remove all scripts
  html = html.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');

  var iframe = document.createElement('iframe');
  //iframe.style.width = canvas.width;
  //iframe.src = "";
  //iframe.document.domain =
  document.body.appendChild(iframe);
  var doc;
  doc = iframe.contentDocument;
  if (doc == undefined || doc == null) {
   doc = iframe.contentWindow.document;
  }
  //iframe.setAttribute('style', 'position:absolute;right:0; top:0; bottom:0; height:100%; width:500px');

  doc.open();
  doc.write(html);
  doc.close();

  var promise = html2canvas(doc.body, {
   canvas : canvas,
   onrendered : function(canvas) {
    if (callback) {
     if (iframe) {
      iframe.parentElement.removeChild(iframe);
     }
     callback(pdf);
    }
   }
  });

 } else {
  var body = html;
  var promise = html2canvas(body, {
   canvas : canvas,
   onrendered : function(canvas) {
    if (callback) {
     if (iframe) {
      iframe.parentElement.removeChild(iframe);
     }
     callback(pdf);
    }
   }
  });
 }

}