//assumes json.js functions are available

var papajaxComSet = new Array();
//var papajaxCallUrl = 'papajax-url.php'; // set in layout



////////////////////////////////////////////////////////////////////////////
//function papajack('echo',a,b,..,c,d,testE);  (testE is optional result function)
// result function format resfunc(res-obj,called-func-name,raw-result-test)
function papajax(fn)
  {
  var o = {};
  var tocall = fn;
  var callback = false;
  var len = arguments.length;
  
  if(typeof(arguments[len-1]) == 'function')
    {
    callback = arguments[len-1];
    len--;
    }
  
  for(var i=1; i<len; i++) 
    {
    o['p'+(i-1)] = arguments[i];
    }
    
    ///////////////    
    papajaxAsync(tocall,o,callback);
  }//function
////////////////////////////////////////////////////////////////////////////

  
  

//////////////////////////////////////////////////////////////////////////////
// FUNCTION WORKHORSE STABLE


  function papajaxAsync(tocall,o,e)
     {
     o['func'] = tocall;
     
     //alert('set: '+t+ " [" + v + "] " + e)
     var c = papajaxSelectCom();
     var ts;
     
     c["e"] = e;
     c['n'] = tocall;
  
     c.c.open('POST',papajaxCallUrl,true);
     c.c.onreadystatechange = c.func;   
     c.c.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     ts = "p="+encodeURIComponent(o.toJSONString());
     c.c.send(ts);
     //alert(ts)
     }//func


   function papajaxSelectCom()
   {// figure a com handler to use (create one or resuse old one)
    // - need some work. (see how to reuse)

     {//make new one
     c = papajaxNewXMLHttpReqObj();
     func = new Function("papajaxDeltaCom('"+papajaxComSet.length+"')");
     papajaxComSet.push({"free" : false, "c" : c,"func" : func});
     res = papajaxComSet[papajaxComSet.length-1]
     }//if
     
   return res;
   }//func



  function papajaxDeltaCom(i)
  { // assumes global varicom object instance
  
  var c = papajaxComSet[i];
  var xcom = c.c;
  var s = xcom.readyState;
  var r = xcom.responseText;
  var o = null;
  // alert(i + " s:"+s+" "+lprops(c));
  
  if(s == 4)
      {
      raw = xcom.responseText;
      //alert("varicomDelta: r= ["+r+"]")
     
      if(r.length == 0 || false) //should check here if valid json object.
             o = null;
          else
             o = eval("("+raw+")");//creates object from json
             
      if(c.e)
         c.e(o,c.n,raw);
          
      c.free = true;    
      }//if
  }//func
  
  
  function papajaxNewXMLHttpReqObj()
    {
    var xhr;
    if(window.ActiveXObject)
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      else
        xhr = new XMLHttpRequest();
    return xhr;
    }//func   
