/*
  DSAjax ©2009 Dirk Schäffer
*/

var DSAjax = {
  
  Request: function(url, data, onComplete) {
    var client = null;
    
    // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
    if (typeof XMLHttpRequest != 'undefined') {
      client = new XMLHttpRequest();
    }
    
    if (!client) {
      // Internet Explorer 6 und älter
      try         {client  = new ActiveXObject("Msxml2.XMLHTTP");}
      catch(e) {
        try       {client  = new ActiveXObject("Microsoft.XMLHTTP");}
        catch(e)  {client  = null;}
      }
    }
    
    if (client) {
      client.onComplete = onComplete;
      client.onreadystatechange = function() {
        if (this.readyState == 4) {
          this.onComplete(this);
        }
      };
      
      client.open('POST', url, true);
      client.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      //client.setRequestHeader("Content-type", "text/xml");
    
      client.setRequestHeader("Content-length", data.length);
      client.setRequestHeader("Connection", "close");
      client.send(data);
    
      //client.send(null);
    }
  },
  
  Updater: function(elm, url, data) {
    this.Request(url, data, function(request) {elm.innerHTML = request.responseText;});
  }
};

function QueryString(value) {
  this.data = new Array();
  if (value) {this.data.push(value);}
}
QueryString.prototype.toString = function() {
  return this.data.join("&");
}
QueryString.prototype.add = function(key, value) {
  this.data.push(encodeURIComponent(key)+"="+encodeURIComponent(value));
}
QueryString.prototype.addForm = function(frm) {
  var elm;
  var m = 0;
  if (!frm) {
    frm = document.forms[0];
  }
  for (var i=0;i<frm.elements.length;i++) {
    elm = frm.elements[i];
    if (elm.name) {
      switch (elm.type) {
      case 'radio':           m = elm.checked ? 1 : 0; break;
      case 'checkbox':        m = 2; break;
      case 'text':            m = 1; break;
      case 'password':        m = 1; break;
      case 'hidden':          m = 1; break;
      case 'textarea':        m = 1; break;
      case 'select-one':      m = 1; break;
      case 'select-multiple': m = 1; break;
      case 'submit':          m = 0; break;
      case 'reset':           m = 0; break;
      case 'button':          m = 0; break;
      default:                m = 9; break;
          
      //case 'radio':    if (itm.checked) {this.add(itm.name, "1");} break;
      //case 'checkbox': if (itm.checked) {this.add(itm.name, "1");} 
      //                 else             {this.add(itm.name, "0");} break;
      //default:         this.add(itm.name, itm.value); break;
      }
      
      switch (m) {
      case 1: this.add(elm.name, elm.value); break;
      case 2: this.add(elm.name, Number(elm.checked)); break;
      case 9: alert('unhandled type: '+elm.type); break;
      }
    }
  }
}

