// Configuration
static String VERSION = "1.2";
static int FRAMERATE = 60;
static int WINDOWSIZE = 400;
static int FRAMEBORDER = 10;
static String SOFTWARE = "";
static String SOFTWAREIN = "";
static String SOFTWARESEL = "";
static String SOFTWAREINSEL = "";
static boolean DEBUG = false;
static boolean NOSEND = false;
static boolean NETWORK = false;
static boolean HEADLESS = false;
static boolean LIVECONTROL = false;
static boolean LIVEENABLED = false;
static int USERMODE = 1;
static int MAXCHAINS = 64;
static boolean DEMO = false;
static String DEMOTEXT = "katapult";
static int DEMOCHOICE = -1;
static boolean SILENTMODE = false;

// Internal variables
static String config[];
static int CLINESIN = -1;
static int CLINESOUT = -1;
static boolean DEVICECONFIG = false;

void loadConfig() {
  config = loadStrings("config.txt");
  for (int i = 0; i < config.length; i++) {
    String configLine[] = split(config[i], "=");
    if (configLine[0].equals("in")) {
      SOFTWAREIN = configLine[1];
      SOFTWAREINSEL = configLine[1];
      CLINESIN = i;
    }
    if (configLine[0].equals("out")) {
      SOFTWARE = configLine[1];
      SOFTWARESEL = configLine[1];
      CLINESOUT = i;
    }
    if (configLine[0].equals("abletonlive")) {
      if (configLine[1].equals("yes")) { LIVEENABLED = true; }
    }
    if (configLine[0].equals("liveusermode")) {
      if (configLine[1].equals("2")) { USERMODE = 2; }
    }
    if (configLine[0].equals("silent")) {
      if (configLine[1].equals("yes")) { SILENTMODE = true; WINDOWSIZE = 150; }
    }
    if (configLine[0].equals("headless")) {
      if (configLine[1].equals("yes")) { HEADLESS = true; VERSION = VERSION + " headless"; }
    }
    if (configLine[0].equals("holdoffcolor")) {
       BUTTONIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("holdoncolor")) {
       HOLDONCOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("toggleoffcolor")) {
       TOGGLEOFFCOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("toggleoncolor")) {
       TOGGLEONCOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("faderoffcolor")) {
       FADERIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("faderoncolor")) {
       FADERACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("slideroffcolor")) {
      SLIDERIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("slideroncolor")) {
      SLIDERACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("pagebuttononcolor")) {
      PAGEBUTTONACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("pagebuttonoffcolor")) {
      PAGEBUTTONIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("meteroffcolor")) {
      METERIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("meteroncolor")) {
      METERACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("progressoffcolor")) {
      PROGRESSIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("progressoncolor")) {
      PROGRESSACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("noteoffcolor")) {
      NOTEIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("noteoncolor")) {
      NOTEACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("cconcolor")) {
      CCACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("ccoffcolor")) {
      CCIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("pconcolor")) {
      PCACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("pcoffcolor")) {
      PCIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("kbdoncolor")) {
      KBDACTIVECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("kbdoffcolor")) {
      KBDIDLECOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("demotextcolor")) {
      SCROLLERCOLOR = parseColor(configLine[1]);
    }
    if (configLine[0].equals("demotext")) {
      DEMOTEXT = configLine[1];
    }
    if (configLine[0].equals("demochoice")) {
      DEMOCHOICE = Integer.parseInt(configLine[1]);
    }
    if (configLine[0].equals("b1")) {
      overrideBitmap(0, configLine[1]);
    }
    if (configLine[0].equals("b2")) {
      overrideBitmap(1, configLine[1]);
    }
    if (configLine[0].equals("b3")) {
      overrideBitmap(2, configLine[1]); 
    }
    if (configLine[0].equals("b4")) {
      overrideBitmap(3, configLine[1]);
    }
    if (configLine[0].equals("b5")) {
      overrideBitmap(4, configLine[1]);
    }
    if (configLine[0].equals("b6")) {
      overrideBitmap(5, configLine[1]);
    }
    
  }
  if (!SOFTWAREIN.equals("") && !SOFTWARE.equals("")) DEVICECONFIG = true;
  storeDefaultColors();
}

void saveConfig() {
  //debug("saveConfig()");
  int configlength = config.length;
  //debug("Configlength "+configlength);
  if (CLINESIN == -1) { CLINESIN = configlength; configlength++; }
  if (CLINESOUT == -1) { CLINESOUT = configlength; configlength++; }
  //debug("Configlength "+configlength);
  String[] newconfig = new String[configlength];
  for (int i = 0; i < config.length; i++) {
    newconfig[i] = config[i];
  }
  //debug("linein"+CLINESIN);
  //debug("lineout"+CLINESOUT);
  //debug("Configlength "+newconfig.length);
  newconfig[CLINESIN] = "in="+SOFTWAREIN;
  newconfig[CLINESOUT] = "out="+SOFTWARE;
  saveStrings("config.txt", newconfig);
}