;(function(global){

    var pdfFormat = {
        'a0': [2383.94, 3370.39],
        'a1': [1683.78, 2383.94],
        'a2': [1190.55, 1683.78],
        'a3': [841.89, 1190.55],
        'a4': [595.28, 841.89],
        'a5': [419.53, 595.28],
        'a6': [297.64, 419.53],
        'a7': [209.76, 297.64],
        'a8': [147.40, 209.76],
        'a9': [104.88, 147.40],
        'a10': [73.70, 104.88],
        'b0': [2834.65, 4008.19],
        'b1': [2004.09, 2834.65],
        'b2': [1417.32, 2004.09],
        'b3': [1000.63, 1417.32],
        'b4': [708.66, 1000.63],
        'b5': [498.90, 708.66],
        'b6': [354.33, 498.90],
        'b7': [249.45, 354.33],
        'b8': [175.75, 249.45],
        'b9': [124.72, 175.75],
        'b10': [87.87, 124.72],
        'c0': [2599.37, 3676.54],
        'c1': [1836.85, 2599.37],
        'c2': [1298.27, 1836.85],
        'c3': [918.43, 1298.27],
        'c4': [649.13, 918.43],
        'c5': [459.21, 649.13],
        'c6': [323.15, 459.21],
        'c7': [229.61, 323.15],
        'c8': [161.57, 229.61],
        'c9': [113.39, 161.57],
        'c10': [79.37, 113.39],
        'dl': [311.81, 623.62],
        'letter': [612, 792],
        'government-letter': [576, 756],
        'legal': [612, 1008],
        'junior-legal': [576, 360],
        'ledger': [1224, 792],
        'tabloid': [792, 1224]
    }

    // the width and height of content decided by the format of pdf
    // 'a0': [2383.94, 3370.39], 'a1': [1683.78, 2383.94],
    // 'a2': [1190.55, 1683.78], 'a3': [841.89, 1190.55],
    // 'a4': [595.28, 841.89], 'a5': [419.53, 595.28],
    // 'a6': [297.64, 419.53], 'a7': [209.76, 297.64],
    // 'a8': [147.40, 209.76], 'a9': [104.88, 147.40],
    // 'a10': [73.70, 104.88], 'b0': [2834.65, 4008.19],
    // 'b1': [2004.09, 2834.65], 'b2': [1417.32, 2004.09],
    // 'b3': [1000.63, 1417.32], 'b4': [708.66, 1000.63],
    // 'b5': [498.90, 708.66], 'b6': [354.33, 498.90],
    // 'b7': [249.45, 354.33], 'b8': [175.75, 249.45],
    // 'b9': [124.72, 175.75], 'b10': [87.87, 124.72],
    // 'c0': [2599.37, 3676.54], 'c1': [1836.85, 2599.37],
    // 'c2': [1298.27, 1836.85], 'c3': [918.43, 1298.27],
    // 'c4': [649.13, 918.43], 'c5': [459.21, 649.13],
    // 'c6': [323.15, 459.21], 'c7': [229.61, 323.15],
    // 'c8': [161.57, 229.61], 'c9': [113.39, 161.57],
    // 'c10': [79.37, 113.39], 'dl': [311.81, 623.62],
    // 'letter': [612, 792],
    // 'government-letter': [576, 756],
    // 'legal': [612, 1008],
    // 'junior-legal': [576, 360],
    // 'ledger': [1224, 792],
    // 'tabloid': [792, 1224]
    global.renderPDF = function(content, pdfName, format, onSuccess){

        pdfName = pdfName || "content";

        if(pdfName.indexOf(".pdf") < 0){
            pdfName = pdfName + ".pdf";
        }

        format = format || "a4";

        var copyContent = content.cloneNode();

        copyContent.innerHTML = content.innerHTML;
        copyContent.style.position = "absolute";
        copyContent.style.zIndex = "-999";
        copyContent.style.top = "2000px";

        content = copyContent;

        document.body.appendChild(content);

        var pdfProportion = pdfFormat[format][0] / pdfFormat[format][1];

        var contentHeight = content.offsetHeight;
        var contentWidth = content.offsetWidth;
        
        var pageHeight = contentWidth / pdfProportion;
        var pageWidth = contentWidth;

        function renderPages(imgData){

            var pdf = new jsPDF("p", "pt", format);

            if(contentHeight < pageHeight){
                
                pdf.addImage(imgData, 'JPEG', 0, 0,pdfFormat[format][0],pdfFormat[format][1]/pageHeight*contentHeight);

                pdf.save(pdfName);

            }
            else{

                var index = 0;
                var count = parseInt(contentHeight / pageHeight);

                var page = document.createElement("div");
                
                page.style.position = "absolute";
                page.style.width = contentWidth + "px";
                page.style.height = pageHeight + "px";
                page.style.backgroundImage = "url(" + imgData + ")";
                page.style.backgroundRepeat = "norepeat";

                document.body.appendChild(page);

                function addPage(i, onFinished){

                    page.style.backgroundPositionY = -pageHeight * i + "px";
                    
                    html2canvas(page, {

                        onrendered: function(canvas) {

                            var pageData = canvas.toDataURL('image/jpeg');

                            pdf.addImage(pageData, 'JPEG', 0, 0,pdfFormat[format][0],pdfFormat[format][1]);

                            if(i + 1 < count){
                                pdf = pdf.addPage();
                                addPage(i + 1, onFinished);
                            }
                            else{
                                onFinished()
                            }

                        }
                    });

                }

                addPage(index, function(){

                    page.style.backgroundPositionY = -pageHeight * count + "px";

                    var lastPageHeight = contentHeight % pageHeight;
                    page.style.height = lastPageHeight + "px";

                    html2canvas(page, {

                        onrendered: function(canvas) {

                            var pageData = canvas.toDataURL('image/jpeg');

                            pdf = pdf.addPage();
                            pdf.addImage(pageData, 'JPEG', 0, 0,pdfFormat[format][0], pdfFormat[format][1]/pageHeight*lastPageHeight);

                            document.body.removeChild(page);
                            document.body.removeChild(content);

                            onSuccess && onSuccess();

                            pdf.save(pdfName);

                        }
                    });


                });

            }
                        
            
        }

        html2canvas(content, {

            // 渲染完成时调用,获得 canvas
            onrendered: function(canvas) {

                var imgData = canvas.toDataURL('image/jpeg');
                
                renderPages(imgData);

            }
        });


    }

})(window);