/** FHRSWidget.Core.js: shared functionality for widgets **/
// Namespace definition : All Widget Classes should be created in this namespace  //
if (!window.FHRSWidget)
    window.FHRSWidget = {};
// Widget Core Constructor //
FHRSWidget.Core = function()
{    
    // Write out Parent Div where script is placed
    // Widget content can then be attached to this div through the DOM
    this.parentDivId = 'CoreJsBaseDiv';
    document.write('
');
}
// Widget Core Class Definition //
FHRSWidget.Core.prototype =
{
    // Create any HTML element //
    createTag: function (tagName, innerHtml, cssClass) {
        var tag = $c(tagName);
        if (cssClass) {
            this.setCssClass(tag, cssClass);
        }
        if (innerHtml) {
            tag.innerHTML = innerHtml;
        }
        return tag;
    },
    // Create Unordered List of Hyperlinks //
    createHyperlinkList: function (dataCollection, businessUrl, ratingImageUrl, listId, cssClass) {
        // Remove existing list with this Id, if exists
        var listTag = $g(listId);
        if (listTag) this.parentDiv.removeChild(listTag);
        // Create list
        var list;
        list = $c('div');
        list.id = listId;
        list.name = listId;
        if (cssClass != '') {
            this.setCssClass(list, cssClass);
        }
        // Add items to list
        var div;
        for (index in dataCollection) {
            var item = dataCollection[index];
            div = $c('div');
            var businessName = item.BusinessName;
            var ratingKey = item.RatingKey;
            var postCode = item.PostCode;
            if (businessName) {
                var hyperlink = this.createHyperlink(null, businessName, businessUrl + item.FHRSID, null, 'listhyperlink');
                div.appendChild(hyperlink);
                var image = this.createTag('div', postCode, null);
                div.appendChild(image);
                var image = this.createTag('div', '
', null);
                div.appendChild(image);
            }
            else {
                var norating = this.createTag('div', '
', null);
                div.appendChild(norating);
            }
            list.appendChild(div);
        }
        return list;
    },
    // Create a hyperlink and attach event handlers if needed //
    createHyperlink: function (hyperlinkId, text, href, onClickFunction, cssClass, target) {
        hyperlink = $c('a');
        if (hyperlinkId) {
            hyperlink.id = hyperlinkId;
            
            hyperlink.name = hyperlinkId;
        }
        hyperlink.title = text;
        hyperlink.innerHTML=('' + text +  '
'); //text));
        if (href) {
            hyperlink.href = href;
        }
        if (cssClass != null && cssClass != '') {
            this.setCssClass(hyperlink, cssClass);
        }
        if (target) {
            hyperlink.setAttribute("target", target);
        }
        // Attach onclick event handlers
        if (onClickFunction) {
            hyperlink.onclick = onClickFunction;
            var onClickHandler = new Function(hyperlink.onclick);
            if (hyperlink.addEventListener) {
                hyperlink.addEventListener('click', onClickHandler, false);
            } else if (hyperlink.attachEvent) {
                hyperlink.attachEvent('onclick', onClickHandler);
            }
        }
        return hyperlink;
    },
    // Adds CSS Class to any element //
    setCssClass: function (elem, cls) {
        elem.setAttribute('class', cls);
        elem.setAttribute('className', cls);
    },
    // Attach a Stylesheet to document  //
    attachStyleSheet: function (path, linkId) {
        var doc = document.getElementsByTagName('head').item(0);
        var link = $c('link');
        link.rel = 'stylesheet';
        link.type = 'text/css';
        link.href = path;
        link.id = linkId;
        doc.appendChild(link);
        return false;
    },
    // Attach a new script, useful for simulating postbacks //
    attachScript: function (path, scriptId) {
        script = $c('script');
        script.src = path;
        script.type = 'text/javascript';
        script.id = scriptId;
        this.parentDiv.appendChild(script);
        return false;
    }
}
// Shortcut for GetElementsById //
function $g(elem)
{
  return document.getElementById(elem);
}
// Shortcut for CreateElement //
function $c(elem)
{
  return document.createElement(elem);
}
// Construct a new core object
var core = new FHRSWidget.Core();
/** FHRSWidget.Widget.js: renders list of dev events **/
// Widget Constructor //
FHRSWidget.Widget = function()
{
    // Get reference to main div. All widget content will be children of this div
    this.parentDiv = document.getElementById(core.parentDivId);
    this.businessUrl = "https://ratings.food.gov.uk/business/";
    this.ratingImageUrl = "https://api1-ratings.food.gov.uk/images/scores/small/";
    this.fhrsEstablishmentData = [{"AddressLine1":"Oak Manor","AddressLine2":"Harvest Rise","AddressLine3":"Shefford","AddressLine4":"Beds","BusinessName":"Methodist Homes","BusinessType":"Caring Premises","BusinessTypeID":5,"Distance":null,"FHRSID":1030573,"Geocode":{"Latitude":52.032093,"Longitude":-0.330111},"LocalAuthorityBusinessID":"166479","LocalAuthorityCode":"702","LocalAuthorityEmailAddress":"env.health@centralbedfordshire.gov.uk","LocalAuthorityName":"Central Bedfordshire","LocalAuthorityWebSite":"http:\/\/www.centralbedfordshire.gov.uk","NewRatingPending":false,"PostCode":"SG17 5GE","RatingDate":"10 December 2024","RatingKey":"fhrs_5_en-gb","RatingValue":"5","ReInspectionResult":null,"RightToReply":"","SchemeType":"FHRS","Scores":{"ConfidenceInManagement":0,"Hygiene":0,"Structural":5}}];
}
// Widget : Core Class Definition  //
FHRSWidget.Widget.prototype =
{
    // Main function for Events Widget : Handles rendering the widget to the consuming site //
    render: function () {
        // Create Border and Shadow and return Content Div
        var contentDiv = this.createContentBorder();
        // Create and Attach Events List
        contentDiv.appendChild(core.createHyperlinkList(this.fhrsEstablishmentData, this.businessUrl, this.ratingImageUrl, 'eventList', 'widgetcontainer'));
        contentDiv.appendChild(core.createTag('br'));
    },
    // Create Border, Shadow, and Content Div //
    createContentBorder: function () {
        var outerDiv = core.createTag('div', '', 'widget1');
        var innerDiv = core.createTag('div', '', 'widget2');
        var contentDiv = core.createTag('div', '', 'widget3');
        innerDiv.appendChild(contentDiv);
        outerDiv.appendChild(innerDiv);
        this.parentDiv.appendChild(outerDiv);
        return contentDiv;
    }
}
// Create Widget Object
var ev_w = new FHRSWidget.Widget();
ev_w.render();