var additionalTabs =  {
    advisoryTab: {
        title: 'Advisory',
        setValue: async function (j) {
          if (pugRender && document.getElementById("render")) {
            var cve_list = textUtil.deep_value(j, 'CNA_private.CVE_list');
            if (cve_list && cve_list.length > 0) {
                var cSet = new Set();
                var cMap = {};
                for (var d of cve_list) {
                    if (d.CVE) {
                        for (var x of d.CVE.match(/CVE-\d{4}-[a-zA-Z\d\._-]{4,}/igm)) {
                            cSet.add(x);
                            cMap[x] = {
                                impact: '',
                                summary: d.summary
                            }
                        }
                    }
                }
                if (cSet.size > 0) {
                    var r = await textUtil.getDocuments('nvd', Array.from(cSet), ['cve.CVE_data_meta', 'cve.description', 'impact']);
                    for (var c of r) {
                        var cveid = textUtil.deep_value(c, 'cve.CVE_data_meta.ID');
                        if (textUtil.deep_value(c, 'impact.baseMetricV3.cvssV3')) {
                            cMap[cveid].impact = {
                                cvss: c.impact.baseMetricV3.cvssV3
                            };
                        } else if (textUtil.deep_value(c, 'impact.baseMetricV2.cvssV2')) {
                            cMap[cveid].impact = {
                                cvss: c.impact.baseMetricV2.cvssV2
                            };
                        }
                        if (!cMap[cveid].summary) {
                            var title = textUtil.deep_value(c, 'cve.CVE_data_meta.TITLE');
                            cMap[cveid].summary = title ? title : textUtil.deep_value(c, 'cve.description.description_data')[0].value;
                        }
                        cSet.delete(cveid);
                    }
                    if (cSet.size > 0) {
                        var nr = await textUtil.getDocuments('cve', Array.from(cSet), ['body.CVE_data_meta', 'body.impact', 'body.description']);
                        for (c of nr) {
                            var cveid = textUtil.deep_value(c, 'body.CVE_data_meta.ID');
                            if (textUtil.deep_value(c, 'body.impact.cvss')) {
                                cMap[cveid].impact = c.body.impact;
                            }
                            if (!cMap[cveid].summary) {
                                var desc = textUtil.deep_value(c, 'body.description.description_data')[0].value;
                                cMap[cveid].summary = desc ? desc : textUtil.deep_value(c, 'body.CVE_data_meta.TITLE');
                            }
                        }
                    }
                    document.getElementById("render").innerHTML = pugRender({
                        renderTemplate: 'page',
                        doc: j,
                        getProductAffected: getProductAffected,
                        cmap: cMap,
                    });
                } else {
                    document.getElementById("render").innerHTML = pugRender({
                        renderTemplate: 'page',
                        getProductAffected: getProductAffected,
                        doc: j
                    });
                }
            } else {
                document.getElementById("render").innerHTML = pugRender({
                    renderTemplate: 'page',
                    getProductAffected: getProductAffected,
                    doc: j
                });
            }
        }
      }
    },
    mitreTab: {
        title: 'MITRE-Preview',
        setValue: function(j){
            document.getElementById("mitreweb").innerHTML = pugRender({
                renderTemplate: 'mitre',
                doc: j
            });
        }
    },
    jsonTab: {
        title: 'CVE-JSON',
        setValue: function(j){
            document.getElementById("outjson").textContent = textUtil.getMITREJSON(textUtil.reduceJSON(j)); 
        }
    }
}

