Untitled diff
    function addSettings() {
    function addSettings() {
        if ($("#settingsButton").length)
        if ($("#settingsButton").length)
            return;
            return;
        // Add the required CSS
        // Add the required CSS
        AddCss("\
        AddCss("\
            #settingsButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 0px; top: 0px; padding: 3px; z-index: 1000;}\
            #settingsButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 0px; top: 0px; padding: 3px; z-index: 1000;}\
            #pauseButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 23px; top: 0px; padding: 3px; z-index: 1000;}\
            #pauseButton{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); display: block; position: fixed; overflow: auto; right: 23px; top: 0px; padding: 3px; z-index: 1000;}\
            #settingsPanel{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); color: rgb(0, 0, 0); position: fixed; overflow: auto; right: 0px; top: 0px; width: 350px;max-height:750px;font: 12px sans-serif; text-align: left; display: block; z-index: 1000;}\
            #settingsPanel{border-bottom: 1px solid rgb(102, 102, 102); border-right: 1px solid rgb(102, 102, 102); background: none repeat scroll 0% 0% rgb(238, 238, 238); color: rgb(0, 0, 0); position: fixed; overflow: auto; right: 0px; top: 0px; width: 550px;max-height:750px;font: 12px sans-serif; text-align: left; display: block; z-index: 1000;}\
            #settings_title{font-weight: bolder; background: none repeat scroll 0% 0% rgb(204, 204, 204); border-bottom: 1px solid rgb(102, 102, 102); padding: 3px;}\
            #settings_title{font-weight: bolder; background: none repeat scroll 0% 0% rgb(204, 204, 204); border-bottom: 1px solid rgb(102, 102, 102); padding: 3px;}\
            #settingsPanelButtonContainer {background: none repeat scroll 0% 0% rgb(204, 204, 204); border-top: 1px solid rgb(102, 102, 102);padding: 3px;text-align:center} \
            #settingsPanelButtonContainer {background: none repeat scroll 0% 0% rgb(204, 204, 204); border-top: 1px solid rgb(102, 102, 102);padding: 3px;text-align:center} \
            #settingsPanel label.purple {font-weight:bold;color:#7C37F6}\
            #settingsPanel label.purple {font-weight:bold;color:#7C37F6}\
            #settingsPanel label.blue {font-weight:bold;color:#007EFF}\
            #settingsPanel label.blue {font-weight:bold;color:#007EFF}\
            #settingsPanel label.green {font-weight:bold;color:#8AFF00}\
            #settingsPanel label.green {font-weight:bold;color:#8AFF00}\
            #settingsPanel label.white {font-weight:bold;color:#FFFFFF}\
            #settingsPanel label.white {font-weight:bold;color:#FFFFFF}\
            #charPanel {width:340px;max-height:400px;overflow:auto;display:block;padding:3px;}\
            #charPanel {width:98%;max-height:400px;overflow:auto;display:block;padding:3px;}\
            #charPanel div div ul li { display: inline-block; width: 48%; }\
            .inventory-container {float: left; clear: none; width: 270px; margin-right: 20px;}\
            .inventory-container {float: left; clear: none; width: 270px; margin-right: 20px;}\
            #prinfopane {position: fixed; top: 5px; left: 200px; display: block; z-index: 1000;}\
            #prinfopane {position: fixed; top: 5px; left: 200px; display: block; z-index: 1000;}\
            .prh3 {padding: 5px; height: auto!important; width: auto!important; background-color: rgba(0, 0, 0, 0.7);}\
            .prh3 {padding: 5px; height: auto!important; width: auto!important; background-color: rgba(0, 0, 0, 0.7);}\
        ");
        ");
        // Add settings panel to page body
        // Add settings panel to page body
        $("body").append(
        $("body").append(
            '<div id="settingsPanel">\
            '<div id="settingsPanel">\
                <div id="settings_title">\
                <div id="settings_title">\
                    <img src='+image_prefs+' style="float: left; vertical-align: text-bottom;"\>\
                    <img src='+image_prefs+' style="float: left; vertical-align: text-bottom;"\>\
                    <img id="settings_close" src='+image_close+' title="Click to hide preferences" style="float: right; vertical-align: text-bottom; cursor: pointer; display: block;"\>\
                    <img id="settings_close" src='+image_close+' title="Click to hide preferences" style="float: right; vertical-align: text-bottom; cursor: pointer; display: block;"\>\
                    <span style="margin:3px">Settings</span>\
                    <span style="margin:3px">Settings</span>\
                </div>\
                </div>\
                <form style="margin: 0px; padding: 0px">\
                <form style="margin: 0px; padding: 0px">\
                    <ul style="list-style: none outside none; max-height: 500px; overflow: auto; margin: 3px; padding: 0px;">\
                    <ul style="list-style: none outside none; max-height: 500px; overflow: auto; margin: 3px; padding: 0px;">\
                    </ul>\
                    </ul>\
                </form>\
                </form>\
            </div>'
            </div>'
        );
        );
        // Add each setting input
        // Add each setting input
        var settingsList = $("#settingsPanel form ul");
        var settingsList = $("#settingsPanel form ul");
        for (var i = 0; i < settingnames.length; i++) {
        for (var i = 0; i < settingnames.length; i++) {
            var id = 'settings_' + settingnames[i].name;
            var id = 'settings_' + settingnames[i].name;
            var indent = countLeadingSpaces(settingnames[i].title) * 2;
            var indent = countLeadingSpaces(settingnames[i].title) * 2;
            switch(settingnames[i].type) {
            switch(settingnames[i].type) {
                case "checkbox":
                case "checkbox":
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em"><input style="margin:4px" name="'+id+'" id="'+id+'" type="checkbox" /><label class="'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label></li>')
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em; width: 48%; display: inline-block;"><input style="margin:4px" name="'+id+'" id="'+id+'" type="checkbox" /><label class="'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label></li>')
                    $('#'+id).prop('checked', settings[settingnames[i].name]);
                    $('#'+id).prop('checked', settings[settingnames[i].name]);
                    break;
                    break;
                case "text":
                case "text":
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em"><label class="'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label><input style="margin:4px" name="'+id+'" id="'+id+'" type="text" /></li>')
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em; width: 48%; display: inline-block;"<label class="'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label><input style="margin:4px" name="'+id+'" id="'+id+'" type="text" /></li>')
                    $('#'+id).val(settings[settingnames[i].name]);
                    $('#'+id).val(settings[settingnames[i].name]);
                    break;
                    break;
                case "password":
                case "password":
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em"><label class="'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label><input style="margin:4px" name="'+id+'" id="'+id+'" type="password" /></li>')
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em; width: 48%; display: inline-block;"'+settingnames[i].class+'" for="'+id+'">'+settingnames[i].title+'</label><input style="margin:4px" name="'+id+'" id="'+id+'" type="password" /></li>')
                    $('#'+id).val(settings[settingnames[i].name]);
                    $('#'+id).val(settings[settingnames[i].name]);
                    break;
                    break;
                case "select":
                case "select":
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em"><label class="'+settingnames[i].class+'" style="padding-left:4px" for="'+id+'">'+settingnames[i].title+'</label><select style="margin:4px" name="'+id+'" id="'+id+'" /></li>')
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em; width: 48%; display: inline-block;"'+settingnames[i].class+'" style="padding-left:4px" for="'+id+'">'+settingnames[i].title+'</label><select style="margin:4px" name="'+id+'" id="'+id+'" /></li>')
                    var options = settingnames[i].opts;
                    var options = settingnames[i].opts;
                    var select = $('#'+id);
                    var select = $('#'+id);
                    for (var j = 0; j < options.length; j++) {
                    for (var j = 0; j < options.length; j++) {
                        if (settings[settingnames[i].name] == options[j].path)
                        if (settings[settingnames[i].name] == options[j].path)
                            select.append('<option value="'+options[j].path+'" selected="selected">'+options[j].name+'</option>');
                            select.append('<option value="'+options[j].path+'" selected="selected">'+options[j].name+'</option>');
                        else 
                        else 
                            select.append('<option value="'+options[j].path+'">'+options[j].name+'</option>');
                            select.append('<option value="'+options[j].path+'">'+options[j].name+'</option>');
                    }
                    }
                    break;
                    break;
                case "label":
                case "label":
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em;><label class="'+settingnames[i].class+'">'+settingnames[i].title+'</label></li>')
                    settingsList.append('<li title="'+settingnames[i].tooltip+'" style="margin-left:'+indent+'em;><label class="'+settingnames[i].class+'">'+settingnames[i].title+'</label></li>')
                    break; 
                    break; 
            }
            }
        }
        }
        // Add character settings for each char
        // Add character settings for each char
        var addText = '\
        var addText = '\
            <script type="text/javascript">\
            <script type="text/javascript">\
            <!--\
            <!--\
            function click_position(obj)\
            function click_position(obj)\
            {\
            {\
                change_position(obj.value)\
                change_position(obj.value)\
            }\
            }\
            \
            \
            function change_position(val)\
            function change_position(val)\
            {\
            {\
                for (var i = 0; i < '+settings["charcount"]+'; i++)\
                for (var i = 0; i < '+settings["charcount"]+'; i++)\
                {\
                {\
                    document.getElementById("charContainer"+i).style.display="none";\
                    document.getElementById("charContainer"+i).style.display="none";\
                }\
                }\
                document.getElementById("charContainer"+val).style.display="block";\
                document.getElementById("charContainer"+val).style.display="block";\
            }\
            }\
            //-->\
            //-->\
            </script>\
            </script>\
            <div id="charPanel">\
            <div id="charPanel">\
                <div style="width:150px;float:left;max-height:400px;overflow:auto;">\
                <div style="width:30%;float:left;max-height:400px;overflow:auto;">\
            ';
            ';
        for (var i = 0; i < settings["charcount"]; i++) {
        for (var i = 0; i < settings["charcount"]; i++) {
            addText += '\
            addText += '\
                    <div><input autocomplete="off" type="radio" name="radio_position" onclick="click_position(this)" id="value_'+i+'" value="'+i+'" /><label for="value_'+i+'">'+settings["nw_charname"+i]+'</label></div>\
                    <div><input autocomplete="off" type="radio" name="radio_position" onclick="click_position(this)" id="value_'+i+'" value="'+i+'" /><label for="value_'+i+'">'+settings["nw_charname"+i]+'</label></div>\
                ';
                ';
        }
        }
        addText += '\
        addText += '\
                </div>\
                </div>\
                <div style="width:170px;float:right;">\
                <div style="width:69%;float:right;">\
            ';
            ';
        for (var i = 0; i < settings["charcount"]; i++) {
        for (var i = 0; i < settings["charcount"]; i++) {
            addText += '\
            addText += '\
                    <div id="charContainer'+i+'" style="display:none">\
                    <div id="charContainer'+i+'" style="display:none">\
                        <ul style="list-style: none outside none; max-height: 500px; overflow: auto;">\
                        <ul style="list-style: none outside none; max-height: 500px; overflow: auto;">\
                ';
                ';
            var k = 0 + (i*charSettings.length/settings["charcount"]);
            var k = 0 + (i*charSettings.length/settings["charcount"]);
            var id = 'settings_' + charSettings[k].name;
            var id = 'settings_' + charSettings[k].name;
            addText += '<li title="'+charSettings[k].tooltip+'"><input style="margin:4px" name="'+id+'" id="'+id+'" type="text" /></li>';
            addText += '<li title="'+charSettings[k].tooltip+'"><input style="margin:4px" name="'+id+'" id="'+id+'" type="text" /></li>';
            for (var j = 1; j < (charSettings.length/settings["charcount"]); j++) {
            for (var j = 1; j < (charSettings.length/settings["charcount"]); j++) {
                k = j + (i*charSettings.length/settings["charcount"]);
                k = j + (i*charSettings.length/settings["charcount"]);
                if (charSettings[k].type == 'void') { continue; }
                if (charSettings[k].type == 'void') { continue; }
                id = 'settings_' + charSettings[k].name;
                id = 'settings_' + charSettings[k].name;
                addText += '<li title="'+charSettings[k].tooltip+'"><input maxlength="2" size="1" style="margin:4px" name="'+id+'" id="'+id+'" type="text" /><label class="'+charSettings[k].class+'" for="'+id+'">'+charSettings[k].title+'</label></li>';
                addText += '<li title="'+charSettings[k].tooltip+'"><input maxlength="2" size="1" style="margin:4px" name="'+id+'" id="'+id+'" type="text" /><label class="'+charSettings[k].class+'" for="'+id+'">'+charSettings[k].title+'</label></li>';
            }
            }
            addText += '</ul>'
            addText += '</ul>'
            // Add task list save buttons
            // Add task list save buttons
            addText += '\
            addText += '\
                    <input id="save_tasklist'+i+'" type="button" value="Save Tasks" title="Saves current task list in script to this character">\
                    <input id="save_tasklist'+i+'" type="button" value="Save Tasks" title="Saves current task list in script to this character">\
                    <input id="clear_tasklist'+i+'" type="button" value="Clear Tasks" title="Clears the saved task list for this character to use defaults">\
                    <input id="clear_tasklist'+i+'" type="button" value="Clear Tasks" title="Clears the saved task list for this character to use defaults">\
                    </div>';
                    </div>';
        }
        }
        addText += '\
        addText += '\
                </div>\
                </div>\
            </div>\
            </div>\
            ';
            ';
        $("#settingsPanel form").append(addText);
        $("#settingsPanel form").append(addText);
        // Add values to character input fields
        // Add values to character input fields
        for (var i = 0; i < charSettings.length; i++) {
        for (var i = 0; i < charSettings.length; i++) {
            id = 'settings_' + charSettings[i].name;
            id = 'settings_' + charSettings[i].name;
            $('#'+id).val(settings[charSettings[i].name]);
            $('#'+id).val(settings[charSettings[i].name]);
        }
        }
        // Add code to tasklist buttons
        // Add code to tasklist buttons
        for (var i = 0; i < settings["charcount"]; i++) {
        for (var i = 0; i < settings["charcount"]; i++) {
            $("#save_tasklist"+i).click(function() {
            $("#save_tasklist"+i).click(function() {
                var num = this.id.replace("save_tasklist", "");
                var num = this.id.replace("save_tasklist", "");
                charSettings["tasklist"+num] = tasklist;
                charSettings["tasklist"+num] = tasklist;
                setTimeout(function() { GM_setValue("tasklist"+num, JSON.stringify(defaultTasklist)); }, 0);
                setTimeout(function() { GM_setValue("tasklist"+num, JSON.stringify(defaultTasklist)); }, 0);
            });
            });
            $("#clear_tasklist"+i).click(function() {
            $("#clear_tasklist"+i).click(function() {
                var num = this.id.replace("clear_tasklist", "");
                var num = this.id.replace("clear_tasklist", "");
                charSettings["tasklist"+num] = "";
                charSettings["tasklist"+num] = "";
                setTimeout(function() { GM_setValue("tasklist"+num, ""); }, 0);
                setTimeout(function() { GM_setValue("tasklist"+num, ""); }, 0);
            });
            });
        }
        }
        // Add save/cancel buttons to panel
        // Add save/cancel buttons to panel
        $("#settingsPanel form").append('\
        $("#settingsPanel form").append('\
            <div id="settingsPanelButtonContainer">\
            <div id="settingsPanelButtonContainer">\
                <input id="settings_save" type="button" value="Save and Apply">\
                <input id="settings_save" type="button" value="Save and Apply">\
                <input id="settings_close" type="button" value="Close">\
                <input id="settings_close" type="button" value="Close">\
            </div>');
            </div>');
        // Add open settings button to page
        // Add open settings button to page
        $("body").append('<div id="settingsButton"><img src="'+image_prefs+'" title="Click to show preferences" style="cursor: pointer; display: block;"></div>');
        $("body").append('<div id="settingsButton"><img src="'+image_prefs+'" title="Click to show preferences" style="cursor: pointer; display: block;"></div>');
        // Add pause button to page
        // Add pause button to page
        $("body").append('<div id="pauseButton"><img src="'+(settings["paused"]?image_play:image_pause)+'" title="Click to '+(settings["paused"]?"resume":"pause")+' task script" style="cursor: pointer; display: block;"></div>');
        $("body").append('<div id="pauseButton"><img src="'+(settings["paused"]?image_play:image_pause)+'" title="Click to '+(settings["paused"]?"resume":"pause")+' task script" style="cursor: pointer; display: block;"></div>');
        // Add info pane
        // Add info pane
        $("body").append("<div id='prinfopane' class='header-newrelease'>");
        $("body").append("<div id='prinfopane' class='header-newrelease'>");
        // Add the javascript
        // Add the javascript
        $("#settingsPanel").hide();
        $("#settingsPanel").hide();
        $("#settingsButton").click(function() {
        $("#settingsButton").click(function() {
            $("#settingsButton").hide();
            $("#settingsButton").hide();
            $("#pauseButton").hide();
            $("#pauseButton").hide();
            $("#settingsPanel").show();
            $("#settingsPanel").show();
        });
        });
        $("#settings_close,settings_cancel").click(function() {
        $("#settings_close,settings_cancel").click(function() {
            $("#settingsButton").show();
            $("#settingsButton").show();
            $("#pauseButton").show();
            $("#pauseButton").show();
            $("#settingsPanel").hide();
            $("#settingsPanel").hide();
        });
        });
        $("#pauseButton").click(function() {
        $("#pauseButton").click(function() {
            settings["paused"] = !settings["paused"]
            settings["paused"] = !settings["paused"]
            setTimeout(function() { GM_setValue("paused", settings["paused"]); }, 0);
            setTimeout(function() { GM_setValue("paused", settings["paused"]); }, 0);
            $("#settings_paused").prop("checked", settings["paused"]);
            $("#settings_paused").prop("checked", settings["paused"]);
            $("#pauseButton img").attr("src",(settings["paused"]?image_play:image_pause));
            $("#pauseButton img").attr("src",(settings["paused"]?image_play:image_pause));
            $("#pauseButton img").attr("title","Click to "+(settings["paused"]?"resume":"pause")+" task script");
            $("#pauseButton img").attr("title","Click to "+(settings["paused"]?"resume":"pause")+" task script");
        });
        });
        // Use setTimeout to workaround permission issues when calling GM functions from main window
        // Use setTimeout to workaround permission issues when calling GM functions from main window
        $("#settings_save").click(function() { setTimeout(function() { SaveSettings();}, 0)});
        $("#settings_save").click(function() { setTimeout(function() { SaveSettings();}, 0)});
    }
    }