function add_object(id) {
  var sel = document.getElementById(id);
  var avail = document.getElementById(id + '_avail');
  if (avail.selectedIndex < 0) {
    alert("Укажите объект в списке доступных");
    return false;
  }
  sel.options[sel.options.length] = new Option(avail.options[avail.selectedIndex].innerHTML, avail.options[avail.selectedIndex].value);
  avail.options[avail.selectedIndex] = null;

  return false;
}

function remove_object(id) {
  var sel = document.getElementById(id);
  var avail = document.getElementById(id + '_avail');
  if (sel.selectedIndex < 0) {
    alert("Укажите объект в списке выбранных");
    return false;
  }
  avail.options[avail.options.length] = new Option(sel.options[sel.selectedIndex].innerHTML, sel.options[sel.selectedIndex].value);
  sel.options[sel.selectedIndex] = null;
  
  return false;
}

function moveup_object(id) {
  var sel = document.getElementById(id);
  if (sel.selectedIndex < 0) {
    alert("Укажите объект в списке выбранных");
    return false;
  }
  if (sel.selectedIndex == 0) {
    return false;
  }
  var cur = {
    value: sel.options[sel.selectedIndex].value,
    innerHTML: sel.options[sel.selectedIndex].innerHTML
  };
  sel.options[sel.selectedIndex].value = sel.options[sel.selectedIndex - 1].value;
  sel.options[sel.selectedIndex].innerHTML = sel.options[sel.selectedIndex - 1].innerHTML;
  sel.options[sel.selectedIndex - 1].value = cur.value;
  sel.options[sel.selectedIndex - 1].innerHTML = cur.innerHTML;
  sel.selectedIndex--;
  return false;
}

function movedown_object(id) {
  var sel = document.getElementById(id);
  if (sel.selectedIndex < 0) {
    alert("Укажите объект в списке выбранных");
    return false;
  }
  if (sel.selectedIndex == sel.options.length - 1) {
    return false;
  }
  var cur = {
    value: sel.options[sel.selectedIndex].value,
    innerHTML: sel.options[sel.selectedIndex].innerHTML
  };
  sel.options[sel.selectedIndex].value = sel.options[sel.selectedIndex + 1].value;
  sel.options[sel.selectedIndex].innerHTML = sel.options[sel.selectedIndex + 1].innerHTML;
  sel.options[sel.selectedIndex + 1].value = cur.value;
  sel.options[sel.selectedIndex + 1].innerHTML = cur.innerHTML;
  sel.selectedIndex++;
  return false;
}

var focused = false;
var has_errors = false;
function set_error(el, title) {
  cl = el.parentNode.parentNode.className.split(' ', 1);
  if (cl[0] == '' || cl[0] == 'good')
    el.parentNode.parentNode.className = 'error'; else
    el.parentNode.parentNode.className = cl[0] + ' error';

  el.parentNode.parentNode.title = title;
  has_errors = true;
  if (!focused) {
    el.focus();
    focused = true;
  }
  return false;
}
function remove_error(el) {
  cl = el.parentNode.parentNode.className.split(' ', 1);
  if (cl[0] == '' || cl[0] == 'error')
    el.parentNode.parentNode.className = 'good'; else
    el.parentNode.parentNode.className = cl[0] + ' good';
  el.parentNode.parentNode.title = '';
}

function ValidateControl(el) {

    e = form_data[el];
    if (e['action'] == 'validate') {
      var cont = document.getElementById(e['id']);
      var Value = cont.value;
      if (e['type'] == 'int' && !/^[0-9]*$/.test(Value))
        return set_error(cont, "Укажите целое число");
      else if (e['type'] == 'float' && !/^[0-9.,]*$/.test(Value))
        return set_error(cont, "Укажите дробное число");
      else if (e['type'] == 'date' && !/^\d\d\.\d\d\.\d\d\d\d$/.test(Value))
        return set_error(cont, "Укажите дату: дд.мм.гггг");
      else if (e['required'] == 1 && (Value == ''))
        return set_error(cont, "Заполните обязательное поле");
      else if (e['length'] && (Value.length > e['length']))
        return set_error(cont, "Превышена маскимальная длина в " + e['length'] + "символов");
      else if (e['rule'] && (!eval(e['rule'])))
        return set_error(cont, "Число вне допустимого диапазона");

      remove_error(cont);

    }

}

function prepare_submit() {
  focused = false;
  has_errors = false;

  for (el in form_data)
  {

    e = form_data[el];
    if (e['action'] == 'send_multirow') {
      var sel = document.getElementById(e['id']);
      var values = '';
      for (var i = 0; i < sel.options.length; i++)
        if (typeof(sel.options[i].value) != 'undefined') {
          values += sel.options[i].value + ',';
        }
      document.getElementById(e['id'] + '_values').value = values;
    }

    ValidateControl(el);
  }

  return !has_errors;
}

function ControlBlur() {
  id = this.id;

  // Some predefined - don't focus
  focused = true;

  for (el in form_data)
  {
    if (form_data[el].id == id) {
      ValidateControl(el);
      break;
    }
  }
  //alert();
}


window.onload = function() {

// onmouseover="tbHighlight(this)" onmouseout="tbUnHighlight(this)"

  // Set onblur handlers for instant form validation
  for (el in form_data)
  {
    e = form_data[el];
    document.getElementById(e['id']).onblur = ControlBlur;
  }
}

