TW Quests+

Detailed list of quest lines for The West Classic

// ==UserScript==
// @name         TW Quests+
// @namespace    Johnny
// @author       Johnny
// @version      1.1
// @description  Detailed list of quest lines for The West Classic
// @match        https://classic.the-west.net/game.php*
// @grant        none
// ==/UserScript==

window.QuestsPlus = {
  quests: [{
    group: 'Introduction',
    lvl: 1,
    quests: [{
      employer: 'barkeeper',
      title: 'Introduction',
      req: {txt: ['None']},
      rew: {txt: ['1 XP']},
    },{
      employer: 'barkeeper',
      title: 'Clothing',
      req: {item: [['Gray rags', 'body/mini/tatter_grey', 1]]},
      rew: {item: [['Whiskey', 'yield/whiskey', 1]]}
    },{
      employer: 'sheriff',
      title: 'Bottle exchange',
      req: {item: [['Whiskey', 'yield/whiskey', 1]]},
      rew: {item: [['Empty bottle', 'yield/empty_bottle', 1]], txt: ['$5']},
    },{
      employer: 'barkeeper',
      title: 'Pick tobacco leaves',
      req: {item: [['Tobacco', 'yield/tabacco', 1]]},
      rew: {txt: ['+3 skill points', '$10']},
    },{
      employer: 'barkeeper',
      title: 'Raise Vigor',
      req: {img: ['img.php?type=skill_box&subtype=punch:normal:normal&value=2']},
      rew: {txt: ['3 XP']},
    },{
      employer: 'barkeeper',
      title: 'Fresh sugar',
      req: {item: [['Sugar', 'yield/sugar', 1]]},
      rew: {txt: ['$5']},
    },{
      employer: 'barkeeper',
      title: 'Experience',
      req: {item: [['Cotton', 'yield/cotton', 1]]},
      rew: {txt: ['$8']},
    },{
      employer: 'barkeeper',
      title: 'Advancing levels',
      req: {txt: ['Level 2']},
      rew: {txt: ['$15']},
    },{
      employer: 'barkeeper',
      title: 'Wages',
      req: {txt: ['$40']},
      rew: {item: [['Gray cap', 'head/slouch_cap_grey', 1]]},
    },{
      employer: 'barkeeper',
      title: 'The bouncer',
      req: {txt: ['Beat The double-faced Jules (duel)']},
      rew: {txt: ['$60']},
    }]
  },{
    group: 'Manhunt',
    lvl: 2,
    quests: [{
      employer: 'sheriff',
      title: 'The search',
      req: {item: [['Poster', 'yield/poster', 2]]},
      rew: {item: [['Broken clay jug', 'right_arm/mini/clayjug', 1]]},
    },{
      employer: 'sheriff',
      title: 'The petty henchman',
      req: {txt: ['Beat Sidekick (duel)']},
      rew: {txt: ['30 XP']},
    },{
      employer: 'sheriff',
      title: 'The search (Part 2)',
      req: {item: [['Newspaper *The Western Star*', 'yield/newspaper', 3]]},
      rew: {txt: ['35 XP']},
    },{
      employer: 'sheriff',
      title: 'The mean henchman',
      req: {txt: ['Beat Henchman (duel)']},
      rew: {item: [['Handcuffs', 'yield/nippers', 1]]},
    }]
  },{
    group: 'Erik\'s Flight',
    lvl: 3,
    quests: [{
      employer: 'lady',
      title: 'Rascality',
      req: {item: [['Ham', 'yield/ham', 1]]},
      rew: {txt: ['20 XP']},
    },{
      employer: 'lady',
      title: 'Cotton',
      req: {item: [['Cotton', 'yield/cotton', 2]]},
      rew: {txt: ['25 XP']},
    },{
      employer: 'lady',
      title: 'Field work',
      req: {item: [['Grain', 'yield/cereals', 2]]},
      rew: {txt: ['30 XP']},
    },{
      employer: 'lady',
      title: 'Erik',
      req: {item: [['Poster', 'yield/poster', 3]]},
      rew: {txt: ['20 XP'], item: [['Red Poncho', 'body/mini/poncho_red', 1]]},
    }]
  },{
    group: 'Fire heart',
    lvl: 5,
    quests: [{
      employer: 'indian',
      title: 'Tobacco',
      req: {item: [['Tobacco', 'yield/tabacco', 4]]},
      rew: {txt: ['10 XP']},
    },{
      employer: 'indian',
      title: 'Raven feather',
      req: {item: [['Raven feather', 'yield/feather', 1]]},
      rew: {txt: ['15 XP']},
    },{
      employer: 'indian',
      title: 'Beans',
      req: {item: [['Beans', 'yield/beans', 3]]},
      rew: {txt: ['20 XP']},
    },{
      employer: 'indian',
      title: 'Sugar',
      req: {item: [['Sugar', 'yield/sugar', 5]]},
      rew: {txt: ['25 XP']},
    },{
      employer: 'indian',
      title: 'Turkey',
      req: {item: [['Turkey', 'yield/turkey', 1]]},
      rew: {txt: ['30 XP']},
    },{
      employer: 'indian',
      title: 'The last ingredient',
      req: {txt: ['One of your hairs']},
      rew: {txt: ['+4 Skill points towards health']},
    },{
      employer: 'indian',
      title: 'Just a dream?',
      req: {item: [['Berries', 'yield/berrys', 5]]},
      rew: {txt: ['4 days premium More Energy', '40 XP']},
    }]
  },{
    group: 'The cattle herd',
    lvl: 8,
    quests: [{
      employer: 'sheriff',
      title: 'Repair fences',
      req: {item: [['Hammer', 'yield/hammer', 1]]},
      rew: {txt: ['1 skill point towards Repairing']},
    },{
      employer: 'sheriff',
      title: 'The donkey',
      req: {item: [['Donkey', 'animal/donkey', 1]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'sheriff',
      title: 'Corn for the donkey',
      req: {item: [['Corn', 'yield/corn', 3]]},
      rew: {txt: ['20 XP']},
    },{
      employer: 'sheriff',
      title: 'The herd',
      req: {item: [['T-Bone-Steak', 'yield/beef', 2]]},
      rew: {txt: ['90 XP']},
    },{
      employer: 'sheriff',
      title: 'Branding',
      req: {item: [['Horn of a cow', 'yield/horn', 1]]},
      rew: {txt: ['$75']},
    },{
      employer: 'sheriff',
      title: 'barbed wire',
      req: {item: [['barbed wire', 'yield/fence', 2]]},
      rew: {item: [['Brown cotton shoes', 'foot/light_brown', 1]]},
    }],
  },{
    group: 'Henry\'s Birthday',
    lvl: 11,
    quests: [{
      employer: 'lady',
      title: 'Back pain',
      req: {item: [['Wool', 'yield/shearings', 3]]},
      rew: {txt: ['$50']},
    },{
      employer: 'indian',
      title: 'Moccasins',
      req: {item: [['Leather', 'yield/leather', 2]]},
      rew: {txt: ['$50']},
    },{
      employer: 'sheriff',
      title: 'Union flag',
      req: {item: [['Union flag', 'yield/flag_north', 1]]},
      rew: {txt: ['180 XP']},
    },{
      employer: 'barkeeper',
      title: 'Another gift',
      req: {txt: ['None']},
      rew: {item: [['Gray bowler hat', 'head/bowler_grey', 1]]},
    }],
  },{
    group: 'Waupee\'s Grandfather',
    lvl: 14,
    quests: [{
      employer: 'indian',
      title: 'Green smoke',
      req: {img: ['img.php?type=skill_box&subtype=tough:normal:normal&value=9']},
      rew: {txt: ['45 XP']},
    },{
      employer: 'indian',
      title: 'The golden hawk',
      req: {item: [['Leather', 'yield/leather', 3], ['Trout', 'yield/trout', 3]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'indian',
      title: 'The Thievery',
      req: {item: [['Golden Falk', 'yield/falcon', 1]]},
      rew: {txt: ['70 XP', 'Able to reuse skills and attributes']},
    },{
      employer: 'barkeeper',
      title: 'Re-Thievery',
      req: {txt: ['Beat Thief (duel)']},
      rew: {txt: ['50 XP', '$30']},
    },{
      employer: 'lady',
      title: 'Re-Thievery',
      req: {item: [['Blue bandana', 'neck/band_blue', 1]], txt: ['$170']},
      rew: {item: [['Golden Falk', 'yield/falcon', 1]]},
    }],
  },{
    group: 'Duel tactics',
    lvl: 15,
    quests: [{
      employer: 'sheriff',
      title: 'Paddy the bulldog',
      req: {txt: ['Beat Paddy (duel)']},
      rew: {txt: ['50 XP']},
    },{
      employer: 'sheriff',
      title: 'Matthew the Snake',
      req: {txt: ['Beat Matthew (duel)']},
      rew: {txt: ['4 days Dueling Premium', '30 XP']},
    }],
  },{
    group: 'Unforgiven',
    lvl: 15,
    quests: [{
      employer: 'barkeeper',
      title: 'The rowdy',
      req: {item: [['Fool\'s gold', 'yield/copper_pyrites', 1]]},
      rew: {txt: ['50 XP']},
    },{
      employer: 'barkeeper',
      title: 'The right outfit',
      req: {item: [['Black headband', 'head/band_black', 1]]},
      rew: {txt: ['40 XP']},
    },{
      employer: 'barkeeper',
      title: 'Gathering in the forest',
      req: {item: [['Wood', 'yield/planks', 1]]},
      rew: {txt: ['30 XP']},
    },{
      employer: 'barkeeper',
      title: '3 henchmen',
      req: {txt: ['Beat Henchman (duel)']},
      rew: {txt: ['60 XP']},
    },{
      employer: 'lady',
      title: '3 henchmen',
      req: {item: [['Berries', 'yield/berrys', 3]], txt: ['$200']},
      rew: {txt: ['50 XP']},
    },{
      employer: 'barkeeper',
      title: 'Gathering in the forest',
      req: {item: [['Wood', 'yield/planks', 8]]},
      rew: {txt: ['25 XP']},
    },{
      employer: 'barkeeper',
      title: 'Unforgiven',
      req: {txt: ['Beat Unforgiven (duel)']},
      rew: {item: [['Green shirt', 'body/mini/shirt_green', 1]]}
    }],
  },{
    group: 'Optimization of profits ',
    lvl: 18,
    quests: [{
      employer: 'lady',
      title: 'Starvation wages',
      req: {item: [['Newspaper *The Western Star*', 'yield/newspaper', 1]]},
      rew: {txt: ['20 XP', '3 days premium Higher income']},
    },{
      employer: 'lady',
      title: 'Easy money',
      req: {item: [['Newspaper *The Western Star*', 'yield/newspaper', 3]]},
      rew: {txt: ['60 XP']},
    }]
  },{
    group: 'Well organized',
    lvl: 18,
    quests: [{
      employer: 'barkeeper',
      title: 'Juicy steaks',
      req: {item: [['T-Bone-Steak', 'yield/beef', 5]]},
      rew: {txt: ['50 XP', '7 days premium Automation']},
    },{
      employer: 'barkeeper',
      title: 'Trimmings',
      req: {item: [['Grain', 'yield/cereals', 3], ['Beans', 'yield/beans', 3], ['Corn', 'yield/corn', 3], ['Glass of water', 'yield/water', 3]]},
      rew: {txt: ['200 XP']},
    }],
  },{
    group: 'Gemstones',
    lvl: 20,
    quests: [{
      employer: 'lady',
      title: 'Precious rocks on chains',
      req: {item: [['Blue Indian necklace', 'neck/indian_chain_blue', 1], ['Green Indian necklace', 'neck/indian_chain_green', 1]]},
      rew: {txt: ['20 XP']},
    },{
      employer: 'lady',
      title: 'Precious rocks from the water',
      req: {item: [['Gemstones', 'yield/gems', 2]]},
      rew: {txt: ['25 XP']},
    },{
      employer: 'lady',
      title: 'Precious rocks from the ground',
      req: {txt: ['Beat Cemetery watchman  (duel)']},
      rew: {txt: ['30 XP']},
    },{
      employer: 'lady',
      title: 'Precious rocks from the grave',
      req: {item: [['Spade', 'yield/spade', 1]]},
      rew: {item: [['Metal cross', 'neck/cross_bronze', 1]], txt: ['35 XP']},
    }],
  },{
    group: 'Bob',
    lvl: 23,
    quests: [{
      employer: 'barkeeper',
      title: 'Hard work',
      req: {item: [['Glass of water', 'yield/water', 1]]},
      rew: {txt: ['$50']},
    },{
      employer: 'barkeeper',
      title: 'Wood supply',
      req: {item: [['Wood', 'yield/planks', 10]]},
      rew: {txt: ['$350']},
    },{
      employer: 'barkeeper',
      title: 'Disassembly',
      req: {txt: ['Beat Indian (duel)']},
      rew: {txt: ['60 XP']},
    },{
      employer: 'barkeeper',
      title: 'Granite mining',
      req: {item: [['Granite blocks', 'yield/stone', 5]]},
      rew: {txt: ['$300']},
    },{
      employer: 'barkeeper',
      title: 'Bridge construction',
      req: {item: [['Sledge hammer', 'yield/sledgehammer', 1]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'barkeeper',
      title: 'The railroad station',
      req: {item: [['Train ticket', 'yield/ticket', 1]]},
      rew: {item: [['Gray work shoes', 'foot/working_grey', 1]]},
    }],
  },{
    group: 'The decision',
    lvl: 25,
    quests: [{
      employer: 'sheriff',
      title: 'Breaking in horses',
      req: {item: [['Horseshoe', 'yield/horseshoe', 4]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'sheriff',
      title: 'Break a leg!',
      req: {item: [['Coal', 'yield/coal', 5]]},
      rew: {txt: ['80 XP']},
    },{
      employer: 'sheriff',
      title: 'fat loot',
      req: {item: [['Beaver skin', 'yield/beaver', 5]]},
      rew: {txt: ['$500']},
    },{
      employer: 'indian',
      title: 'Sabotage',
      req: {item: [['Beaver trap', 'yield/trap', 5]]},
      rew: {txt: ['100 XP'], item: [['Calumet', 'yield/pipe', 1]]},
    }],
  },{
    group: 'Clothes make the man',
    lvl: 27,
    quests: [{
        employer: 'lady',
        title: 'Roll of cloth',
        req: {item: [['Roll of cloth', 'yield/fabric', 1]]},
        rew: {txt: ['$22']},
    },{
      employer: 'lady',
      title: 'Buttons',
      req: {item: [['Horn of a cow', 'yield/horn', 1]]},
      rew: {txt: ['$78']},
    },{
      employer: 'lady',
      title: 'Brooch',
      req: {item: [['Roll with wire', 'yield/string', 1]]},
      rew: {txt: ['2 skill points towards Fine motor skills']},
    },{
      employer: 'lady',
      title: 'Stage fright',
      req: {item: [['Glass of water', 'yield/water', 1]]},
      rew: {txt: ['40 XP']},
    },{
      employer: 'barkeeper',
      title: 'Beer',
      req: {txt: ['$20']},
      rew: {item: [['Beer', 'yield/beer', 1], ['Beer', 'yield/beer', 1]]},
    },{
      employer: 'lady',
      title: 'Good deal',
      req: {item: [['Beer', 'yield/beer', 2]]},
      rew: {item: [['Yellow checkered shirt', 'body/mini/plaid_shirt_yellow', 1]]},
    }],
  },{
    group: 'Wild horses',
    lvl: 30,
    quests: [{
      employer: 'sheriff',
      title: 'John is hungry',
      req: {item: [['Warm meal', 'yield/meal', 2]]},
      rew: {txt: ['$20']},
    },{
      employer: 'sheriff',
      title: 'A lot of wood',
      req: {item: [['Wood', 'yield/planks', 24]]},
      rew: {txt: ['$300']},
    },{
      employer: 'sheriff',
      title: 'Catching horses',
      req: {item: [['Lasso', 'yield/rope', 5]]},
      rew: {txt: ['140 XP', '$150']},
    },{
      employer: 'sheriff',
      title: 'Horse thief',
      req: {txt: ['Beat Horse Thief (duel)']},
      rew: {item: [['Mustang', 'animal/mustang', 1]]},
    }],
  },{
    group: 'The hunt',
    lvl: 33,
    quests: [{
      employer: 'indian',
      title: 'Turkey hunt',
      req: {item: [['Turkey', 'yield/turkey', 2]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'indian',
      title: 'Catching salmon',
      req: {item: [['Salmon', 'yield/grund', 3]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'indian',
      title: 'Coyote hunt',
      req: {item: [['Coyote tooth', 'yield/coyote', 1]]},
      rew: {txt: ['60 XP']},
    },{
      employer: 'indian',
      title: 'Buffalo hunt',
      req: {item: [['Buffalo skin', 'yield/buffalo', 1]]},
      rew: {txt: ['120 XP'], item: [['Gold Indian necklace', 'neck/indian_chain_fine', 1]]},
    }],
  },{
    group: 'The Dalton clan',
    lvl: 36,
    quests: [{
      employer: 'sheriff',
      title: 'Tool box',
      req: {item: [['Tool box', 'yield/toolbox', 1]]},
      rew: {txt: ['80 XP']},
    },{
      employer: 'sheriff',
      title: 'Dynamite',
      req: {item: [['Dynamite', 'yield/dynamite', 2]]},
      rew: {txt: ['120 XP']},
    },{
      employer: 'sheriff',
      title: 'Ambush at the bridge',
      req: {item: [['Train ticket', 'yield/ticket', 1]]},
      rew: {txt: ['150 XP']},
    },{
      employer: 'sheriff',
      title: 'Lots of coffins',
      req: {item: [['Planer', 'yield/slicer', 2]]},
      rew: {txt: ['$500']},
    }],
  },{
    group: 'Three Rivers',
    lvl: 39,
    quests: [{
      employer: 'indian',
      title: 'poacher',
      req: {txt: ['Beat poacher (duel)']},
      rew: {txt: ['70 XP']},
    },{
      employer: 'indian',
      title: 'Beaver traps',
      req: {item: [['Beaver trap', 'yield/trap', 2]]},
      rew: {txt: ['90 XP']},
    },{
      employer: 'indian',
      title: 'Gold search',
      req: {item: [['Map', 'yield/map', 1]]},
      rew: {txt: ['110 XP']},
    },{
      employer: 'indian',
      title: 'Gold Mining',
      req: {item: [['Fool\'s gold', 'yield/copper_pyrites', 15]]},
      rew: {txt: ['150 XP']},
    },{
      employer: 'indian',
      title: 'Decision 1:  Gold trade',
      req: {item: [['Roll of cloth', 'yield/fabric', 3]]},
      rew: {txt: ['$800']},
    },{
      employer: 'lady',
      title: 'Decision 2:  Offer',
      req: {txt: ['None']},
      rew: {txt: ['$1400']},
    },{
      employer: 'lady',
      title: 'Decision 2:  Commercialization',
      req: {item: [['Flag', 'yield/flag', 5]]},
      rew: {txt: ['$700']},
    }],
  },{
    group: 'Henry Walker\'s Special',
    lvl: 42,
    quests: [{
      employer: 'barkeeper',
      title: 'Flavor diversity',
      req: {item: [['Berries', 'yield/berrys', 5], ['Glass of water', 'yield/water', 4], ['Sugar', 'yield/sugar', 3]]},
      rew: {txt: ['200 XP']},
    },{
      employer: 'barkeeper',
      title: 'The salt in the soup',
      req: {item: [['Cigars', 'yield/cigar', 1]]},
      rew: {txt: ['100 XP']},
    },{
      employer: 'barkeeper',
      title: 'Filtering booze',
      req: {item: [['Coal', 'yield/coal', 1]]},
      rew: {txt: ['+3 skill points towards Toughness', '$200']},
    }],
  },{
    group: 'Transporting prisoners',
    lvl: 45,
    quests: [{
      employer: 'sheriff',
      title: 'Handcuffs',
      req: {item: [['Handcuffs', 'yield/nippers', 1]]},
      rew: {txt: ['50 XP']},
    },{
      employer: 'sheriff',
      title: 'Coachman with strange habits',
      req: {item: [['Brown cotton shoes', 'foot/light_brown', 1]]},
      rew: {txt: ['$200']},
    },{
      employer: 'sheriff',
      title: 'Speech is silver',
      req: {item: [['Silver', 'yield/silver', 3]]},
      rew: {txt: ['150 XP']},
    },{
      employer: 'lady',
      title: 'Decision 1:  Eavesdropping',
      req: {item: [['Roll with wire', 'yield/string', 5]]},
      rew: {txt: ['$500']},
    },{
      employer: 'lady',
      title: 'Decision 1:   Blackmail',
      req: {txt: ['$1000']},
      rew: {txt: ['$3000']},
    },{
      employer: 'sheriff',
      title: 'Decision 2:  Rescue mission',
      req: {txt: ['Beat Prison guard (duel)']},
      rew: {txt: ['500 XP']},
    }],
  },{
    group: 'Kate\'s wedding band',
    lvl: 46,
    quests: [{
      employer: 'sheriff',
      title: 'The unknown thief.',
      req: {item: [['Kate\'s ring', 'yield/kates_ring', 1]]},
      rew: {txt: ['800 XP']},
    },{
      employer: 'sheriff',
      title: 'The thief',
      req: {txt: ['Beat Thief (duel)']},
      rew: {txt: ['$1200', '600 XP']},
    },{
      employer: 'sheriff',
      title: 'Silver mining',
      req: {item: [['Silver', 'yield/silver', 5]]},
      rew: {txt: ['300 XP']},
    },{
      employer: 'sheriff',
      title: 'The dealer',
      req: {txt: ['Beat Dealer (duel)']},
      rew: {item: [['Kate\'s ring', 'yield/kates_ring', 1]], txt: ['$1500']},
    }]
  },{
    group: 'John moves out',
    lvl: 49,
    quests: [{
      employer: 'sheriff',
      title: 'Hotel Mama',
      req: {item: [['Granite blocks', 'yield/stone', 4]]},
      rew: {txt: ['200 XP'], item: [['Corn', 'yield/corn', 1]]},
    },{
      employer: 'sheriff',
      title: 'There is much to do',
      req: {item: [['Saw', 'yield/saw', 1]]},
      rew: {txt: ['100 XP'], item: [['Corn', 'yield/corn', 1]]},
    },{
      employer: 'sheriff',
      title: 'Online',
      req: {item: [['Roll with wire', 'yield/string', 1]]},
      rew: {txt: ['150 XP'], item: [['Berries', 'yield/berrys', 1]]},
    },{
      employer: 'sheriff',
      title: 'The way to a man\'s heart is through his stomach.',
      req: {item: [['Jug', 'yield/pitcher', 1]]},
      rew: {txt: ['100 XP'], item: [['Warm meal', 'yield/meal', 1], ['Turkey', 'yield/turkey', 1]]},
    },{
      employer: 'sheriff',
      title: 'Progress',
      req: {item: [['Tool box', 'yield/toolbox', 1]]},
      rew: {item: [['Machete', 'right_arm/mini/machete', 1], ['Pepperbox revolver', 'right_arm/mini/pepperbox', 1]]},
    },{
      employer: 'sheriff',
      title: 'A note',
      req: {txt: ['Beat Burglar (duel)']},
      rew: {item: [['Piece of a note (Part 2)', 'yield/paper2', 1]]},
    }]
  }],

  windowName: 'QuestsPlus',

  init: function() {
    QuestsPlus.addCss();
    QuestsPlus.addMenuButton();
  },

  addCss: function() {
    let css = '\
      #menu_quests_plus a { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAAAZCAMAAADOidZyAAABNVBMVEUyIBoxHxp0YUYwHhgyIRs0IRs+LCMtHBY2Ix3///89KyJpWECCb1FfTjr+9euUfVp9aUpJNyo8KiBsXEQ4Jh8sGhQqGBL19PSchWKAbE6GclRALSNnVj24r6eXgV9TQTH/+vKMg36jimf47ePw6OHXzsaspJyjmpGOd1N3ZEhGPTHOxbx+dm+PeViLdFNSQz5jUzxfUDo+Kx7w7+7l29OrkW1waGJVTUdbSjbz8vLh3t3u5NqWjoZ6cW2HcU9lVkBaTjtKQjdWSTVQRDPy8fDr6unZ1dTLxsW9t7bFvLVnWVZ5Z0xvXkZbTDdKOzZHNzLn5eSBd3N6alL7+/vRzcubkpCFfXdeWFNhVFA/NSz39vbFwL+3sK6vqKaknJpvY189ODPCvbumlHqcjXinkG93a2dpW0nEx1d7AAAF30lEQVRIx72XZ1vbMBDHJS9FiRM7kN0kkL0DKXvvTYFCWd37+3+E/k9yEtrngZc9bHHncfr57jTCbJuxkG2nkibjPDAYN02TM+Y4zkT4VdiZ0MoTMzwxEXbCYcd5hUNb/xiv/nrheWGO8V/EefNmkM9HIrOzkcnJyGw+An1rsLvrsLARX47GjSlucXw15ybCYFn0jwkBPQSxtTIydRsisWwbL6FlPIQXGDOFyWBYlsV4Ag9MGfHochwA+Uk/m3V9383l/JaPw/VbeQAkjChLLE+F8MbYF9cOAETOGNPKyASfSApGQrkCuRDCJF1fI4NxUBDW1HLCihrOwGhtFjOZzHqjsd797fc2+56Xaw0c9sqIimgcrs0nvrilHDwnuAsKJiDKFiaxiWH/DIalv4JDjUc5APJZt5n5Xq+tVSqVtZONrWazWC66EQKITyWi9HVjX3CiHMAjXLx4j0EBEAVOR4BOMugS57jNookppGDSbXrlQnV6ejqGo7q+28yUi7lJVYRRxJqox74CBwJOxYv3XoJDvrgQ9GYURRjJ9r06+q+VFu9OYrH5xbynAVCEyD9KUDnXPZKoZAtr5tvKyvElqaBUbi0Y9CAeQSnoy6pvJWIMB69ETX7jBOBlatOxwk57d3evXlkr7GxmFEDCeK3KT5hP/YFbZfBy7mpm5urKgWpbuMLGHwsM03w40pcp8kpMkAW0QAkhG3TPAoCbaVSn55f2zt3+9XatWrtvZTz3HDWgAUxO/sxxN4xa67PscmtD3ppce6LoqAfU3VBIyuAytek0CAhc0zJuQyyqagVQrMdi9a9GP1POnDUqte42hsGkArAx5kIIWWgIrLtDF2JVXnBxKQ8tLiXHyfjEp4OrW8aWjlb2P1xIiNYQfA1A4Jo2yYVmAwlGgd8rxGKlnWxxoVzOrFfnS+2c1wfAhPGa4ZNsPDcCRs+pZCqJMLyXCc5CMs3QuU0A7LN825W3bFXOnMp3TMoQtC/yXQpdp9OpVEqDc07xt4WKJeILgFaTAPY2ywsLC2UF4Hq5SFADVOd4CQHANIfTojaEq++lCVfyxlKdSynElXxMyFXrQB6+TTBbSq3xUEkqKWlw+iA7JIIZNWUjBX4TKVjf6xPAQqNaK7WvewTgGK9NPMdsnBQBxnDaSkCAFDAelgc2A4CFNLAbCblhv1aknFtkAAg0iEqBBqdUJIWtJ1R4NhzU3nosVtjLlX98//mzUOl0d7I9Vw3D1zSyhoIXyIvKIZKBgIvjDXksxI00w4gAP5BhVWeJLx/lnElxSSxCE5B0WjCmwWkyQgYo//QnaCLqdSux+SW/WOg0fnRiJ/e7bi8bUQDMUpVHp0ZQECqMl3NzD7dSntqIxWmDav6TvHuQh/ydPJ2Rh6l96WhtFAEC1wJHekZGHmge6F13MAy23Nr0/Mn8fKEdyXn+bJCCJKpHnYqZKppALFgXxyvvj/bfcvHlYPWURkL401z6w4V1ebyfPpphG+lvgcYYLSKmBlctzmBe06OgTyGoNDbqa9OxtU73sdXzsgQQzITM4gRMw8akKGgfllrRHj5SqyJvcQgUmMQK0chsuDZqcD2R0oQ0nAnz2U3vd2OtWqkVatW1TmGp3SrSYjReC576o7qBKCL+0r3nwImW4+tta7QWuH0vs3130ul0Tgr1eqO09Hit14JgNTTJufaKZrjO0cr+0r2X4PAw+EarYa7pZTLbS4sb3Y3Fpfu7UunrIOcCwAn2A9QJWghlUinkVKCkkimtjMzxYvEinPKn9wNUhJvNDGb/Nzvtdnu7vbN4/zjp+xG1IeG0I9I1o2uWKISKPYPwoTIyTUVrq96Aa2pyfCzegxD8KDLjHREIPM9zjfPz1rW/t/N1z/CN2fGe0OJjX7oDxsJhtffFqZSRqRttkq4tSFCKMPQNyGhPuHWWdV06zs58/+zsfHbWMPLbBPA/BAAD2g/TEcjW1tZge+AMfxdwHKOFliqaIhkKxB4qIxNv6BaNtv41oDy1nefkDyhwo7eHOEw7AAAAAElFTkSuQmCC"); cursor: pointer; } \
      #window_' + QuestsPlus.windowName + '_content { overflow-y: auto; } \
      #window_' + QuestsPlus.windowName + '_content .questlog_header { cursor: pointer; position: relative; width: 669px; line-height: 21px; padding: 4px 6px; } \
      #window_' + QuestsPlus.windowName + '_content .questlog_header span { font-weight: normal; padding-left: 10px; } \
      #window_' + QuestsPlus.windowName + '_content .questlog_header img { position: absolute; top: 2px; right: 3px; padding: 0; } \
      #window_' + QuestsPlus.windowName + '_content table { display: none; border-spacing: 0; border-collapse: collapse; width: 683px; border-right: 1px solid #666; } \
      #window_' + QuestsPlus.windowName + '_content td, #window_' + QuestsPlus.windowName + '_content th { padding: 4px 6px; background-image: url(../images/border/table/bright.png); border-bottom: 1px solid #666; border-left: 1px solid #666; line-height: 20px; vertical-align: middle; text-align: center; } \
      #window_' + QuestsPlus.windowName + '_content td:nth-of-type(2) { text-align: left; } \
      #window_' + QuestsPlus.windowName + '_content th { background-image: url(../images/border/table/dark.png); } \
      #window_' + QuestsPlus.windowName + '_content .bag_item { display: inline-block; margin: 0 auto; float: none; width: 47px; height: 47px; background-size: cover; position: relative; } \
      #window_' + QuestsPlus.windowName + '_content .bag_item img { width: 47px; height: 47px; } \
      #window_' + QuestsPlus.windowName + '_content .bag_item .count { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAATCAMAAAC0hZ1zAAAAwFBMVEUAAACvr69wcHBeXl6Li4tSUlJmZmZfX1+Dg4N7e3t1dXViYmI5OTlJSUlCQkKHh4d9fX0nJydUVFSOjo59fX18fHxGRkY2NjaOjo5wcHBnZ2dVVVWysrKTk5Nqampvb29tbW06OjpnZ2dzc3M2NjY9PT16enp3d3eEhIR9fX0vLy9cXFxxcXFlZWUzMzMyMjJRUVFNTU1GRkYZGRmBgYFVVVUrKysnJycjIyNiYmJYWFhJSUlCQkIfHx+enp6Ojo5EkFSAAAAAHnRSTlMABgbRz87Ny25uG/n49PTz8/PQx8fHx8dubm5tGxtpsIjwAAABPUlEQVQoz1WRh27DMAxEmWane29RlqzYimzHMzvt//9VTzaKpk8UAfLAowARUe/l/nrH9TxirbWdR5G19ubx7YzA5yDOTRjghFmIjBsE+1SOZ5gbbDfVegkWHuRsuYRe5MMzmurNsUyVUAghWCIj0rzIy3d6KKsySrCNOZHQpGRWMmHnyifS4UowC4ERSIK7QEflF6SyAJXwph0SJWrJLvNi24GbBCzbKbhrt/Cib7TOoDVJJYy1W5EKA8EKnuh3OvoC6MaLhv/AKICsdeIOrdi+BtEBGyyReutIGdPu+Qcs2DZrOi8Ozove89cUpZrX5pbGTbETSbewA76s42+xeaZJ3qQczUHkX5HoCIWNv+JF9Uq9/r5IbRzXEHFqCwWkq6qPH/0YhVkATHDCujrezQj0JqNLA040czWcYu4HGJBFQzh8ViwAAAAASUVORK5CYII="); width: 28px; height: 19px; position: absolute; bottom: -5px; left: -6px; color: #fff; font-weight: bold; } \
    ';
    let style = document.createElement('style');
    style.setAttribute('type', 'text/css');
    style.innerHTML = css;
    document.getElementsByTagName('head')[0].appendChild(style);
  },

  addMenuButton: function() {
    let button = document.createElement('li');
    button.id = 'menu_quests_plus';
    let buttonLink = document.createElement('a');
    buttonLink.onclick = QuestsPlus.openWindow;
    buttonLink.innerHTML = '<span>Quests+</span>';
    button.appendChild(buttonLink);
    let saloonMenu = document.getElementById('menu_saloon');
    saloonMenu.parentNode.insertBefore(button, saloonMenu.nextSibling);
  },

  openWindow: function() {
    if (!AjaxWindow.windows[QuestsPlus.windowName]) {
      let win = new Element('div', {
        'id': 'window_' + QuestsPlus.windowName,
        'class': 'window'
      });

      AjaxWindow.windows[QuestsPlus.windowName] = win;

      let html = '\
        <div class="window_borders"> \
        <h2 id="window_' + QuestsPlus.windowName + '_title" class="window_title"><span>Quests+</span></h2> \
        <a href="javascript:AjaxWindow.closeAll();" class="window_closeall"></a><a href="javascript:AjaxWindow.toggleSize(\'' + QuestsPlus.windowName + '\');" class="window_minimize"></a><a href="javascript:AjaxWindow.close(\'' + QuestsPlus.windowName + '\');" class="window_close"></a> \
        <div id="window_' + QuestsPlus.windowName + '_content" class="window_content"></div> \
        </div> \
      ';
      win.setHTML(html);
      win.bringToTop();
      win.injectInside('windows');
      win.centerLeft();

      let win_title = $('window_' + QuestsPlus.windowName + '_title');
      win_title.addEvent('dblclick', function () {
        win.centerLeft();
        win.setStyle('top', 133);
      });
      win.makeDraggable({
        handle: win_title,
        onStart: function () {
        },
        onComplete: function () {
        }.bind(AjaxWindow)
      });
      win.addEvent('mousedown', win.bringToTop.bind(win, []));
      win_title.addEvent('mousedown', win.bringToTop.bind(win, []));

      let win_content = $('window_' + QuestsPlus.windowName + '_content');
      QuestsPlus.clear(win_content);
      win_content.appendChild(QuestsPlus.getQuests());
    } else {
      AjaxWindow.maximize(QuestsPlus.windowName);
      AjaxWindow.windows[QuestsPlus.windowName].bringToTop();
    }
  },

  getQuests: function() {
    let div = document.createElement('div');

    for (let group of QuestsPlus.quests) {
      let wrap = document.createElement('div');
      wrap.className = 'wrap';

      let header = document.createElement('div');
      header.className = 'questlog_header';
      header.innerHTML = group.group + ' - Level ' + group.lvl + ' <span>(Quests: ' + group.quests.length + ')</span> <img class="toggle" src="https://classic.the-west.net/img.php?type=button&subtype=normal&value=plus">';
      header.addEventListener('click', function() {
        let plus = 'https://classic.the-west.net/img.php?type=button&subtype=normal&value=plus';
        let minus = 'https://classic.the-west.net/img.php?type=button&subtype=normal&value=minus';
        let toggle = this.querySelector('.toggle');
        toggle.src = (toggle.src === plus ? minus : plus);

        let table = this.parentNode.querySelector('table');
        table.style.display = (table.style.display === 'table' ? 'none' : 'table');
      }, false);
      wrap.appendChild(header);

      let th = document.createElement('tr');
      th.innerHTML = '\
        <th style="width:60px">Employer</th> \
        <th>Title</th> \
        <th style="width:200px">Requirement</th> \
        <th style="width:200px">Reward</th> \
      ';

      let table = document.createElement('table');
      table.appendChild(th);
      for (let quest of group.quests) {
        let tr = document.createElement('tr');

        let tdEmployer = document.createElement('td');
        tdEmployer.innerHTML = '<img src="images/quest/employer/' + quest.employer + '.png" width="50" height="50">';
        tr.appendChild(tdEmployer);

        let tdTitle = document.createElement('td');
        tdTitle.textContent = quest.title;
        tr.appendChild(tdTitle);

        let tdReq = document.createElement('td');
        tdReq.appendChild(QuestsPlus.format(quest.req));
        tr.appendChild(tdReq);

        let tdRew = document.createElement('td');
        tdRew.appendChild(QuestsPlus.format(quest.rew));
        tr.appendChild(tdRew);

        table.appendChild(tr);
      }
      wrap.appendChild(table);

      div.appendChild(wrap);
    }

    return div;
  },

  format: function(data) {
    let div = document.createElement('div');

    if (data.txt) {
      for (let txt of data.txt) {
        let el = document.createElement('div');
        el.textContent = txt;
        div.appendChild(el);
      }
    }

    if (data.img) {
      for (let img of data.img) {
        let el = document.createElement('img');
        el.src = img;
        div.appendChild(el);
      }
    }

    if (data.item) {
      for (let item of data.item) {
        let item_div = document.createElement('div');
        item_div.className = 'bag_item';
        let item_img = document.createElement('img');
        item_img.src = 'images/items/' + item[1] + '.png';
        item_div.appendChild(item_img);
        item_div.addMousePopup(new MousePopup(item[0], 250, {opacity: 0.9}));

        if (item[2] > 1) {
          let count_div = document.createElement('div');
          count_div.className = 'count';
          count_div.textContent = item[2];
          item_div.appendChild(count_div);
        }

        div.appendChild(item_div);
      }
    }

    return div;
  },

  clear: function(el) {
    while (el.firstChild) el.removeChild(el.firstChild);
  },
};

QuestsPlus.init();