var datasets = [];

// draw a pie graph
function drawPie(container) {
    var piedata = []
    
    for (var i = 0; i < datasets.length/2; i++) {
        piedata.push({ data : [[0, sum(datasets[i])]], label : datasets[i].label });
    }
    
    var graph = Flotr.draw(container, piedata, {
            HtmlText : true,
            title: "<dfn>Total precipitation [mm] comparison</dfn>",
            grid : {
                    verticalLines : false,
                    horizontalLines : false
                },
            xaxis : { showLabels : false },
            yaxis : { showLabels : false },
            pie : {
                    show : true, 
                    explode : 6
                },
            legend : {
                    position : 'se',
                    backgroundColor : 'none'
                }
        });
}

// draw a bar graph
function drawBars(container) {
  Flotr.draw( container, [{ data: datasets[0].data }], {
            HtmlText : true,
            title: "<dfn>Precipitation [mm] in " + datasets[0].label + "</dfn>",
            bars : {
                    show : true,
                    horizontal : false,
                    shadowSize : 5,
                    barWidth : 0.5
                },
            grid: {
                    verticalLines: false
                },
            yaxis : {
                    min : 0,
                    autoscaleMargin : 1,
                    noTicks: 6
                },
            xaxis: {
                    noTicks : 12,
                    tickFormatter : ticksFn
                },
        });
}

// draw a line graph
function drawLines(container) {
    var graph = Flotr.draw(container, datasets, {
            xaxis: {
                noTicks : 12,
                tickFormatter : ticksFn
            },
            grid: {
                minorVerticalLines: true
            },
            HtmlText : true,
            title: "<dfn>Precipitation [mm] per year</dfn>",
            legend : {
                    position : 'sw',
                    backgroundColor : 'none'
                }
        });
}

// transform the table
function transformTable(container) {
    Awesomizr.rotateTableHeader(container, {
            angle: 45,
            width: "21pt",
            firstCol: true
        });
}

// get data from the document
function getData(table) {
    var rows = table.children[1].children;
    var row;
    
    for (var i = 0; i < rows.length; i++) {
        row = rows[i]
        
        var city = { label: row.children[0].innerHTML, data: [] };
        
        for (var j = 1; j < row.children.length-1; j++) {
            var value = [j-1, parseFloat(row.children[j].innerHTML)];
            
            city.data.push(value);
        }
        
        datasets.push(city);
    }
}

// calculate the total
function calculateTotal(table) {
    var rows = table.children[1].children;
    var row;
    
    for (var i = 0; i < rows.length; i++) {
        row = rows[i]
        
        var total = sum(datasets[i]);
            
        row.lastElementChild.innerHTML += total;
    }
}

function sum(dataset) {
    var total = 0;
    
    for (var i = 0; i < dataset.data.length; i++) {
        total += parseFloat(dataset.data[i][1]);
    }
    
    return Math.round(total*100)/100;
}

function ticksFn(n) {
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    return months[parseInt(n) % 12];
}
function insertPdfAsImages(pdfUrl) {
    var insertImage = function(elem, url, page) {
        // insert an image generated from the PDF
        var img = document.createElement("img");
        img.src = url;
        // select the page from the PDF that should be displayed as image
        img.setAttribute("style", "-ro-source-page: " + page);
        elem.appendChild(img);
        
        // add line break every 2 pages
        if (page % 2 == 0) {
            var br = document.createElement("br");
            elem.appendChild(br);
        }
        return img;
    }
    
    // the element where the images will be inserted
    var container = document.getElementById("pdfAsImagesContainer");
    
    // insert first page, then read the page count and insert the other pages
    var img = insertImage(container, pdfUrl, 1);
    // roPageCount is a proprietary property that returns the number of pages for PDF images
    var pageCount = img.roPageCount;
    for (var i = 2; i <= pageCount; i++) {
        insertImage(container, pdfUrl, i);
    }
}