function BehringerBCD2000 () {}
BehringerBCD2000.debug = false;
BehringerBCD2000.escratch = [false, false];

//sensitivity setting
BehringerBCD2000.UseAcceleration = true;
BehringerBCD2000.JogSensitivity = 0.2;

BehringerBCD2000.init = function (id) { // called when the device is opened & set up

   BehringerBCD2000.reset();

   // Ask BCD to send the current values of all rotary knobs and sliders
   midi.sendShortMsg(0xB0,0x64,0x7F);

   // Set jog acceleration
   if (BehringerBCD2000.UseAcceleration)
      midi.sendShortMsg(0xB0, 0x63, 0x7F);
   else
      midi.sendShortMsg(0xB0, 0x63, 0x0);
};

BehringerBCD2000.shutdown = function () {

   BehringerBCD2000.reset();

   // Reenable jog acceleration
   if (!BehringerBCD2000.UseAcceleration)
      midi.sendShortMsg(0xB0, 0x63, 0x7F);
};

BehringerBCD2000.reset = function () {

   // Turn off all the lights
   for (i = 0; i <= 25; i++) {
      midi.sendShortMsg(0xB0, i, 0);
   }

};

BehringerBCD2000.getDeck = function (group) {
   if (group == "[Channel1]")
      return 0;
   else if (group == "[Channel2]")
      return 1;

   print("Invalid group : " + group);
   return -1; // error
}


//Scratch, cue search and pitch bend function
BehringerBCD2000.jogWheel = function (channel, control, value, status, group) {


   deck = BehringerBCD2000.getDeck(group);

   if (BehringerBCD2000.escratch[deck]) {

if (value >= 65)

{scratchValue = (value - 0x40);}

else

{scratchValue = (value - 0x41);}
      engine.scratchTick(deck + 1, scratchValue);

      if (BehringerBCD2000.debug)
         print(group + " scratch tick : " + scratchValue);

   } else {

      if (value >= 65)

{jogValue = (value - 0x40) * BehringerBCD2000.JogSensitivity;}

else

{jogValue = (value - 0x41) * BehringerBCD2000.JogSensitivity;}
      engine.setValue(group, "jog", jogValue);

      if (BehringerBCD2000.debug)
         print(group + " pitching jog adjust : " + jogValue);

   }
};

//Scratch button function
BehringerBCD2000.scratchButton = function (channel, control, value, status, group) {

   if (value != 0x7F)
      return;

   deck = BehringerBCD2000.getDeck(group);

   BehringerBCD2000.escratch[deck] = !BehringerBCD2000.escratch[deck];

   if (BehringerBCD2000.debug)
      print(group + " scratch enabled :" + BehringerBCD2000.escratch[deck]);

   if (BehringerBCD2000.escratch[deck]) {
      // Turn on the scratch light
      if (!deck)
         midi.sendShortMsg(0xB0, 0x13, 0x7F);
      else
         midi.sendShortMsg(0xB0, 0x0B, 0x7F);

      // Enable scratching
      engine.scratchEnable(deck + 1, 100, 33+1/3, 1.0/8, (1.0/8)/32);

   } else {
      // Turn off the scratch light
      if (!deck)
         midi.sendShortMsg(0xB0, 0x13, 0x00);
      else
         midi.sendShortMsg(0xB0, 0x0B, 0x00);

      // Disable scratching
      engine.scratchDisable(deck + 1);
   }
};

//Set loop function
BehringerBCD2000.loop = function (channel, control, value, status, group) {
   if (value)
      action = "loop_in";
   else
      action = "loop_out";

   if (BehringerBCD2000.debug)
      print(group + " " + action);

    engine.setValue(group, action, 1);
};
