function Router(model, link, type, inmin, inmax, outmin, outmax, boolist) {
  this.model = model;
  this.link = link;
  this.type = type;
  this.inputs = [inmin, inmax];
  this.outputs = [outmin, outmax];
  this.bool = [];
  for (var x = 0; x < boolist.length; x++) this.bool[x] = (boolist.charAt(x) == "1");
  this.match = false;
  this.build = "";
}

/**
 * Description of Router class variable meanings

 * String
 *  - Model Number
 *  - Page link
 *

 * Integer
 *  - General Router type
 *     0. Video
 *     1. Audio
 *     2. Data
 *     3. RF
 *     4. Fiber
 *  - Minimum Inputs
 *  - Maximum Inputs
 *  - Minimum Outputs
 *  - Maximum Outputs
 *

 * Boolean
 *  0. Analog Video
 *  1. SDI Non-reclocked
 *  2. SDI Reclocked
 *  3. HD-SDI
 *  4. HD-SDI 4:4:4 Dual link
 *  5. DVB-ASI Non-reclocked
 *  6. DVB-ASI Reclocked
 *  7. SMPTE 310M (ATSC) Non-reclocked
 *  8. Analog Audio
 *  9. Digital Audio
 *  10. Discrete AES (PCM or Dolby E) Softswitch
 *  11. Embedded Softswitch
 *  12. SDI Cleanswitch
 *  13. HD-SDI Cleanswitch
 *  14. Available redundant power supply
 *  15. Available bypass relay
 *  16. 3Gb/s
 *
 */

