
var ajax_bars = new Array();
var ajax_current = -1;
var ajax_prev = 0;

function ajax_next() {
  for(name in ajax_bars) {
    if (ajax_bars[name] && ajax_bars[name].length > 0) {
      xmlsend(ajax_bars[name], name);
      ajax_bars[name] = '';
      return;
    }
  }
}
function xmlsend(url, divname) {
  var xmlHttpReq = false;
  var self = this;
  if (window.XMLHttpRequest) { self.xmlHttpReq = new XMLHttpRequest(); }
  else if (window.ActiveXObject) { self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); }
  self.xmlHttpReq.open('GET', url, true);
  self.xmlHttpReq.onreadystatechange = function() {
    if(self.xmlHttpReq.readyState==4||self.xmlHttpReq.readyState=="complete") {
      document.getElementById(divname).innerHTML=self.xmlHttpReq.responseText;
      ajax_next();
    }
  }
  self.xmlHttpReq.send(null);
}

function ajax_current_set(new_current) {
  ajax_current = new_current;
}

function getNextElement(field) {
  var fieldFound = false;
  var form = field.form;
  for (var e = 0; e < form.elements.length; e++) {
    if (fieldFound && form.elements[e].type != 'hidden')
      break;
    if (field == form.elements[e]) {
      fieldFound = true;
    }
  }
  return form.elements[e % form.elements.length];
}

function goNext(form, field) {
  getNextElement(document.forms[form].elements[field]).focus();
}

function ajax_dropdown_refresh(event, form, divname, script, field, model_field, value, extra_param_str) {
  var currEl;
  var prevEl;

  if (event.keyCode == 9) {
    return true;
  }

  if (event.keyCode == 27) {
    document.forms[0].elements['ajax_'+field].value = "";
    document.forms[0].elements[field].value = "0";
    ajax_hide(divname);
    return true;
  }
  if (event.keyCode == 38) {
    if (document.getElementById('ajax_0')) {
      if (ajax_current > 0) ajax_current--;
      currEl = document.getElementById('ajax_' + ajax_current);
      prevEl = document.getElementById('ajax_' + ajax_prev);
      alterClass(prevEl, 'ajaxOut');
      ajax_prev = ajax_current;
      alterClass(currEl, 'ajaxOver');
      if (document.all) {
        document.forms[0].elements['ajax_'+field].value = currEl.innerText;
      } else {
        document.forms[0].elements['ajax_'+field].value = currEl.textContent;
      }
      document.forms[0].elements['ajax_'+field].select();
    }
    return true;
  }
  if (event.keyCode == 40) {
    if (document.getElementById('ajax_0')) {
      if (ajax_current == -1) ajax_current = 0;
      else if (document.getElementById('ajax_' + (ajax_current+1))) ajax_current++;
      currEl = document.getElementById('ajax_' + ajax_current);
      prevEl = document.getElementById('ajax_' + ajax_prev);
      alterClass(prevEl, 'ajaxOut');
      ajax_prev = ajax_current;
      alterClass(currEl, 'ajaxOver');
      if (document.all) {
        document.forms[0].elements['ajax_'+field].value = currEl.innerText;
      } else {
        document.forms[0].elements['ajax_'+field].value = currEl.textContent;
      }
      document.forms[0].elements['ajax_'+field].select();
    }
    return true;
  }
  if (event.keyCode == 13) {
    if (document.getElementById('ajax_0')) {
      currEl = document.getElementById('ajax_' + ajax_current);
      if (currEl) {
        currEl.onmousedown();
        if (document.all) setTimeout("goNext('"+form+"', 'ajax_"+field+"');", 50);
        else goNext(form, 'ajax_' + field);
        ajax_hide(divname);
      }
    }
    return true;
  }

  if (value.length > 1) {
    if (extra_param_str) extra_param_str = eval(extra_param_str);
    ajax_bars[divname] = script+'?name='+field+'&field='+model_field+'&'+model_field+'='+escape(value)+'&dropdown=1&rand='+Math.random()+(extra_param_str?'&'+extra_param_str:'');
    ajax_next();
    document.getElementById('embedder_'+divname).style.display = "block";
  } else {
    ajax_hide(divname);
  }

  return true;
}

function ajax_field_refresh(event, form, divname, script, field, model_field, value, field_group, extra_param_str) {
  var currEl;
  var prevEl;

  if (event.keyCode == 9) {
    return true;
  }

  if (event.keyCode == 27) {
    document.forms[0].elements[field].value = "";
    ajax_hide(divname);
    return true;
  }
  if (event.keyCode == 38) {
    if (document.getElementById('ajax_0')) {
      if (ajax_current > 0) ajax_current--;
      currEl = document.getElementById('ajax_' + ajax_current);
      prevEl = document.getElementById('ajax_' + ajax_prev);
      alterClass(prevEl, 'ajaxOut');
      ajax_prev = ajax_current;
      alterClass(currEl, 'ajaxOver');
      document.forms[0].elements[field].select();
    }
    return true;
  }
  if (event.keyCode == 40) {
    if (document.getElementById('ajax_0')) {
      if (ajax_current == -1) ajax_current = 0;
      else if (document.getElementById('ajax_' + (ajax_current+1))) ajax_current++;
      currEl = document.getElementById('ajax_' + ajax_current);
      prevEl = document.getElementById('ajax_' + ajax_prev);
      alterClass(prevEl, 'ajaxOut');
      ajax_prev = ajax_current;
      alterClass(currEl, 'ajaxOver');
      document.forms[0].elements[field].select();
    }
    return true;
  }
  if (event.keyCode == 13) {
    if (document.getElementById('ajax_0')) {
      currEl = document.getElementById('ajax_' + ajax_current);
      if (currEl) {
        currEl.onmousedown();
        if (document.all) setTimeout("goNext('"+form+"', '"+field+"');", 50);
        else goNext(form, field);
        ajax_hide(divname);
      }
    }
    return true;
  }

  if (value.length > 1) {
    if (extra_param_str) extra_param_str = eval(extra_param_str);
    ajax_bars[divname] = script+'?name='+field+'&field='+model_field+'&field_group='+field_group+'&'+model_field+'='+escape(value)+'&rand='+Math.random()+(extra_param_str?'&'+extra_param_str:'');
    ajax_next();
    document.getElementById('embedder_'+divname).style.display = "block";
  } else {
    ajax_hide(divname);
  }

  return true;
}

function ajax_hide(divname) {
  setTimeout("document.getElementById('"+divname+"').innerHTML = ''; document.getElementById('"+'embedder_'+divname+"').style.display = 'none'; ajax_current = -1;", 50);
}

function ajax_choose_direct(divname, field, values, field_group) {
  if (field_group != '') {
    for(name in values) if (name != 'name') {
      var field_name = field_group + '[' + name + ']';
      if (document.forms[0].elements[field_name])
        document.forms[0].elements[field_name].value = values[name];
    }
  } else {
    document.forms[0].elements[field].value = values['name'];
  }
  ajax_hide(divname);
}

function ajax_choose(divname, field, id, values) {
  document.forms[0].elements['ajax_'+field].value = values['name'];
  document.forms[0].elements[field].value = id;
  ajax_hide(divname);
}


