/////////////////////////////
// get a request object
function getRequestObject(){
 if (window.ActiveXObject){
  return new ActiveXObject("Microsoft.XMLHTTP");
 }
 if(window.XMLHttpRequest){
  return new XMLHttpRequest();
 } 
}
///////////////////////////////

//////////////////////////////////////

function ajaxObject(options){
 var requestObject=getRequestObject();
 if(options.isAsync){
  //async
  requestObject.onreadystatechange=processAsyncRequest;
  requestObject.open("POST", options.url, true);
  requestObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  requestObject.send(options.params);
 } else {
  //sync
  requestObject.open("POST", options.url, false);
  requestObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  requestObject.send(options.params);
  
  if(options.isXML){
   this.response=requestObject.responseXML;
   options.success(this.response);
  } else {
   this.response=requestObject.responseText;
   options.success(this.response);
  }

  if(options.updateNodeID){
   try{
    var updateNode=document.getElementById(options.updateNodeID);
     if(updateNode!=null){
     updateNode.innerHTML=this.response;
    }
   } catch(e){}
  }
 }
 
 function processAsyncRequest(){
  if(requestObject.readyState==4){
   if(requestObject.status==200){
    if(options.isXML){
     this.response=requestObject.responseXML;
    } else {
     this.response=requestObject.responseText;
    }
    try{
     if(typeof options.success=="function"){
      options.success(this.response);
     }
    } catch(e){}
    if(options.updateNodeID){
     try{
      var updateNode=document.getElementById(options.updateNodeID);
      if(updateNode!=null){
       updateNode.innerHTML=this.response;
      }
     } catch(e){}
    }
   } else {
    try{
     if(typeof options.fail=="function"){
      options.fail();
     }
    } catch(e){}
   }
  }
 }

 try{
  if(typeof options.finish=="function"){
   options.finish();
  }
 } catch(e){}
}
/////////////////////////////////////////

function serializer(){
 this.params='';
}

serializer.prototype.addElement=function(element){
 if(element.value!=undefined){
  this.params+='&'+element.id+'='+escape(element.value);
 } else {
  this.params+='&'+document.getElementById(element).id+'='+escape(document.getElementById(element).value);
 }
}

serializer.prototype.append=function(key, value){
 this.params+='&'+key+'='+escape(value);
}

