function getHTTPReq() {
  var req = false;
  if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    if (req.overrideMimeType) { req.overrideMimeType('text/xml'); }
  } else if (window.ActiveXObject) {
    try { req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} }
  }
  return req;
};

function updateFields(field, value) {
  var req = getHTTPReq();

  var url = '/estimating/calculator/getCarbonPossibleSelectors.xml?';
  var dfields = {'region': new Array('region'), 'stand':new Array('region','stand'), 'stype':new Array('region','stand','stype'), 'management':new Array('region','stand','stype','management'), 'age':new Array('region','stand','stype','management','age')};
  var rfields = {'region': new Array('stand','stype','management','age'), 'stand':new Array('stype','management','age'), 'stype':new Array('management','age'), 'management':new Array('age')};

  if (field != 'age') {  
    fieldsToHide = rfields[field];
    for (var w=0; w < fieldsToHide.length; w++) {
      if (w == 0 && value != '') continue;

      fn = fieldsToHide[w] + '-cholder';
      if (!document.getElementById(fn)) continue;

      cholder = document.getElementById(fn);
      cholder.className = 'field hidden';
    }
  }

  if (value == '') return false;

  for (var e=0; e < dfields[field].length; e++) {
    r = document.getElementById(dfields[field][e]);
    rval = r.options[r.selectedIndex].value;
    if (e > 0)  url += '&';
    url += dfields[field][e] +'='+ rval;
  }
  url += '&cfield=' + field;

  if (!req) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }
  req.onreadystatechange = function() { returnCValues(req, field); };
  req.open('GET', url, true);
  req.send(null);
};

function returnCValues(req, field) {
  if (req.readyState == 4) {
    if (req.status == 200) {
      var xmlobj = req.responseXML.documentElement;

      var id = xmlobj.getElementsByTagName("id")[0].firstChild.nodeValue;
      f = document.getElementById(id);
      document.getElementById(id + '-cholder').className = 'field visible';

      for (var x=f.length-1; x >= 0; x--)  f[x] = null;

      var possvals = xmlobj.getElementsByTagName('v');
      f[f.length] = new Option('-- Select --','');
      for (var j=0; j < possvals.length; j++) {
        var v = possvals[j].firstChild.nodeValue;
        f[f.length] = new Option(v, v);
      }
    }
    else alert('There was a problem with the request. Status: '+req.status);
  }
};

function showCarbonResults() {
  var req = getHTTPReq();

  var url = '/estimating/calculator/getCarbonResults.xml?';
  var fields = new Array('region','stand','stype','management','age');

  for (var e=0; e < fields.length; e++) {
    r = document.getElementById(fields[e]);
    rval = r.options[r.selectedIndex].value;
    if (e > 0)  url += '&';
    url += fields[e] +'='+ rval;
  }
  if (!req) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }
  req.onreadystatechange = function() { returnCarbonResults(req); };
  req.open('GET', url, true);
  req.send(null);
};

function returnCarbonResults(req) {
  if (req.readyState == 4) {
    if (req.status == 200) {
      var xmlobj = req.responseXML.documentElement;
      f = document.getElementById('results-cholder');
      fieldset = document.createElement('fieldset');
      legend = document.createElement('legend');
      legend.appendChild(document.createTextNode(xmlobj.getElementsByTagName('legend')[0].firstChild.nodeValue));
      fieldset.appendChild(legend);

      var params = xmlobj.getElementsByTagName('params')[0].firstChild.nodeValue;
      p = document.createElement('p');
      p.className = 'discreet';
      p.appendChild(document.createTextNode(params));
      fieldset.appendChild(p);

      br = document.createElement('br');
      fieldset.appendChild(br);
      p = document.createElement('p');
      span = document.createElement('span');
      span.setAttribute('style','border-bottom: 1px solid black');
      span.appendChild(document.createTextNode('Below is your Carbon breakdown (tonnes carbon/hectare)'));
      p.appendChild(span);
      fieldset.appendChild(p); 

      table = document.createElement('table');
      table.setAttribute('border','0');
      table.setAttribute('cellspacing','5');
      tbody = document.createElement('tbody');
      attrs = new Array({'name':'Live Tree', 'id':'livetree'},{'name':'Standing Dead Tree', 'id':'standingdeadtree'},{'name':'Understory', 'id':'understory'},{'name':'Down Dead Wood', 'id':'downdeadwood'},{'name':'Forest Floor', 'id':'forestfloor'},{'name':'Soil Organic', 'id':'soil'},{'name':'Total Nonsoil', 'id':'nonsoil'})
      for (var t=0; t < attrs.length; t++) {
        tr = document.createElement('tr');
        td1 = document.createElement('td');
        strong = document.createElement('strong');
        strong.appendChild(document.createTextNode(attrs[t]['name']));
        td1.appendChild(strong);
        td2 = document.createElement('td');
        td2.setAttribute('align','right');
        var cvalue = xmlobj.getElementsByTagName(attrs[t]['id'])[0].firstChild.nodeValue;
        td2.appendChild(document.createTextNode(cvalue));
        tr.appendChild(td1);
        tr.appendChild(td2);
        tbody.appendChild(tr);
      }
      table.appendChild(tbody);
      fieldset.appendChild(table);

      fieldset.appendChild(br);
      p = document.createElement('p');
      p.className = 'discreet';
      a = document.createElement('a');
      a.href=".";
      a.appendChild(document.createTextNode('Restart'));
      p.appendChild(a);      
      fieldset.appendChild(p);

      f.appendChild(fieldset);
    }
    else alert('There was a problem with the request. Status: '+req.status);
  }
};