var routers = [
                                                                             // 01234567890123456
  new Router("7700R2x2-HD",                "7700R2x2-HD", 0,  2,   2,  2,   2, "00110000000000000"),
  new Router("7700R2x2-HES",               "7700R2x2-HD", 0,  2,   2,  2,   2, "00110000000100000"),
  new Router("7700R4x1-HD",                "7700R4x1-HD", 0,  2,   4,  1,   1, "00110000000000000"),
  new Router("7700R4x2-3G",                "7700R4x1-HD", 0,  2,   4,  2,   2, "00110000000000001"),
  new Router("7700R16x16-HD",              "7700R16x16",  0, 16,  16, 16,  16, "01110111000000000"),
  new Router("7700R16x16-3G",              "7700R16x16",  0, 16,  16, 16,  16, "01110111000000001"),

  new Router("7703R8x1-RF",                "7703R-RF",    3,  8,   8,  1,   1, "00000000000000000"),
  new Router("7703R16x1-RF",               "7703R-RF",    3, 16,  16,  1,   1, "00000000000000000"),

  new Router("X-0401S",                    "X-0401S",     0,  4,   4,  1,   1, "00100011000000110"),
  new Router("X-0401S-AES4",               "X-0401S",     0,  4,   4,  1,   1, "00100011011010110"),
  new Router("X-0401H",                    "X-0401H",     0,  4,   4,  1,   1, "00110011000100110"),
  new Router("X-0401H-AES4",               "X-0401H",     0,  4,   4,  1,   1, "00110011011111110"),

  new Router("X-0601H-444",                "X-0601H-444", 0,  6,   6,  1,   1, "01011000001000110"),
  new Router("X-0601H-444-AES4",           "X-0601H-444", 0,  6,   6,  1,   1, "01011000011000110"),

  new Router("Q-0802H",                    "Q",           0,  8,   8,  2,   2, "00011010000000100"),
  new Router("Q-0802H+AA",                 "Q",           0,  8,   8,  2,   2, "00011010100000100"),
  new Router("Q-0802H+AESB",               "Q",           0,  8,   8,  2,   2, "00011010010000100"),
                                                                             // 01234567890123456
  new Router("X-1201S",                    "X-1201S",     0, 12,  12,  1,   1, "01000010000110110"),
  new Router("X-1201S-AES",                "X-1201S",     0, 12,  12,  1,   1, "01000010011110110"),
  new Router("X-1201S-AES4",               "X-1201S",     0, 12,  12,  1,   1, "01000010011110110"),

  new Router("X-1202S",                    "X-1202S",     0, 12,  12,  2,   2, "01000010000110110"),
  new Router("X-1202S-AES",                "X-1202S",     0, 12,  12,  2,   2, "01000010011110110"),
  new Router("X-1202S-AES4",               "X-1202S",     0, 12,  12,  2,   2, "01000010011110110"),

  new Router("X-1201H",                    "X-1201H",     0, 12,  12,  1,   1, "01010101000101110"),
  new Router("X-1201H-AES",                "X-1201H",     0, 12,  12,  1,   1, "01010101011101110"),
  new Router("X-1201H-AES4",               "X-1201H",     0, 12,  12,  1,   1, "01010101011101110"),

  new Router("X-1202H",                    "X-1202H",     0, 12,  12,  2,   2, "01010101000101110"),
  new Router("X-1202H-AES",                "X-1202H",     0, 12,  12,  2,   2, "01010101011101110"),
  new Router("X-1202H-AES4",               "X-1202H",     0, 12,  12,  2,   2, "01010101011101110"),

  new Router("Q-1601N",                    "Q",           0, 16,  16,  1,   1, "10000000000000100"),
  new Router("Q-1601N+AA",                 "Q",           0, 16,  16,  1,   1, "00000000100000100"),
                                                                             // 01234567890123456
  new Router("Q-1601S",                    "Q",           0, 16,  16,  1,   1, "00100010000000100"),
  new Router("Q-1601S+AA",                 "Q",           0, 16,  16,  1,   1, "00000000100000100"),
  new Router("Q-1601S+AESB",               "Q",           0, 16,  16,  1,   1, "00000000010000100"),

  new Router("Q-1602N",                    "Q",           0, 16,  16,  2,   2, "10000000000000100"),
  new Router("Q-1602N+AA",                 "Q",           0, 16,  16,  2,   2, "00000000100000100"),

  new Router("Q-1602S",                    "Q",           0, 16,  16,  2,   2, "00100010000000100"),
  new Router("Q-1602S+AA",                 "Q",           0, 16,  16,  2,   2, "00000000100000100"),
  new Router("Q-1602S+AESB",               "Q",           0, 16,  16,  2,   2, "00000000010000100"),

  new Router("Q-1602H",                    "Q",           0, 16,  16,  2,   2, "00011010000000100"),
  new Router("Q-1602H+AA",                 "Q",           0, 16,  16,  2,   2, "00000000100000100"),
  new Router("Q-1602H+AESB",               "Q",           0, 16,  16,  2,   2, "00000000010000100"),

  new Router("Q16-AESB",                   "Q-AES",       1, 16,  32, 16,  32, "00000000011000000"),
  new Router("Q16-AESB+SS",                "Q-AES",       1,  4,  32,  8,  32, "00000000011000000"),
  new Router("Q16-AESU",                   "Q-AES",       1, 16,  16, 16,  16, "00000000011000000"),
  new Router("Q16-AESU+SS",                "Q-AES",       1,  4,  16,  8,  16, "00000000011000000"),
  new Router("Q32-AESB",                   "Q-AES",       1, 16,  32, 16,  32, "00000000011000100"),
  new Router("Q32-AESB+SS",                "Q-AES",       1,  4,  32,  8,  32, "00000000011000100"),
  new Router("Q32-AESU",                   "Q-AES",       1, 16,  32, 16,  32, "00000000011000100"),
  new Router("Q32-AESU+SS",                "Q-AES",       1,  4,  32,  8,  32, "00000000011000100"),

  new Router("QT-1616N",                   "QT-N",        0, 16,  16, 16,  16, "10000000000000100"),
  new Router("QT-3232N",                   "QT-N",        0, 32,  32, 32,  32, "10000000000000100"),
  new Router("QT-0808S",                   "QT-H/S",      0,  8,   8,  8,   8, "01000101000000100"),
  new Router("QT-1616S",                   "QT-H/S",      0, 16,  16, 16,  16, "01000101000000100"),
  new Router("QT-3232S",                   "QT-H/S",      0, 32,  32, 32,  32, "01000101000000100"),
  new Router("QT-0808H",                   "QT-H/S",      0,  8,   8,  8,   8, "00011101000000100"),
  new Router("QT-1616H",                   "QT-H/S",      0, 16,  16, 16,  16, "00011101000000100"),
  new Router("QT-3232H",                   "QT-H/S",      0, 32,  32, 32,  32, "00011101000000100"),
  new Router("QT-1616-AA",                 "QT-AA",       1, 16,  16, 16,  16, "00000000100000100"),
  new Router("QT-3232-AA",                 "QT-AA",       1, 32,  32, 32,  32, "00000000100000100"),
                                                                             // 01234567890123456
  new Router("Xenon4 (up to 64x64)",       "Xenon",       0, 32,  64, 32,  64, "01111110010111101"),
  new Router("Xenon4-AES (up to 64x64)",   "Xenon",       1, 32,  64, 32,  64, "01111110011000101"),
  new Router("Xenon4+F (up to 64x64)",     "Xenon",       4, 32,  64, 32,  64, "01111111110111101"),
  new Router("Xenon8 (up to 128x128)",     "Xenon",       0, 32, 128, 32, 128, "01111110010111101"),
  new Router("Xenon8-AES (up to 128x128)", "Xenon",       1, 32, 512, 32, 512, "01111110011000101"),
  new Router("Xenon8+F (up to 128x128)",   "Xenon",       4, 32, 128, 32, 128, "01111111110111101"),

  new Router("EQT-1604-H",                 "EQT-16xx",    0, 16,  16, 4,    4, "01110111000000100"),
  new Router("EQT-1604-3G",                "EQT-16xx",    0, 16,  16, 4,    4, "01110111000000101"),
  new Router("EQT-1616-H",                 "EQT-16xx",    0, 16,  16, 16,  16, "01110111000000100"),
  new Router("EQT-1616-3G",                "EQT-16xx",    0, 16,  16, 16,  16, "01110111000000101"),
  new Router("EQT-3232-H",                 "EQT-3232",    0, 32,  32, 32,  32, "01110111000000100"),
  new Router("EQT-3232-3G",                "EQT-3232",    0, 32,  32, 32,  32, "01110111000000101"),
  new Router("EQT-3232-3G-F",              "EQT-3232",    4,  2,  32, 2,   32, "01110111000000101"),

  new Router("EQX16 (up to 288x288)",      "EQX",         0, 18, 288, 18, 288, "01111111000000101"),
  new Router("EQX26 (up to 576x576)",      "EQX",         0, 18, 576, 18, 576, "01111111000000101"),
  new Router("EQX16-F (up to 288x288)",    "EQX",         4, 18, 288, 18, 288, "01111111110000101"),
  new Router("EQX26-F (up to 576x576)",    "EQX",         4, 18, 576, 18, 576, "01111111110000101"),

  new Router("EMR Video",                  "EMR_Video",   1, 32, 672, 32, 672, "01111110000000101"),

  new Router("EMR Audio",                  "EMR_Audio",   1, 32, 672, 32, 672, "00000000110000100"),
  new Router("EMR Audio (Data)",           "EMR_Audio",   2, 32, 672, 32, 672, "00000000110000100"),

  new Router("Q6400-N",                    "Q6400-N",     0, 32,  64, 32,  64, "10000000000000100"),
//new Router("Q6400-AAS",                  "Q6400-AA",    1, 16,  64, 16,  64, "00000000100000100"),
//new Router("Q6400-AAM",                  "Q6400-AA",    1, 64, 128, 16,  64, "00000000100000100"),
//new Router("Q6400-AAX",                  "Q6400-AA",    1, 48,  64, 16,  64, "00000000100000100"),

  new Router("Q16-RR",                     "Q-RR",        2, 16,  16,  8,  16, "00000000000000000"),
  new Router("Q32-RR",                     "Q-RR",        2, 16,  16, 16,  16, "00000000000000100"),
  new Router("Q32-PR",                     "Q32-PR",      2,  4,  32,  2,  32, "00000000000000100"),
//new Router("Q64-PR",                     "Q-PR",        2,  4,  64,  2,  64, "00000000000000100"),
  new Router("TR-3200A",                   "TR-3200A",    2, 16,  64, 32,  32, "00000000000000000"),

  new Router("XRF1-16x16",                 "XRF1",        3, 16,  32, 16,  32, "00000000000000100"),
  new Router("XRF6-64x64",                 "XRF6",        3, 16, 512, 16, 512, "00000000000000100")
                                                                             // 01234567890123456
];

