Wazebar

try to take over the world!

当前为 2017-02-22 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Wazebar
// @namespace    https://greasyfork.org/users/30701-justins83-waze
// @version      0.1
// @description  try to take over the world!
// @author       JustinS83
// @include      https://www.waze.com/editor/*
// @include      https://www.waze.com/*/editor/*
// @exclude      https://www.waze.com/user/editor*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

    var WazeBarSettings = [];

(function() {
    'use strict';

      function bootstrap(tries) {
        tries = tries || 1;

        if (W &&
            W.map &&
            W.model &&
            W.loginManager.user &&
            $ &&
            $('.app.container-fluid.show-sidebar').length > 0) {
            init();
        } else if (tries < 1000) {
            setTimeout(function () {bootstrap(tries++);}, 200);
        }
    }

    bootstrap();

    function init(){
        LoadSettingsObj();

        BuildWazebar();

        $('#sidebar').css('height', 'calc(100% - 20px)');

        

        BuildSettingsInterface();
    }

    function BuildWazebar(){
        $('#Wazebar').remove();
        var $Wazebar = $("<div>", {style:"height:20px", id:"Wazebar"});
        $Wazebar.html([
            '<div style="display:inline; margin-left:3px; cursor:pointer;" id="WazeBarSettingsButton"><i class="fa fa-cog" aria-hidden="true"></i></div>',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="Inbox"><a href="https://www.waze.com/forum/ucp.php?i=pm&folder=inbox" target="_blank">Forum Inbox</a></div>',
            WazeBarSettings.scriptsForum ? '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="Scripts"><a href="https://www.waze.com/forum/viewforum.php?f=819" target="_blank">Scripts Forum</a></div>' : '',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="GLR"><a href="https://www.waze.com/forum/viewforum.php?f=943" target="_blank">GLR Forum</a></div>',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="Ohio"><a href="https://www.waze.com/forum/viewforum.php?f=261" target="_blank">OH Forum</a></div>',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;" id="OhioUnlock"><a href="https://www.waze.com/forum/search.php?keywords=Ohio&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search" target="_blank">OH Unlock</a></div>',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;"><a href="https://wazeopedia.waze.com/wiki/USA/USA/Great_Lakes" target="_blank">GLR Wiki</a></div>',
            '<div style="display:inline; padding-right:5px; margin-right:5px; border-right:thin solid grey;"><a href="https://wazeopedia.waze.com/wiki/USA/Ohio" target="_blank">OH Wiki</a></div>',
            '<div style="display:inline;" id="WazebarStatus">NA Server Update: </div>'
        ].join(' '));

        $('.app.container-fluid.show-sidebar').before($Wazebar);

        GetPMCount();
        checkForums();
        setInterval(GetPMCount,60000);
        setInterval(checkForums, 120000);

        GM_xmlhttpRequest({
            method: "GET",
            url: 'https://wazestatus.wordpress.com/category/main/feed',
            onload: ParseStatusFeed
        });

        $('#WazeBarSettingsButton').click(function(){
            $('#WazeBarSettings').css({'visibility':'visible'});
            BuildStatesDiv();
            setChecked('ScriptsForum', WazeBarSettings.scriptsForum);
        });
    }

    function GetPMCount(){
        $.get('https://www.waze.com/forum/ucp.php?i=pm&folder=inbox', function(Inbox){
            if(Inbox.indexOf("Inbox (") != -1){
                var count = Inbox.match(/Inbox \((\d+)\)/)[1];
                $('#PMCount').remove();
                $('#Inbox a').append("<span style='color:red;font-weight:bold;' id='PMCount'> (" + count + ")</span>");
            }
            else
                $('#PMCount').remove();
        });
    }

    function checkForums(){
        if(WazeBarSettings.scriptsForum)
            checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=819", "Scripts", "ScriptsCount"); //Scripts
        checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=943", "GLR", "GLRCount"); //GLR
        checkUnreadTopics("https://www.waze.com/forum/viewforum.php?f=261", "Ohio", "OhioCount"); //Ohio
        checkUnreadTopics("https://www.waze.com/forum/search.php?fid%5B0%5D=622&sf=titleonly&sr=topics&submit=Search&keywords=Ohio", "OhioUnlock", "OHUnlockCount");
    }

    function checkUnreadTopics(path, parentID, spanID){
        var count = 0;
        $.get(path, function(page){
            var result = page.match(/topic_unread/g);
            count += result? result.length :0;
            result = page.match(/sticky_unread/g);
            count += result? result.length :0;
            result = page.match(/announce_unread/g);
            count += result? result.length :0;

            $('#' + spanID).remove();
            if(count > 0)
                $('#'+parentID+' a').append("<span style='color:red;font-weight:bold;' id='" + spanID + "'> (" + count + ")</span>");
        });

        return count;
    }

    function ParseStatusFeed(data){
        var re = /<title>NA map tiles were successfully updated to:(.*?)<\/title>/;
        var result = data.responseText.match(re)[1].trim();
        $('#WazebarStatus').append(result);
    }

    function BuildSettingsInterface(){
        var $section = $("<div>", {style:"padding:8px 16px", id:"WazeBarSettings"});
        $section.html([
            '<div id="WazeBarSettings" style="visibility:hidden; position:fixed; top:40%; left:50%; width:388px; min-height:150px; z-index:1000; background-color:white; border-width:3px; border-style:solid; border-radius:10px; padding:4px;">',
            '<div>',
            '<input type="checkbox" id="ScriptsForum" /><label for="ScriptsForum">Scripts Forum</label></br>',
            'Region ' + BuildRegionDropdown() + '<input type="checkbox" id="RegionForum"/><label for="RegionForum">Forum</label> <input type="checkbox" id="RegionWiki"/><label for="RegionWiki">Wiki</label>',
            '<div id="WBStates"></div>',
            '</div></br>',//close region div
            '<div style="position: relative; float: right; display: inline-block">', //save/cancel buttons
            '<button id="WBSettingsSave" style="width: 85px;" class="btn btn-primary">Save</button>',
            '<button id="WBSettingsCancel" class="btn btn-default">Cancel</button>',
            '</div>',//end save/cancel buttons
            '</div>'
            ].join(' '));

        $("#WazeMap").append($section.html());

        //Cancel button clicked
        $("#WBSettingsCancel").click(function(){
            $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
        });

        //Save button clicked
        $("#WBSettingsSave").click(function(){
            WazeBarSettings.scriptsForum = isChecked('ScriptsForum');
            SaveSettings();

            BuildWazebar();
            $('#WazeBarSettings').css({'visibility':'hidden'}); //hide the settings window
        });

        //When they change the selected region, build a new state div.
        $('#WBRegions').change(BuildStatesDiv);
    }

    function BuildStatesDiv(){
        //Get the state list for this region
            var selectedItem = $('#WBRegions')[0].options[$('#WBRegions')[0].selectedIndex];
            var states = selectedItem.getAttribute("data-states").split(",");
            var forum = selectedItem.getAttribute("data-forum");
            var wiki = selectedItem.getAttribute("data-wiki");

            var statesHTML = "";
            $('#WBStates').empty();
            for(var i=0;i<states.length;i++){
                statesHTML = states[i] + " <input type='checkbox' id='"+states[i]+"Forum'/><label for='"+states[i]+"Forum'>Forum</label> <input type='checkbox' id='"+states[i]+"Wiki'/><label for='"+states[i]+"Wiki'>Wiki</label> <input type='checkbox' id='"+states[i]+"Unlock'/><label for='"+states[i]+"Unlock'>Unlock</label></br>";
                $('#WBStates').append(statesHTML);
                //Check the forum/wiki/unlock checkboxes if it has been saved
                if(WazeBarSettings.header[states[i]]){
                    if(WazeBarSettings.header[states[i]].forum && WazeBarSettings.header[states[i]].forum !== "")
                        setChecked(states[i] + 'Forum', true);
                    if(WazeBarSettings.header[states[i]].wiki && WazeBarSettings.header[states[i]].wiki !== "")
                        setChecked(states[i] + 'Wiki', true);
                    if(WazeBarSettings.header[states[i]].unlock && WazeBarSettings.header[states[i]].unlock !== "")
                        setChecked(states[i] + 'Unlock', true);
                }

                $('#'+states[i]+'Forum').change(function() {
                    var state = this.id.replace('Forum', '');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked)
                        WazeBarSettings.header[state].forum = States[state].forum;
                    else
                        delete WazeBarSettings.header[state].forum;

                    SaveSettings();
                });
                $('#'+states[i]+'Wiki').change(function() {
                    var state = this.id.replace('Wiki', '');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked)
                        WazeBarSettings.header[state].wiki = States[state].wiki;
                    else
                        delete WazeBarSettings.header[state].wiki;

                    SaveSettings();
                });
                $('#'+states[i]+'Unlock').change(function() {
                    var state = this.id.replace('Unlock', '');
                    if(!WazeBarSettings.header[state])
                        WazeBarSettings.header[state] = {};
                    if(this.checked)
                        WazeBarSettings.header[state].unlock = "https://www.waze.com/forum/search.php?keywords=" + state.replace(' ', '+') + "&terms=all&author=&sv=0&fid%5B%5D=622&sc=0&sf=all&sr=topics&sk=t&sd=d&st=0&ch=300&t=0&submit=Search";
                    else
                        delete WazeBarSettings.header[state].unlock;

                    SaveSettings();
                });
            }
    }

    function BuildRegionDropdown(){
        var $places = $("<div>");
        $places.html([
            '<select id="WBRegions">',
            '<option value="Northwest" data-abbr="NWR" data-states="Alaska,Idaho,Montana,Washington,Oregon,Wyoming" data-forum="https://www.waze.com/forum/viewforum.php?f=565" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Northwest">Northwest</option>',
            '<option value="Southwest" data-abbr="SWR" data-states="Arizona,California,Colorado,Hawaii,Nevada,New Mexico,Utah" data-forum="https://www.waze.com/forum/viewforum.php?f=566" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Southwest">Southwest</option>',
            '<option value="Plains" data-abbr="PLN" data-states="Iowa,Kansas,Minnesota,Missouri,Nebraska,North Dakota,South Dakota" data-forum="https://www.waze.com/forum/viewforum.php?f=567" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Plains">Plains</option>',
            '<option value="South Central" data-abbr="SCR" data-states="Arkansas,Louisiana,Mississippi,Oklahoma,Texas" data-forum="https://www.waze.com/forum/viewforum.php?f=568" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/South_Central">South Central</option>',
            '<option value="Great Lakes" data-abbr="GLR" data-states="Illinois,Indiana,Michigan,Ohio,Wisconsin" data-forum="https://www.waze.com/forum/viewforum.php?f=943" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Great_Lakes">Great Lakes</option>',
            '<option value="South Atlantic" data-abbr="SAT" data-states="Kentucky,North Carolina,South Carolina,Tennessee" data-forum="https://www.waze.com/forum/viewforum.php?f=570" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/South_Atlantic">South Atlantic</option>',
            '<option value="Southeast" data-abbr="SER" data-states="Alabama,Florida,Georgia" data-forum="https://www.waze.com/forum/viewforum.php?f=944" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Southeast">Southeast</option>',
            '<option value="New England" data-abbr="NER" data-states="Connecticut,Maine,Massachusetts,New Hampshire,Rhode Island,Vermont" data-forum="https://www.waze.com/forum/viewforum.php?f=945" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/New_England">New England</option>',
            '<option value="Northeast" data-abbr="NOR" data-states="Delaware,New Jersey,New York,Pennsylvania" data-forum="https://www.waze.com/forum/viewforum.php?f=569" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Northeast">Northeast</option>',
            '<option value="Mid Atlantic" data-abbr="MAR" data-states="District of Columbia,Maryland,Virginia,West Virginia" data-forum="https://www.waze.com/forum/viewforum.php?f=946" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Mid_Atlantic">Mid Atlantic</option>',
            '<option value="Territories" data-abbr="ATR" data-states="Puerto Rico,US Virgin Islands,South Pacific Territories" data-forum="https://www.waze.com/forum/viewforum.php?f=953" data-wiki="https://wazeopedia.waze.com/wiki/USA/USA/Territories">Territories</option>'
            ].join(' '));

        return $places.html();
    }

    var States = {};
    States.Alabama = {forum:"https://www.waze.com/forum/viewforum.php?f=213", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"AL"};
    States.Alaska = {forum:"https://www.waze.com/forum/viewforum.php?f=254", wiki:"https://wazeopedia.waze.com/wiki/USA/Alaska", abbr:"AK"};
    States.Arizona = {forum:"https://www.waze.com/forum/viewforum.php?f=652", wiki:"https://wazeopedia.waze.com/wiki/USA/Arizona", abbr:"AZ"};
    States.Arkansas = {forum:"https://www.waze.com/forum/viewforum.php?f=598", wiki:"https://wazeopedia.waze.com/wiki/USA/Arkansas", abbr:"AR"};
    States.California = {forum:"https://www.waze.com/forum/viewforum.php?f=251", wiki:"https://wazeopedia.waze.com/wiki/USA/California", abbr:"CA"};
    States.Colorado = {forum:"https://www.waze.com/forum/viewforum.php?f=654", wiki:"https://wazeopedia.waze.com/wiki/USA/Colorado", abbr:"CO"};
    States.Connecticut = {forum:"https://www.waze.com/forum/viewforum.php?f=247", wiki:"https://wazeopedia.waze.com/wiki/USA/Connecticut", abbr:"CT"};
    States.Delaware = {forum:"https://www.waze.com/forum/viewforum.php?f=575", wiki:"https://wazeopedia.waze.com/wiki/USA/Delaware", abbr:"DE"};
    States["District of Columbia"] = {forum:"https://www.waze.com/forum/viewforum.php?f=258", wiki:"https://wazeopedia.waze.com/wiki/USA/District_of_Columbia", abbr:"DC"};
    States.Florida = {forum:"https://www.waze.com/forum/viewforum.php?f=193", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"FL"};
    States.Georgia = {forum:"https://www.waze.com/forum/viewforum.php?f=214", wiki:"https://wazeopedia.waze.com/wiki/USA/Southeast", abbr:"GA"};
    States.Hawaii = {forum:"https://www.waze.com/forum/viewforum.php?f=305", wiki:"https://wazeopedia.waze.com/wiki/USA/Hawaii", abbr:"HA"};
    States.Idaho = {forum:"https://www.waze.com/forum/viewforum.php?f=648", wiki:"https://wazeopedia.waze.com/wiki/USA/Idaho", abbr:"ID"};
    States.Illinois = {forum:"https://www.waze.com/forum/viewforum.php?f=253", wiki:"https://wazeopedia.waze.com/wiki/USA/Illinois", abbr:"IL"};
    States.Indiana = {forum:"https://www.waze.com/forum/viewforum.php?f=631", wiki:"https://wazeopedia.waze.com/wiki/USA/Indiana", abbr:"IN"};
    States.Iowa = {forum:"https://www.waze.com/forum/viewforum.php?f=632", wiki:"https://wazeopedia.waze.com/wiki/USA/Iowa", abbr:"IA"};
    States.Kansas = {forum:"https://www.waze.com/forum/viewforum.php?f=628", wiki:"https://wazeopedia.waze.com/wiki/USA/Kansas", abbr:"KS"};
    States.Kentucky = {forum:"https://www.waze.com/forum/viewforum.php?f=571", wiki:"https://wazeopedia.waze.com/wiki/USA/Kentucky", abbr:"KY"};
    States.Louisiana = {forum:"https://www.waze.com/forum/viewforum.php?f=594", wiki:"https://wazeopedia.waze.com/wiki/USA/Louisiana", abbr:"LA"};
    States.Maine = {forum:"https://www.waze.com/forum/viewforum.php?f=583", wiki:"https://wazeopedia.waze.com/wiki/USA/Maine", abbr:"ME"};
    States.Maryland = {forum:"https://www.waze.com/forum/viewforum.php?f=246", wiki:"https://wazeopedia.waze.com/wiki/USA/Maryland", abbr:"MD"};
    States.Massachusetts = {forum:"https://www.waze.com/forum/viewforum.php?f=618", wiki:"https://wazeopedia.waze.com/wiki/USA/Massachusetts", abbr:"MA"};
    States.Michigan = {forum:"https://www.waze.com/forum/viewforum.php?f=630", wiki:"https://wazeopedia.waze.com/wiki/USA/Michigan", abbr:"MI"};
    States.Minnesota = {forum:"https://www.waze.com/forum/viewforum.php?f=259", wiki:"https://wazeopedia.waze.com/wiki/USA/Minnesota", abbr:"MN"};
    States.Mississippi = {forum:"https://www.waze.com/forum/viewforum.php?f=596", wiki:"https://wazeopedia.waze.com/wiki/USA/Mississippi", abbr:"MS"};
    States.Missouri = {forum:"https://www.waze.com/forum/viewforum.php?f=414", wiki:"https://wazeopedia.waze.com/wiki/USA/Missouri", abbr:"MO"};
    States.Montana = {forum:"https://www.waze.com/forum/viewforum.php?f=649", wiki:"https://wazeopedia.waze.com/wiki/USA/Montana", abbr:"MT"};
    States.Nebraska = {forum:"https://www.waze.com/forum/viewforum.php?f=634", wiki:"https://wazeopedia.waze.com/wiki/USA/Nebraska", abbr:"NE"};
    States.Nevada = {forum:"https://www.waze.com/forum/viewforum.php?f=651", wiki:"https://wazeopedia.waze.com/wiki/USA/Nevada", abbr:"NV"};
    States["New Hampshire"] = {forum:"https://www.waze.com/forum/viewforum.php?f=585", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Hampshire", abbr:"NH"};
    States["New Jersey"] = {forum:"https://www.waze.com/forum/viewforum.php?f=249", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Jersey", abbr:"NJ"};
    States["New Mexico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=653", wiki:"https://wazeopedia.waze.com/wiki/USA/New_Mexico", abbr:"NM"};
    States["New York"] = {forum:"https://www.waze.com/forum/viewforum.php?f=250", wiki:"https://wazeopedia.waze.com/wiki/USA/New_York", abbr:"NY"};
    States["North Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=255", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Carolina", abbr:"NC"};
    States["North Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=624", wiki:"https://wazeopedia.waze.com/wiki/USA/North_Dakota", abbr:"ND"};
    States.Ohio = {forum:"https://www.waze.com/forum/viewforum.php?f=261", wiki:"https://wazeopedia.waze.com/wiki/USA/Ohio", abbr:"OH"};
    States.Oklahoma = {forum:"https://www.waze.com/forum/viewforum.php?f=600", wiki:"https://wazeopedia.waze.com/wiki/USA/Oklahoma", abbr:"OK"};
    States.Oregon = {forum:"https://www.waze.com/forum/viewforum.php?f=647", wiki:"https://wazeopedia.waze.com/wiki/USA/Oregon", abbr:"OR"};
    States.Pennsylvania = {forum:"https://www.waze.com/forum/viewforum.php?f=215", wiki:"https://wazeopedia.waze.com/wiki/USA/Pennsylvania", abbr:"PA"};
    States["Rhode Island"] = {forum:"https://www.waze.com/forum/viewforum.php?f=577", wiki:"https://wazeopedia.waze.com/wiki/USA/Rhode_Island", abbr:"RI"};
    States["South Carolina"] = {forum:"https://www.waze.com/forum/viewforum.php?f=256", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Carolina", abbr:"SC"};
    States["South Dakota"] = {forum:"https://www.waze.com/forum/viewforum.php?f=626", wiki:"https://wazeopedia.waze.com/wiki/USA/South_Dakota", abbr:"SD"};
    States.Tennessee = {forum:"https://www.waze.com/forum/viewforum.php?f=210", wiki:"https://wazeopedia.waze.com/wiki/USA/Tennessee", abbr:"TN"};
    States.Texas = {forum:"https://www.waze.com/forum/viewforum.php?f=237", wiki:"https://wazeopedia.waze.com/wiki/USA/Texas", abbr:"TX"};
    States.Utah = {forum:"https://www.waze.com/forum/viewforum.php?f=364", wiki:"https://wazeopedia.waze.com/wiki/USA/Utah", abbr:"UT"};
    States.Vermont = {forum:"https://www.waze.com/forum/viewforum.php?f=587", wiki:"https://wazeopedia.waze.com/wiki/USA/Vermont", abbr:"VT"};
    States.Virginia = {forum:"https://www.waze.com/forum/viewforum.php?f=580", wiki:"https://wazeopedia.waze.com/wiki/USA/Virginia", abbr:"VA"};
    States.Washington = {forum:"https://www.waze.com/forum/viewforum.php?f=201", wiki:"https://wazeopedia.waze.com/wiki/USA/Washington", abbr:"WA"};
    States["West Virginia"] = {forum:"https://www.waze.com/forum/viewforum.php?f=582", wiki:"https://wazeopedia.waze.com/wiki/USA/West_Virginia", abbr:"WV"};
    States.Wisconsin = {forum:"https://www.waze.com/forum/viewforum.php?f=387", wiki:"https://wazeopedia.waze.com/wiki/USA/Wisconsin", abbr:"WI"};
    States.Wyoming = {forum:"https://www.waze.com/forum/viewforum.php?f=650", wiki:"https://wazeopedia.waze.com/wiki/USA/Wyoming", abbr:"WY"};
    States["Puerto Rico"] = {forum:"https://www.waze.com/forum/viewforum.php?f=202", wiki:"https://wazeopedia.waze.com/wiki/USA/Puerto_Rico", abbr:"PR"};
    States["US Virgin Islands"] = {forum:"https://www.waze.com/forum/viewforum.php?f=677", wiki:"https://wazeopedia.waze.com/wiki/USA/Virgin_Islands", abbr:""};
    States["South Pacific Territories"] = {forum:"https://www.waze.com/forum/viewforum.php?f=954", wiki:"", abbr:""};

    //console.log(States);
    //delete States.Alabama;
    //console.log(States);

    function isChecked(checkboxId) {
        return $('#' + checkboxId).is(':checked');
    }

    function setChecked(checkboxId, checked) {
        $('#' + checkboxId).prop('checked', checked);
    }

    function LoadSettingsObj() {
        var loadedSettings;
        try{
            loadedSettings = $.parseJSON(localStorage.getItem("Wazebar_Settings"));
        }
        catch(err){
            loadedSettings = null;
        }

        var defaultSettings = {
            inboxInterval: 5,
            forumInterval: 2,
            scriptsForum: false,
            header: {}
        };
        WazeBarSettings = loadedSettings ? loadedSettings : defaultSettings;
        for (var prop in defaultSettings) {
            if (!WazeBarSettings.hasOwnProperty(prop))
                WazeBarSettings[prop] = defaultSettings[prop];
        }
    }

    function SaveSettings() {
        if (localStorage) {
            /*
            Object.keys(obj).forEach(function(key,index) {
            // key: the name of the object key
            // index: the ordinal position of the key within the object
            });
            */
            var localsettings = {
                inboxInterval: WazeBarSettings.inboxInterval,
                forumInterval: WazeBarSettings.forumInterval,
                scriptsForum: WazeBarSettings.scriptsForum,
                header: WazeBarSettings.header
            };

            localStorage.setItem("Wazebar_Settings", JSON.stringify(localsettings));
        }
    }
})();