window.SF = window.SF || {};
(function () {

    var rootClassName = 'sf-root';
    var roots = document.getElementsByClassName(rootClassName);
    var name = 'GetEmail.io';
    var sf_id = '3045836';
    var variant_id = 'sf';
    var dest_url = 'https://sourceforge.net/software/product/GetEmail-io/';
    var base_url = 'https://sourceforge.net';
    var syndication_base = 'https://b.sf-syn.com';
    var ratingCount = 743;
    var iconUrl = '/s/getemail-io/icon';
    var enabled = 'true';
    var avg_rating = 4.7;
    var badgeSchemaSelector = '#badge-schema-' + sf_id;

    function getSettings(el) {
        var attrs = [
            'badge',
            'id',
            'variant-id',
            'nocdn',
            'metadata',
        ];
        var res = {};

        for (var x=0; x<attrs.length; x++) {
            res[attrs[x]] = el.getAttribute('data-' + attrs[x]);
        }

        try {
            res.referrer = top.location.href;
        } catch (ex) {
            // if we can't read the main site's URL, at use the (presumably) iframe's URL
            res.referrer = window.location.href;
        }

        return res;
    }

    function badgeURL(settings) {
        var domain = Boolean(settings.nocdn) ? base_url + '/cdn/syndication' : syndication_base;
        var qs = settings.metadata || '';
        if(settings['variant-id']) {
            qs += '&variant_id=' + settings['variant-id'];
        }
        qs += '&r=' + settings.referrer;
        var imgMarkup = '<img alt="'+ name +' Reviews" src="' + domain + '/badge_img/' + settings.id + '/' + settings.badge + '?' + qs + '" style="min-width: 60px; max-width:200px; width:100%;">';
        return imgMarkup;
    }

    function reviewSchemaSnippet(settings) {
        var markup = '<script id="badge-schema-' + sf_id + '" type="application/ld+json">\n' +
            '{\n' +
            '  "@context": "https://schema.org/",\n' +
            '  "@type": "SoftwareApplication",\n' +
            '  "applicationCategory": "BusinessApplication",\n' +
            '  "name": "' + name + '",\n' +
            '  "image": "' + base_url + iconUrl + '",\n' +
            '  "description": "SourceForge Software Rating",\n' +
            '  "aggregateRating": {\n' +
            '    "@type": "AggregateRating",\n' +
            '    "ratingValue": "' + avg_rating + '",\n' +
            '    "bestRating": "' + 5 + '",\n' +
            '    "ratingCount": "' + ratingCount + '"\n' +
            '  }\n' +
            '}\n' +
            '</script>\n';
        return markup;
    }

    function getDestinationUrl(){
        return dest_url + '?pk_campaign=badge&pk_source=vendor';
    }

    for (var i = 0; i < roots.length; i++) {
        var r = roots[i];
        var settings = getSettings(r);
        var r_variant_id = settings['variant-id'] || 'sf';
        var r_sf_id = settings.id;
        if (! r.getAttribute('data-complete') && r_sf_id === sf_id && r_variant_id === variant_id) {
            var html = '<a href="' + getDestinationUrl() + '" target="_blank">' + badgeURL(settings) + '</a>';
            var badgeSchema = document.querySelector(badgeSchemaSelector);
            if(enabled === 'true' && ratingCount && avg_rating && r_variant_id === 'sf' && !badgeSchema) {
                html += reviewSchemaSnippet(settings);
            }
            r.innerHTML = html;
            r.setAttribute('data-complete', true);
        }
    }
})();