function tweetJSON(event, link) {
        var j = mainTabGroup.getValue();
        if (!j){
            event.preventDefault();
            return;
        }
        var id = textUtil.deep_value(j, 'CVE_data_meta.ID');
        var cvelist = textUtil.deep_value(j, 'CNA_private.CVE_list');
        if(cvelist && cvelist.length > 0) {
            id = '';
        }
        var aka = textUtil.deep_value(j, 'CVE_data_meta.AKA')
        var text = id + ' ' + textUtil.deep_value(j, 'source.advisory') + ' '
            + textUtil.getBestTitle(j) + ' '
            + (aka? ' aka ' + aka : '');
        text = text.replace(/ +(?= )/g,'');
        link.href = 'https://twitter.com/intent/tweet?&text=' 
            + encodeURI(text)
            + '&url=' + encodeURI(textUtil.deep_value(j, 'references.reference_data.0.url'));
        //    + '&hashtags=' + encodeURI(id)
        //via=vulnogram&hashtags=CVE
}

async function draftEmail(event, link, renderId) {
        var subject = ''
        if(typeof(mainTabGroup) !== 'undefined') {
            var j = mainTabGroup.getValue();
            if (!j){
                event.preventDefault();
                return;
            }
            var id = textUtil.deep_value(j, 'CVE_data_meta.ID');
            var cvelist = textUtil.deep_value(j, 'CNA_private.CVE_list');
            if(cvelist && cvelist.length > 0) {
                id = '';
            }
            subject = id +' ' + textUtil.getBestTitle(j);
        } else {
            var t = document.getElementById(renderId).getElementsByTagName('h2')[0];
            if(t) {
                subject = t.textContent;
            }
        }
        var emailBody = document.getElementById(renderId).innerText;
        link.href="mailto:?subject=" + encodeURI(subject) + '&body=' + encodeURI(emailBody);
}

function loadCVE(value) {
    var realId = value.match(/(CVE-(\d{4})-(\d{1,12})(\d{3}))/);
    if (realId) {
        var id = realId[1];
        var year = realId[2];
        var bucket = realId[3];
        fetch('https://raw.githubusercontent.com/CVEProject/cvelist/master/' + year + '/' + bucket + 'xxx/' + id + '.json', {
                method: 'GET',
                credentials: 'omit',
                headers: {
                    'Accept': 'application/json, text/plain, */*'
                },
                redirect: 'error'
            })
            .then(function (response) {
                if (!response.ok) {
                    errMsg.textContent = "Failed to load valid CVE JSON";
                    infoMsg.textContent = "";
                    throw Error(id + ' ' + response.statusText);
                }
                return response.json();
            })
            .then(function (res) {
                if (res.CVE_data_meta) {
                    loadJSON(res, id, "Loaded "+id+" from GIT!");
                } else {
                    errMsg.textContent = "Failed to load valid CVE JSON";
                    infoMsg.textContent = "";
                }
            })
            .catch(function (error) {
                errMsg.textContent = error;
            })
    } else {
        errMsg.textContent = "CVE ID required";
    }
    return false;
}

function getProductAffected(cve) {
    var lines = [];
    for (var vendor of cve.affects.vendor.vendor_data) {
        var pstring = [];
        for(var product of vendor.product.product_data) {
            var versions = {};
            var includePlatforms = true;
            var platforms = {};
            for (var version of product.version.version_data) {
                if(version.version_affected && version.version_affected.indexOf('!') < 0 && version.version_affected.indexOf('?') < 0) {
                    versions[version.version_name] = 1;
                    if (version.platform == "all" || version.platform == "") {
                        includePlatforms = false;
                    }
                    if (includePlatforms && version.platform) {
                        var ps = version.platform.split(',');
                        for (var p of ps) {
                            platforms[p.trim()] = true;
                        }
                    }
                }
            }
            pstring.push('This issue affects ' + product.product_name + ' ' +
                Object.keys(versions).sort().join(", ")+ '.');
            if(includePlatforms && (Object.keys(platforms).length > 0)) {
                pstring.push('Affected platforms: ' + Object.keys(platforms).sort().join(', ') + '.');
            }
        }
        lines.push(pstring.join(" "));
    }
    // ASF
    var x = lines.join();
    return x.replace(" .",".");
    // END ASF
};