function updateList() {
  var OPT = {
    standard:      document.getElementById("standard").value,
    gensize:       document.getElementById("gensize").value,
    inputs:        document.getElementById("inputs").value,
    outputs:       document.getElementById("outputs").value,
    audio:         document.getElementById("audio").value,
    softswitch_d:  document.getElementById("softswitch").value.split("~")[0],
    softswitch_e:  document.getElementById("softswitch").value.split("~")[1],
    cleanswitch_s: document.getElementById("cleanswitch").value.split("~")[0],
    cleanswitch_h: document.getElementById("cleanswitch").value.split("~")[1],
    powersupply:   (document.getElementById("powersupply").checked) ? "1" : "0",
    bypassrelay:   (document.getElementById("bypassrelay").checked) ? "1" : "0"
  };

  document.getElementById("inputs").disabled = "";
  document.getElementById("outputs").disabled = "";
  document.getElementById("audio").disabled = "";
  document.getElementById("softswitch").disabled = "";
  document.getElementById("cleanswitch").disabled = "";

  document.getElementById("l_inputoutput").style.color = "#000000";
  document.getElementById("l_audio").style.color = "#000000";
  document.getElementById("l_softswitch").style.color = "#000000";
  document.getElementById("l_cleanswitch").style.color = "#000000";

  switch (OPT.standard) {
    case "10": case "9":
      document.getElementById("softswitch").disabled = "disabled";
      document.getElementById("audio").disabled = "disabled";
      document.getElementById("l_softswitch").style.color = "#888888";
      document.getElementById("l_audio").style.color = "#888888";
      OPT.softswitch_d = OPT.softswitch_e = OPT.audio = "null";
    case "0": case "8":
      document.getElementById("cleanswitch").disabled = "disabled";
      document.getElementById("l_cleanswitch").style.color = "#888888";
      OPT.cleanswitch_s = OPT.cleanswitch_h = "null";
  }
  if (OPT.gensize != "null") {
    document.getElementById("inputs").disabled = "disabled";
    document.getElementById("outputs").disabled = "disabled";
    document.getElementById("l_inputoutput").style.color = "#888888";
    OPT.inputs = OPT.outputs = "null";
  }
  if (OPT.audio == "0") {
    document.getElementById("softswitch").disabled = "disabled";
    document.getElementById("l_softswitch").style.color = "#888888";
    OPT.softswitch_d = OPT.softswitch_e = "null";
  }


  var printed = 0, mainul = document.getElementById('resultlist');
  while (mainul.firstChild) mainul.removeChild(mainul.firstChild);

  for (var x = 0, rtr; rtr = routers[x++];) {
    rtr.match = true;
    rtr.build = "";


    // ********** Limit routers based on general size
    switch (OPT.gensize) {
      case "0": if (rtr.inputs[1] > 32) rtr.match = false; break; // 0 ~ 16
      case "1": if (rtr.inputs[1] <= 16 || rtr.inputs[0] > 64) rtr.match = false; break; // 17 ~ 64
      case "2": if (rtr.inputs[1] <= 64) rtr.match = false; break; // 65 ~ 256+
      case "null": default:
    }


    // ********** Limit routers based on # of inputs
    // if (OPT.inputs != "null" && (OPT.inputs < rtr.inputs[0] || OPT.inputs > rtr.inputs[1])) rtr.match = false;
    if (OPT.inputs != "null" && OPT.inputs > rtr.inputs[1]) rtr.match = false;

    // ********** Limit routers based on # of outputs
    if (OPT.outputs != "null" && (OPT.outputs < rtr.outputs[0] || OPT.outputs > rtr.outputs[1])) rtr.match = false;


    // ********** Limit routers based on standard and/or router-type
    switch (OPT.standard) {
      case "0": if (!rtr.bool[0]) rtr.match = false; break;
      case "1": if (!rtr.bool[1] && !rtr.bool[2]) rtr.match = false; break;
      case "2": if (!rtr.bool[3]) rtr.match = false; break;
      case "3": if (!rtr.bool[4]) rtr.match = false; break;
      case "4": if (!rtr.bool[16]) rtr.match = false; break;
      case "5": if (!rtr.bool[5]) rtr.match = false; break;
      case "6": if (!rtr.bool[6]) rtr.match = false; break;
      case "7": if (!rtr.bool[7]) rtr.match = false; break;
      case "8": if (rtr.type != 1) rtr.match = false; break;
      case "9": if (rtr.type != 2) rtr.match = false; break;
      case "10": if (rtr.type != 3) rtr.match = false; break;
      case "11": if (rtr.type != 4) rtr.match = false; break;
      case "null":
      default:
    }


    // ********** Limit routers based on type of audio
    if (OPT.audio != "null" && ((OPT.audio == "0" && !rtr.bool[8]) || (OPT.audio == "1" && !rtr.bool[9]))) rtr.match = false;


    // ********** Limit routers based on audio softswitch support
    // Add the appropriate softswitch "+" option to routers which support it
    if (OPT.softswitch_d != "null") {
      if (!rtr.bool[10]) {
        rtr.match = false;

      } else if (rtr.model.indexOf("X-") == 0) {

        // this hack makes the softswitch options into part of the model number for the X-0401 series
        rtr.build += ((rtr.model.indexOf("X-0401") == 0) ? "-" : "+") + ((rtr.bool[3] || rtr.bool[4]) ? "HSS" : "SS");
      }
    }
    if (OPT.softswitch_e != "null") {
      if (!rtr.bool[11]) {
        rtr.match = false;

      } else if (rtr.build.indexOf("SS") != -1) {
        rtr.build = rtr.build.replace(/SS/, "ES");

      } else if (rtr.model.indexOf("7700") == -1) {

        // ths hack makes the softswitch options into part of the model number for the X-0401 series
        rtr.build += ((rtr.model.indexOf("X-0401") == 0) ? "-" : "+") + ((rtr.bool[3] || rtr.bool[4]) ? "HES" : "ES");
      }
    }


    // ********** Limit routers based on video cleanswitch support
    if (OPT.cleanswitch_s != "null" && !rtr.bool[12]) rtr.match = false;
    if (OPT.cleanswitch_h != "null" && !rtr.bool[13]) rtr.match = false;


    // if the router was not eliminated above then process its display
    if (rtr.match) {
      printed++;

      // Add the bypass relay "+" option to routers which support it
      if (OPT.bypassrelay == "1" && rtr.bool[15]) rtr.build += (rtr.bool[3] || rtr.bool[4]) ? "+HBP" : "+BP";


      // Add the redundant power supply "+" option to routers which support it
      if (OPT.powersupply == "1" && rtr.bool[14]) {
        if (rtr.model.indexOf("Q-160") == 0 || rtr.model.indexOf("Q-080") == 0) {
          rtr.build += "+PSX";
        } else rtr.build += "+2PS";
      }


      // Prepare the number of inputs/outputs to display in the tooltip
      var showInputs = (rtr.inputs[0] == rtr.inputs[1]) ? rtr.inputs[0] : rtr.inputs[0] + "-" + rtr.inputs[1];
      var showOutputs = (rtr.outputs[0] == rtr.outputs[1]) ? rtr.outputs[0] : rtr.outputs[0] + "-" + rtr.outputs[1];


      // Prepare the type of router to display in the tooltip
      var showType = "";
      switch (rtr.type) {
        case 0:
          if (rtr.bool[3] || rtr.bool[4]) {
            showType = "HD Video";
          } else if (rtr.bool[1] || rtr.bool[2]) {
            showType = "SD Video";
          } else if (rtr.bool[0])
            showType = "Analog Video";
          break;
        case 1:
          if (rtr.bool[9]) {
            showType = "Digital Audio";
          } else if (rtr.bool[8])
            showType = "Analog Audio";
          break;
        case 2:
          showType = "Data";
          break;
      }

      var li = document.createElement('li');
        var a = document.createElement('a');
            a.href = "products/" + rtr.link;
            a.title = "(" + showInputs + " x " + showOutputs + ") " + showType + " Router";
            a.appendChild(document.createTextNode(rtr.model + rtr.build));
          li.appendChild(a);
      mainul.appendChild(li);

    }
  }

  if (!printed) {
    var li = document.createElement('li');
      var strong = document.createElement('strong');
          strong.appendChild(document.createTextNode("No matches"));
        li.appendChild(strong);
    mainul.appendChild(li);
  }
}

