// Copyright 2007 SensiSoft

function get_dictv(url, elem) {

  if (elem.nodeName == 'SELECT')
  {
    var select = elem
    select.innerHTML = ''
  }
  else
  {
    var select = document.createElement('select')
    select.id = elem.id
    select.name = elem.name
    select.value = elem.value
    elem.name += '_old'
    elem.id += '_old'
    elem.style.display = 'none'
    elem.parentNode.insertBefore(select, elem)
    //elem.parentNode.removeChild(elem)
  }

  if (url.indexOf('//') != -1)
    return select

  var httpRequest;

  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType) {
      httpRequest.overrideMimeType('text/xml;charset=UTF-8');
    }
  } 
  else if (window.ActiveXObject) { // IE
    try {
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e) {
      try {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (e) {}
    }
  }

  if (!httpRequest) {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }

  httpRequest.onreadystatechange = function() { fill_options(httpRequest, select); };
  httpRequest.open('GET', url, true);
  httpRequest.send('');
  
  return select
}

function fill_options(httpRequest, select) {
  if (httpRequest.readyState == 4) {
    if (httpRequest.status == 200) {
      var dictvs = eval('('+httpRequest.responseText+')');
      var emptyo = document.createElement('option')
      emptyo.value = ''
      emptyo.appendChild(document.createTextNode('---------'))
      select.appendChild(emptyo)
      for (var i=0; i < dictvs.length; ++i)
      {
        var option = document.createElement('option')
        option.value = dictvs[i].id
        option.appendChild(document.createTextNode(dictvs[i].value))
        select.appendChild(option)
      }
      select.value = document.getElementById(select.id+'_old').value
    } else {
      alert('There was a problem with the request.');
      document.write(httpRequest.responseText)
    }
  }
}

var child_elems={}

function make_dict_selector(elem_id, dict_name, parent_elem)
{
  var elem = document.getElementById(elem_id)
  if (parent_elem)
  {
    var parent = document.getElementById(parent_elem)
    var oldparent = document.getElementById(parent_elem+'_old')
    var newelem = child_elems[parent_elem] = get_dictv('/base/dictvchildren/'+oldparent.value+'/', elem)
    parent.onchange = function (e)
      {
        get_dictv('/base/dictvchildren/'+this.value+'/', child_elems[this.id])
      }
  }
  else
    var newelem = get_dictv('/base/dictv/'+dict_name+'/', elem)
}

function clear_form(inputs, dform)
{
  for (var i=0; i < inputs.length; ++i)
    if (dform[inputs[i]].tagName == 'SELECT')
      dform[inputs[i]].value = 'f'
    else
      dform[inputs[i]].value = ''
}

