// Requires:
// - common.js

// If Ronza is to be ignored, mh_stat_lcoations_keys_no_ronza.js must be included before this file.

////////////////
// Maps & Keys //
////////////////

// _M_ Quick lookups for cross-references
var _M_NONE=0, _M_WHISKER=1, _M_GGT=2, _M_LAB=3, _M_DIGBY=4, _M_T_MOZ=5, _M_S_FUROMA=6, _M_BAZAAR=7,
    _M_R_FUROMA=8, _M_R_MOZ=9, _M_KEEPER=10, _M_AR=11, _M_LAGOON=12, _M_SHIP=13, _M_KIT=14, _M_VALOUR=15, _M_BALACK=16;
var maps_raw = [
// map/key name, title_req, enabled
  ["None",                        _R_NONE,        1],
  ["Whisker Woods Map",           _R_JOURNEYMAN,  1],
  ["Gnarled Tree Map",            _R_MASTER,      1],
  ["Burroughs Laboratory Map",    _R_MASTER,      1],
  ["Key to the Town of Digby",    _R_MASTER,      1],
  ["Tattered Mousoleum Map",      _R_MASTER,      1],
  ["Shredded Furoma Map",         _R_GRANDMASTER, 1],
  ["Bazaar Ticket",               _R_GRANDMASTER, 1],
  ["Furoma Map Stitch",           _R_GRANDMASTER, 1],
  ["Mousoleum Restoration Patch", _R_LEGENDARY,   1],
  ["Keeper's Candle",             _R_LEGENDARY,   1],
  ["Enable Acolyte Realm Travel", _R_LEGENDARY,   1],
  ["Map of the Lagoon",           _R_GRANDMASTER, 1],
  ["Ship (Rodentia)",             _R_LEGENDARY,   1],
  ["Ocean Navigation Kit",        _R_LEGENDARY,   1],
  ["Valour Map",                  _R_APPRENTICE,  1],
  ["Balack's Cove Map",           _R_KNIGHT,      1]
];

if (INCLUDE_RONZA != null && INCLUDE_RONZA == true) {
  var _M_RONZA = maps_raw.length; // = last_index + 1
  // Append Ronza to the end of the map/key list
  maps_raw.push(["Ronza is back!", _R_NONE, 1]);
}

var n_maps=maps_raw.length;
var maps=new Array(n_maps);
var map_title_req=new Array(n_maps);
var map_enabled=new Array(n_maps);
for (i=0; i<n_maps; i++) {
  maps[i]=maps_raw[i][0];
  map_title_req[i]=maps_raw[i][1];
  map_enabled[i]=maps_raw[i][2];
}

/////////////
// Locations //
/////////////

// _A_ Quick lookups for cross-references
var _A_NONE=0, _A_GNAWNIA=1, _A_WHISKER=2, _A_BURROUGHS=3, _A_FUROMA=4, _A_BRISTLE=5, _A_RODENTIA=6, _A_TI=7, _A_VALOUR=8, _A_OTHER=9;
var areas=["", "Gnawnia", "Whisker Woods", "Burroughs", "Furoma", "Bristle Woods", "Rodentia", "Tribal Isles", "Valour", "Other"];

// _L_ Quick lookups for cross-references
var _L_NONE=0,_L_MEADOW=1,  _L_GNAWNIA=2, _L_WINDMILL=3, _L_HARBOUR=4, _L_MTN=5, _L_KINGS_GAUNTLET=6, _L_CC=7, _L_GGT=8, _L_LAGOON=9,
    _L_LAB=10, _L_DIGBY=11, _L_MOZ=12, _L_BAZAAR=13, _L_TRG=14, _L_DOJO=15, _L_MEDI=16, _L_PINN=17, _L_CAT=18, _L_FG=19, _L_AR=20,
    _L_SSH=21, _L_CCLAWED=22, _L_ELUB=23, _L_NERG=24, _L_DERR=25, _L_JDREAD=26, _L_DRACANO=27, _L_BALACK=28; //, _L_COMET=29;

