var httpObject = new Array();
var httpObjectCount = 0;
var t = false;

function jsonajax() {
  this.getHttpObject = function() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        return new ActiveXObject("Msxml2.XMLHTTP");
      }
    }
  }

  this.submit = function(url, form, echo) {
    var http_request = false;
    var callback = null;
    var ready = function() {
      if (http_request.readyState == 4)  {
        if (callback){
          document.getElementsByTagName("body")[0].style.cursor = "auto";
          if (echo == true) return http_request.responseText;
          else ajax.parser(http_request.responseText);
        }
        return;
      }
    };
    function makeRequest() {
      http_request = ajax.getHttpObject();
      http_request.onreadystatechange = ready;
    }

    this.load = function(url) {
      callback = true;
      if(!http_request) makeRequest(url);
      document.getElementsByTagName("body")[0].style.cursor = "wait";
      if (form != null && form != false) {
        http_request.open("POST", url, true);
        http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
        if (form != true) text = ajax.getFormValues(form, false);
        else text = formtext;
        http_request.send(text);
      } else {
        http_request.open("GET", url, true);
        http_request.send(null);
      }
    };
    if(url) this.load(url);
  }

  this.send = function(url) {
    var http_request = false;
    this.load = function(url) {
      var http_request = ajax.getHttpObject();
      http_request.open("GET", url, true);
      http_request.send(null);
    };
    if(url) this.load(url);
  }

  this.parser = function(get) {
    percentcheck = new Array();
    //alert(get);
    jsonparse = eval('(' + get + ')');
    if (jsonparse) {
      if (jsonparse.updateContent) {
        for(var i=0; i<jsonparse.updateContent.length; i++) {
          var element = jsonparse.updateContent[i].element;
          var content = jsonparse.updateContent[i].content;
          var position = jsonparse.updateContent[i].position;

          if (document.getElementById(element)) {
            if (position == "after") {
              var nchild = document.createElement("div");
              nchild.innerHTML = content;
              document.getElementById(element).appendChild(nchild);
            }
            else if (position == "pre") {
              var nchild = document.createElement("div");
              nchild.innerHTML = content;
              if (document.getElementById(element).hasChildNodes())
                document.getElementById(element).insertBefore(nchild, document.getElementById(element).firstChild);
              else
                document.getElementById(element).appendChild(nchild);
            }
            else if (isFinite(position) && position != 0) {
              var nchild = document.createElement("div");
              nchild.innerHTML = content;
              position--;
              if (position<0) position = 0;
              count = document.getElementById(element).childNodes.length;
              if (count > position)
                document.getElementById(element).insertBefore(nchild, document.getElementById(element).childNodes[position]);
              else
                document.getElementById(element).appendChild(nchild);
            }
            else
              document.getElementById(element).innerHTML = content;
          }
        }
      }
      if (jsonparse.setStyle) {
        for(var i=0; i<jsonparse.setStyle.length; i++) {
          id = jsonparse.setStyle[i].id;
          style = jsonparse.setStyle[i].style;
          value = jsonparse.setStyle[i].value;
          string = "document.getElementById('"+id+"').style."+style+" = '"+value+"';";
          eval(string);
        }
      }
      if (jsonparse.setFormValue) {
        for(var i=0; i<jsonparse.setFormValue.length; i++) {
          form = jsonparse.setFormValue[i].form;
          name = jsonparse.setFormValue[i].name;
          value = jsonparse.setFormValue[i].value;
            if (value == "false") value = "";
          pos = jsonparse.setFormValue[i].pos;

          ajax.changeFormValue(form, name, value, pos);
        }
      }
      if (jsonparse.setIdValue) {
        for(var i=0; i<jsonparse.setIdValue.length; i++) {
          id = jsonparse.setIdValue[i].id;
          value = jsonparse.setIdValue[i].value;
            if (value == "false") value = "";
          pos = jsonparse.setIdValue[i].pos;

          ajax.changeIdValue(id, value, pos);
        }
      }
      if (jsonparse.resetForm) {
        for(var i=0; i<jsonparse.resetForm.length; i++) {
          form = jsonparse.resetForm[i].form;
          document.forms[form].reset();
        }
      }
      if (jsonparse.setFocus) {
        for(var i=0; i<jsonparse.setFocus.length; i++) {
          if (jsonparse.setFocus[i].id) {
            id = jsonparse.setFocus[i].id;
            document.getElementById(id).focus();
          } else {
            f = jsonparse.setFocus[i].form;
            n = jsonparse.setFocus[i].name;
            document.f.n.focus();
          }
        }
      }
      if (jsonparse.setSelect) {
        for(var i=0; i<jsonparse.setFocus.length; i++) {
          if (jsonparse.setFocus[i].id) {
            id = jsonparse.setFocus[i].id;
            document.getElementById(id).select();
          } else {
            f = jsonparse.setFocus[i].form;
            n = jsonparse.setFocus[i].name;
            document.f.n.select();
          }
        }
      }
      if (jsonparse.execScript) {
        for(var i=0; i<jsonparse.execScript.length; i++) {
          eval(jsonparse.execScript[i].code);
        }
      }
      if (jsonparse.setAttribute) {
        for(var i=0; i<jsonparse.setAttribute.length; i++) {
          id = jsonparse.setAttribute[i].id;
          attr = jsonparse.setAttribute[i].attr;
          value = jsonparse.setAttribute[i].value;
          document.getElementById(id).setAttribute(attr, value);
        }
      }
      if (jsonparse.alert) {
        for(var i=0; i<jsonparse.alert.length; i++) {
          text = jsonparse.alert[i].text;
          alert(text);
        }
      }
    }
  }

  this.getFormValues = function(formular, clean) {
    if (clean == "") clean = false;
    var str = "";
    var f = document.forms[formular];
    if (!f) return "";
    for(var i = 0; i<f.elements.length; i++) {
      switch(f.elements[i].type) {
        case "text":
        case "button":
        case "hidden":
        case "password":
        case "textarea":
        case "select-one":
          str += f.elements[i].name + "=" + encodeURIComponent(f.elements[i].value) + "&";
          break;
        case "select-multiple":
          var c = 0;
          for(var j=0; j<f.elements[i].options.length; j++) {
            if (f.elements[i].options[j].selected == true) {
              str += f.elements[i].name + "[" + c + "]=" + encodeURIComponent(f.elements[i].options[j].value) + "&";
              c++;
            }
          }
          break;
        case "select":
          str += f.elements[i].name + "=" + encodeURIComponent(f.elements[i].options[f.elements[i].selectedIndex].value) + "&";
          break;
        case "checkbox":
          if (f.elements[i].checked == true) { str += f.elements[i].name + "=" + encodeURIComponent(f.elements[i].value) + "&"; }
          break;
      }
    }
    str = str.substr(0,(str.length - 1));
    if (clean == true) document.forms[formular].reset();
    return str;
  }

  this.changeFormValue = function(formular, e, value, position) {
    if (!document.forms[formular]) {
      alert("Fehler: Fehlerhafter 'formular'-Wert: "+formular);
      return false;
    }
    if (document.forms[formular].length > 0) {
      var f = document.forms[formular];
      for(var i=0; i<f.elements.length; i++) {
        if (f.elements[i].name == e) {
          if (f.elements[i].type == "checkbox")  f.elements[i].checked = value;
          else if (f.elements[i].type == "select-one" || f.elements[i].type == "select-multiple") {
            for(var j=0; j<f.elements[i].length; j++) {
              v = f.elements[i].options[j];
              if (v.value == value) {
                v.selected = true;
                break;
              } else if (v.text == value) {
                v.selected = true;
                break;
              }
            }
          }
          else {
            if (position == "after") f.elements[i].value += " "+value;
            else if (position == "pre") f.elements[i].value = value+" "+f.elements[i].value;
            else f.elements[i].value = value;
          }
        }
      }
    }
    return true;
  }

  this.changeIdValue = function(id, value, position) {
    if (!document.getElementById(id)) {
      alert("Fehler: Fehlerhafter 'id'-Wert: "+id);
      return false;
    }
    e = document.getElementById(id);
    if (e.type == "checkbox")  e.checked = value;
    else if (e.type == "select-one" || e.type == "select-multiple") {
      for(var j=0; j<e.length; j++) {
        v = e.options[j];
        if (v.value == value) {
          v.selected = true;
          break;
        } else if (v.text == value) {
          v.selected = true;
          break;
        }
      }
    } else {
      if (position == "after") e.value += " "+value;
      else if (position == "pre") e.value = value+" "+e.value;
      else e.value = value;
    }
    return true;
  }



}

function change_display(id, type) {
  if (document.all && document.getElementById(id).style.getAttribute) {
    document.getElementById(id).style.setAttribute("display", type, "false");
  } else if (document.getElementById) {
    document.getElementById(id).style.display = type;
  }
}

var ajax = new jsonajax();