function retrieveURL(url) {
  if (window.XMLHttpRequest) { // Non-IE browsers
    req = new XMLHttpRequest();
    req.onreadystatechange = processStateChange;
    try {
      req.open("GET", url, true);
    } catch (e) {
      alert(e);
    }
    req.send(null);
  } else if (window.ActiveXObject) { // IE
    try {
      req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
    if (req) {
      req.onreadystatechange = processStateChange;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function processStateChange() {
  if (req.readyState == 4) { // Complete
    if (req.status == 200) { // OK response
      updateSelects(req.responseText);
    } else {
      alert("Problem: " + req.status + "/" + req.statusText);
    }
  }
}

function updateSelects(txt) {
  var lines = txt.split("\n");
  var i;
  var f = document.forms.srch;
//alert("Txt: " + txt);
  for (i = 0; i < lines.length; i++) {
//  alert("Line " + i + ": " + lines[i]);
    var items = lines[i].split("|");
    var opts = [];
    for (var j = 1; j < items.length; j++) 
      opts[j-1] = items[j];
    switch (items[0]) {
      case "mfg": setSelect(f.mfg, opts); break; 
      case "poles": setSelect(f.poles, opts, "All Poles --------"); break; 
      case "voltages": setSelect(f.voltages, opts, "All Voltages ----"); break; 
      case "amperages": setSelect(f.amperages, opts, "All Amperages ---"); break; 
      case "types": setSelect(f.types, opts, "All Types -------"); break; 
    }
  }
}

function setLoading(sbox) {
  var si = sbox.selectedIndex;
  for (var i = sbox.options.length - 1; i >= 0; i--) {
    sbox.options[i] = null;
  }
  sbox.options[0] = new Option("Loading...", -1);
  sbox.options[0].selected = false;
}

function encodeHiddenField(name, hf) {
  var qs = "";
  var values = hf.value.split(",");
  for (var i = 0; i < values.length; i++) {
    qs += "&" + name + "[]=" + escape(values[i]);
  }
  return qs;
}

function encodeModifyDropdown(name, dd, threshold) {
  var qs = "";
  var opts = 0;
  for (var i = threshold; i < dd.options.length; i++) {
    if (dd.options[i].selected) {
      qs += "&" + name + "[]=" + escape(dd.options[i].value);
      opts++;
    }
  }
  if (opts == 0) {
    // nothing selected - so set to Loading...
    setLoading(dd);
  }
  return qs;
}

function loadSelects(src,f) { 
 // if no selection has yet been made, update text to "Loading..."
 // f.mfg poles voltages amperages

 // find all items with a selection & serialize.
 var url = "http://www.circuitbreakerservice.com/xml.php";
 var qs = "";
 if (f.mfg && f.mfg.options) qs += encodeModifyDropdown("mfg", f.mfg, 0);
 else if (f.mfg) qs += encodeHiddenField("mfg", f.mfg);
 if (src != "mfg") {
   qs += encodeModifyDropdown("types", f.types, 2);
   qs += encodeModifyDropdown("poles", f.poles, 2);
   qs += encodeModifyDropdown("amperages", f.amperages, 2);
   qs += encodeModifyDropdown("voltages", f.voltages, 2);
 }

// if (qs != "") {
   url += "?" + qs.substring(1);
//   alert("Request: |" + url + "|");
   retrieveURL(url);
// }
}

function loadAllSelects() {
  // called from search results "Narrow Your Search" page
  var f = document.forms.srch;
  if (f && f["types[]"] && f["poles[]"] && f["voltages[]"] && f["amperages[]"]) {
    loadSelects("types", f);
    loadSelects("poles", f);
    loadSelects("voltages", f);
    loadSelects("amperages", f);
  }
}

function propagate(src) {
  loadSelects(src,document.forms.srch);
}

function defselect(sbox, string) {
  var si = sbox.selectedIndex;
  for (var i = sbox.options.length - 1; i >= 0; i--) {
    sbox.options[i] = null;
    sbox.options[0] = new Option(string, 0);
  }
  sbox.options[0].selected = true;
  sbox.options[1] = new Option("Don't Know", -1);
  sbox.options[1].selected = false;
}
    
function getSelection(sbox) {
  var a = Array();
  var j = 0;
  if(!sbox)
    return false;
  if (sbox.options[0].selected) 
    return a;

  for (i = 1; i < sbox.options.length; i++) {
    if (sbox.options[i].selected) {
      a[j++] = sbox.options[i].value;
    }
  }
  return a;
}

function setSelect(sbox, opts, defaultValue) {
  var name = defaultValue;
  var si = sbox.selectedIndex;
  var j = 0;
  var orig = Array();
  var z = 0;
  var selIdx = 0;
  var hassel = 0;

  for (var x = 0; x < sbox.options.length; x++) {
    if (sbox.options[x].selected) 
      orig[z++] = sbox.options[x].value;
  }
  
// TODO
// if (isSelf && opts.length < sbox.options.length) return;

  for (var i = sbox.options.length - 1; i >= 0; i--)
    sbox.options[i] = null;
  sbox.options[0] = new Option(name, 0);
  sbox.options[1] = new Option("Don't Know", -1);
  if (orig.length == 0 || orig[0] == 0) {
    sbox.options[0].selected = true;
    hassel = 1;
  }
  if (orig.length == 1 && orig[0] == -1) {
    sbox.options[1].selected = true;
    hassel = 1;
  }

  for (j = 0; j < opts.length; j++) {
    var value = "";
    sbox.options[j+2] = new Option(opts[j], opts[j]); 
    value = opts[j]; 
    for (x = 0; x < orig.length; x++) {
      if (value == orig[x]) break;
    }
    if (x != orig.length) {
      sbox.options[j+2].selected = true;
      hassel = 1;
    }
  }
  if (!hassel) {
    sbox.options[0].selected = true;
  }
}

/*
function propagate(src) {
  var mfg = document.forms["srch"].mfg;
  var types = document.forms["srch"].types;
  var poles = document.forms["srch"].poles;
  var amps = document.forms["srch"].amperages;
  var volts = document.forms["srch"].voltages;

  var typeString = "All Types -------";
  var poleString = "All Poles --------";
  var ampsString = "All Amperages ---";
  var voltsString = "All Voltages ----";

  if (src == "") {
    defselect(types, typeString);
    defselect(poles, poleString);
    defselect(amps, ampsString);
    defselect(volts, voltsString);
  } else {
    var sel1 = getSelection(mfg);
    var sel2 = getSelection(types);
    var sel3 = getSelection(poles);
    var sel4 = getSelection(amps);
    var sel5 = getSelection(volts);
    if ((sel1.length == 1 && sel1[0] <= 0)||(sel1.length==2&&sel1[0]<=0&&sel1[1]<=0)) sel1 = Array();
    if ((sel2.length == 1 && sel2[0] <= 0)||(sel2.length==2&&sel2[0]<=0&&sel2[1]<=0)) sel2 = Array();
    if ((sel3.length == 1 && sel3[0] <= 0)||(sel3.length==2&&sel3[0]<=0&&sel3[1]<=0)) sel3 = Array();
    if ((sel4.length == 1 && sel4[0] <= 0)||(sel4.length==2&&sel4[0]<=0&&sel4[1]<=0)) sel4 = Array();
    if ((sel5.length == 1 && sel5[0] <= 0)||(sel5.length==2&&sel5[0]<=0&&sel5[1]<=0)) sel5 = Array();

    if (1||src != "types") setSelection(types, typeString, T, 1, sel1, sel2, sel3, sel4, sel5,src=="types");
    if (1||src != "poles") setSelection(poles, poleString, P, 2, sel1, sel2, sel3, sel4, sel5,src=="poles");
    if (1||src != "amps") setSelection(amps, ampsString, A, 3, sel1, sel2, sel3, sel4, sel5,src=="amps");
    if (1||src != "volts") setSelection(volts, voltsString, V, 4, sel1, sel2, sel3, sel4, sel5,src=="volts");
  }
}
*/

function resetsearch() {
  var mfg = document.forms["srch"].mfg;
  var types = document.forms["srch"].types;
  var poles = document.forms["srch"].poles;
  var amps = document.forms["srch"].amperages;
  var volts = document.forms["srch"].voltages;

  types.selectedIndex = poles.selectedIndex =
  amps.selectedIndex = volts.selectedIndex = 0;
}