// Add new locations to the bottom
var locations_raw=[
// ID, Name, Area, title_req, map_req, penalty free
  [0,"Select : ",                 _A_NONE,      _R_NONE,        [_M_NONE],                 0],
  [1,"Meadow",                    _A_GNAWNIA,   _R_NOVICE,      [_M_NONE],                 1],
  [2,"Town of Gnawnia",           _A_GNAWNIA,   _R_RECRUIT,     [_M_NONE],                 1],
  [3,"Windmill",         		  _A_GNAWNIA,   _R_APPRENTICE,  [_M_NONE],                 1],
  [4,"Harbour",                   _A_GNAWNIA,   _R_INITIATE,    [_M_NONE],                 0],
  [5,"Mountain",                  _A_GNAWNIA,   _R_JOURNEYMAN,  [_M_NONE],                 0],
  [6,"King's Gauntlet",           _A_VALOUR,    _R_APPRENTICE,  [_M_VALOUR],               0],
  [7,"Calm Clearing",             _A_WHISKER,   _R_JOURNEYMAN,  [_M_WHISKER],              0],
  [8,"Great Gnarled Tree",        _A_WHISKER,   _R_MASTER,      [_M_GGT],                  0],
  [9,"Lagoon",                    _A_WHISKER,   _R_GRANDMASTER, [_M_LAGOON],               0],
  [10,"Laboratory",               _A_BURROUGHS, _R_MASTER,      [_M_LAB],                  0],
  [11,"Town of Digby",            _A_BURROUGHS, _R_MASTER,      [_M_DIGBY],                1],
  [12,"Mousoleum",                _A_BURROUGHS, _R_MASTER,      [_M_T_MOZ,_M_R_MOZ],       0],
  [13,"Bazaar",                   _A_BURROUGHS, _R_GRANDMASTER, [_M_BAZAAR],               0],
  [14,"Training Grounds",         _A_FUROMA,    _R_GRANDMASTER, [_M_S_FUROMA,_M_R_FUROMA], 0],
  [15,"Dojo",                     _A_FUROMA,    _R_GRANDMASTER, [_M_R_FUROMA],             0],
  [16,"Meditation Room",          _A_FUROMA,    _R_GRANDMASTER, [_M_R_FUROMA],             0],
  [17,"Pinnacle Chamber",         _A_FUROMA,    _R_GRANDMASTER, [_M_R_FUROMA],             0],
  [18,"Catacombs",                _A_BRISTLE,   _R_LEGENDARY,   [_M_R_MOZ],                0],
  [19,"Forbidden Grove",          _A_BRISTLE,   _R_LEGENDARY,   [_M_KEEPER],               0],
  [20,"Acolyte Realm",            _A_BRISTLE,   _R_LEGENDARY,   [_M_AR],                   0],
  [21,"S.S. Huntington II",       _A_RODENTIA,  _R_LEGENDARY,   [_M_SHIP],                 0],
  [22,"Cape Clawed",              _A_TI,        _R_LEGENDARY,   [_M_KIT],                  0],
  [23,"Elub Shore",               _A_TI,        _R_LEGENDARY,   [_M_KIT],                  0],
  [24,"Nerg Plains",              _A_TI,        _R_LEGENDARY,   [_M_KIT],                  0],
  [25,"Derr Dunes",               _A_TI,        _R_LEGENDARY,   [_M_KIT],                  0],
  [26,"Jungle of Dread",          _A_TI,        _R_HERO,        [_M_KIT],                  0],
  [27,"Dracano",                  _A_TI,        _R_KNIGHT,      [_M_KIT],                  0],
  [28,"Balack's Cove",            _A_TI,        _R_KNIGHT,      [_M_BALACK],               0],
 // [29,"Festive Comet",            _A_OTHER,     _R_NOVICE,      [_M_NONE],                 1]
];

// This is how we decide the order after. We keep this alphabetical.
var locations_order=[];

if (INCLUDE_RONZA != null && INCLUDE_RONZA == true) {
  var _L_RONZA = locations_raw.length; // = last_index + 1
  // Append Ronza to the end of the location list
  locations_raw.push([_L_RONZA,"Ronza's Traveling Shoppe", _A_OTHER, _R_NOVICE, [_M_RONZA], 0]);
  // Set up the location order, include Ronza
  locations_order=[
    _L_NONE, _L_AR, _L_BAZAAR, _L_BALACK, _L_CC, _L_CCLAWED, _L_CAT, _L_DERR, _L_DOJO, _L_DRACANO, _L_ELUB, _L_FG, _L_GGT, _L_HARBOUR, _L_JDREAD, _L_KINGS_GAUNTLET, _L_LAB,
    _L_LAGOON, _L_MEADOW, _L_MEDI, _L_MTN, _L_MOZ, _L_NERG, _L_PINN, _L_RONZA, _L_SSH, _L_DIGBY, _L_GNAWNIA, _L_TRG, _L_WINDMILL
  ];
} else {
  // Set up the location order, exclude Ronza
  locations_order=[
    _L_NONE, _L_AR, _L_BAZAAR, _L_BALACK, _L_CC, _L_CCLAWED, _L_CAT, _L_DERR, _L_DOJO, _L_DRACANO, _L_ELUB, _L_FG, _L_GGT, _L_HARBOUR, _L_JDREAD, _L_KINGS_GAUNTLET, _L_LAB,
    _L_LAGOON, _L_MEADOW, _L_MEDI, _L_MTN, _L_MOZ, _L_NERG, _L_PINN, _L_SSH, _L_DIGBY, _L_GNAWNIA, _L_TRG, _L_WINDMILL
  ];
}

// Populate location related arrays
var n_locations=locations_order.length;
var locations=new Array(n_locations);
var location_area=new Array(n_locations);
var locations_title_req=new Array(n_locations);
var locations_map_req=new Array(n_locations);
var locations_without_penalty=[];
for (i=0; i<n_locations; i++) {
  locId = locations_order[i];
  locations[i]=locations_raw[locId][1];
  location_area[i]=locations_raw[locId][2];
  locations_title_req[i]=locations_raw[locId][3];
  locations_map_req[i]=locations_raw[locId][4];
  if (locations_raw[locId][5]>0) locations_without_penalty.push(locId);
}

// This will help us get the order number from locID
var locations_rev_order=new Array(locations_raw.length);
// Default all to -1
for (i=0; i<locations_rev_order.length; i++) {
  locations_rev_order[i]=-1;
}
// Fill it up.
for (i=0; i<n_locations; i++) {
  locations_rev_order[locations_order[i]]=i
}

// Built by selecting the areas in numerical order and cycling through the location list to sort them.
var locations_by_area=new Array(areas.length);
for (var a=0; a<areas.length; a++) {
  // Create an array each section
  locations_by_area[a]=[];
}
// Iterate through the locations and push the order# into the area map
for (var l=0; l<locations_raw.length; l++) {
    locations_by_area[locations_raw[l][2]].push(locations_rev_order[l]);
}

function getLocationId(locationName) {
  return getIndexFromStringArray(locationName, locations);
}