attachOnload(function() {
  var selector = new Popup('selector', true, true);

  var links = document.getElementsByTagName('a');
  for (var x = 0, a; a = links[x++];)
    if (a.href.match(/products\/routers\/(index\.html)?#selector$/))
      a.onclick = function() { selector.show(); return false; };

  updateList();
  if (window.location.hash == "#selector") selector.show();
});


function fadeIt(faderId, msgId) {
	if (msgId != currentMsgId) {
		fader[faderId].fade(currentMsgId, false);
		fader[faderId].fade(currentMsgId = msgId, true);
	} else return false;
}

var currentMsgId = 0;
if (typeof fader == "undefined" || !fader.length) {
  var fader = [new fadeObject('fader', 'ffffff', '000000', 20, 20)];
} else fader[0] = new fadeObject('fader', 'ffffff', '000000', 20, 20);
fader[0].msg[0] = "<h4>Instructions</h4>Narrow down the list of available Evertz routers by selecting your requirements using the input fields below.  Click on any model number to see the associated specification sheet.";
fader[0].msg[1] = "<h4>Router Type</h4>Choose one of many signal types, from video to data.  Some routers support multiple signal types.";
fader[0].msg[2] = "<h4>Router General Size</h4>If an exact number of inputs or outputs isn't an issue, you can narrow down the list by selecting among \"small\", \"medium\" or \"large\" sizes.";
fader[0].msg[3] = "<h4>Inputs &amp; Outputs</h4>The number of signal inputs and outputs required.  Many routers support a range of configurable inputs and outputs.";
fader[0].msg[4] = "<h4>CleanSwitch Video</h4>The video standards for which you need CleanSwitch support, if any.";
fader[0].msg[5] = "<h4>Audio Type</h4>Choose from Analog or Digital audio support.";
fader[0].msg[6] = "<h4>SoftSwitch&trade; Audio</h4>SoftSwitch&trade; technology provides smooth audio transitions when switching input sources.";
fader[0].msg[7] = "<h4>Additional Options</h4>Select any additional options you may require.";
if (HOSTCODE == "cn") {
  fader[0].msg[0] = "<h4>说明</h4>Narrow down the list of available Evertz routers by selecting your requirements using the input fields below.  Click on any model number to see the associated specification sheet.";
  // fader[0].msg[1] = "";
  // fader[0].msg[2] = "";
  // fader[0].msg[3] = "";
  // fader[0].msg[4] = "";
  // fader[0].msg[5] = "";
  // fader[0].msg[6] = "";
  // fader[0].msg[7] = "";
}
